Як виправити "ImportError: не можна імпортувати ім'я IncompleteRead"?


284

Коли я намагаюся встановити що-небудь з pipабо pip3, я отримую:

$ sudo pip3 install python3-tk
Traceback (most recent call last):
  File "/usr/bin/pip3", line 9, in <module>
    load_entry_point('pip==1.5.6', 'console_scripts', 'pip3')()
  File "/usr/lib/python3/dist-packages/pkg_resources.py", line 356, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/usr/lib/python3/dist-packages/pkg_resources.py", line 2476, in load_entry_point
    return ep.load()
  File "/usr/lib/python3/dist-packages/pkg_resources.py", line 2190, in load
    ['__name__'])
  File "/usr/lib/python3/dist-packages/pip/__init__.py", line 61, in <module>
    from pip.vcs import git, mercurial, subversion, bazaar  # noqa
  File "/usr/lib/python3/dist-packages/pip/vcs/mercurial.py", line 9, in <module>
    from pip.download import path_to_url
  File "/usr/lib/python3/dist-packages/pip/download.py", line 25, in <module>
    from requests.compat import IncompleteRead
ImportError: cannot import name 'IncompleteRead'

У мене є система Ubuntu 14.10.

Як я можу виправити цю проблему?


1
можливо, пов’язано: stackoverflow.com/questions/27318535/…
вік

@cel: Це не дублікат, тому що це для Windows, і я вже бачив це.
Мартін Тома

Посилання у прийнятій відповіді вказує на трекер випуску ubuntu - тому ця проблема, здається, не є специфічною для Windows. Ви спробували перевстановити python, як OPпропонується?
віч

@cel Неважливо, я просто знайшов досить просте рішення.
Мартін Тома

4
... що було що?
Джонатан Хартлі

Відповіді:


433

Хоча ця попередня відповідь може бути причиною, цей фрагмент працював для мене як рішення (в Ubuntu 14.04):

Спочатку видаліть пакунок із менеджера пакунків:

# apt-get remove python-pip

А потім встановіть останню версію поруч:

# easy_install pip

(спасибі @Aufziehvogel, @JunchaoGu)


10
Для зацікавлених:: --upgrade (-U)сила оновлення (шукає PyPI за останніми версіями)
Мартін Тома

11
Ви просто повинні бути обережними, не плутати вашого рідного менеджера пакунків (підходящого) стороною, встановлюючи його через easy_install. Якщо можливо, я б рекомендував apt-get remove pipі тоді easy_install pip.
Aufziehvogel

16
@Aufziehvogelapt-get remove python-pip
eggonlegs

7
В основному ця відповідь робить ситуацію ще гіршою.
hek2mgl

7
Для мене це "apt-get remove python3-pip", далі "apt-get install python3-setuptools", а потім "easy_install3 pip"
Jason Pepas

85

Ця проблема викликана невідповідністю між вашою інсталяцією pip та встановленням запитів.

Станом на запити версія 2.4.0 requests.compat.IncompleteRead була видалена . Старіші версії pip, наприклад, з липня 2014 року , все ще покладаються на IncompleteRead. У поточній версії pip імпорт IncompleteReadвидалено.

Тож винен або:

  • запити для занадто швидкого видалення загальнодоступного API
  • Ubuntu для занадто повільного оновлення файлів

Вирішити цю проблему можна, оновивши pip через Ubuntu (якщо є новіша версія) або встановивши pip в сторону від Ubuntu.


3
запити на встановлення піп -U, виправлено проблему.
jonincanada

2
@jonincanada, як я повинен запускати команду pip при збої в програмі?
Пітер

80

Для виправлення pip3 (працював на Ubuntu 14.10):

easy_install3 -U pip

2
Це працює і в Ubuntu 14.04. Майте на увазі, що це встановлює a, /usr/local/bin/pipякий призначений для Python3; раніше pipвиконував версію Python 2. Я виправив це, відключивши /usr/local/bin/pipповністю, тому я повинен явно запустити pip2або pip3.
Нельсон

3
на Debian Jessiefor python2.7- після очищення pip з sudo apt-get purge python-requestsі перевстановлення з apt-get (показано на іншій відповіді), запуск easy_install -U pipвиконував свою справу.
MikeiLL

1
Для себе більше всього; це виправлення, яке працювало для мене.
Хамід

Працює як шарм!
Не вдалося вченому

33

Або ви можете видалити всіх requests.

Наприклад:

  • rm -rf /usr/local/lib/python2.7/dist-packages/requests*

Це працювало для мене. Чи можу я знати, що стосується запитів до встановлення python-pip
Roselyn Verbo Domingo

Якщо ви подивитесь на requestsмодуль, ви побачите, що цей модуль / lib використовується для надсилання HTTP-запитів. pipмодуль потрібен requestsмодуль для завантаження пакетів із . And the видалених вами "Python Package Index messages" має іншу версію, яку pipпотрібно встановити.
Маріус Станка

Це працювало і для мене; Я зіткнувся з помилкою під час запуску pipігрової книги Ansible, яка використовувала модуль для встановлення залежностей на свіжу / нову установку Raspbian Jessie (для Raspberry Pi). Після видалення пакунку dist dist, все працює чудово.
geerlingguy

Працював і для мене. Я модернізував свою ОС від хрипкого до Джессі, тому, можливо, щось зламалось. Три способи, зазначені вище, для мене спочатку не спрацювали. Однак якщо я застосував метод 3, а потім команда rm -rf, я виявив, що він працює.
Еймон Кенні

це зробило цю роботу, зберігаючи піп від debian repo. дуже дякую!
Стефан

23

У Ubuntu 14.04 я вирішив це, використовуючи сценарій завантаження програми pip, як описано в документації

wget https://bootstrap.pypa.io/get-pip.py
sudo python get-pip.py

Це нормальне рішення для середовища розвитку.


Це вирішує питання. Шкода, що таке питання все ще відкрите у версії LTS.
ganesshkumar

У мене ця проблема була в Ubuntu 15, і, здається, вона працює. Сценарій get-pip.py сказав, що я вже мав шуканий пакет, але запропонував використовувати судо із прапором -H, який, на мою думку, працює.
Рік Хендерсон

17

Проблема полягає в модулі Python requests. Це можна зафіксувати за допомогою

$ sudo apt-get purge python-requests
[now requests and pip gets deinstalled]
$ sudo apt-get install python-requests python-pip

Якщо у вас є проблема з Python 3, вам доведеться писати python3замість python.


4
Це абсолютно приємне рішення.
Тінькер Нд

8
Класно знати про purge. Це все ще не встановив працюючу версію pip, і коли я намагався запустити from requests.compat import IncompleteReadCLI в python, він дав таку ж помилку. Яка робота DID після запуску вищезазначених команд була запущенаeasy_install -U pip
MikeiLL

Це найкраще рішення, яке не передбачає easy_install і не обробляє вашу систему, попередньо видаливши pip.
Марк Тамський

9

Це має працювати для вас. Дотримуйтесь цих простих кроків.

Спочатку давайте видалимо вже встановлений файл, щоб він не спричинив помилок.

Відкритий термінал.

Тип: sudo apt-get delete python-pip

Це видаляє піп, який вже встановлений.

Метод-1

Крок: 1 sudo easy_install -U pip

На ньому встановиться остання версія pip.

І поверне свою адресу: Встановлено /usr/local/lib/python2.7/dist-packages/pip-6.1.1-py2.7.egg

або

Метод-2

Крок: 1 перейдіть за цим посиланням .

Крок: 2 Клацніть правою кнопкою миші >> Зберегти як .. з ім'ям get-pip.py.

Крок: 3 використовуйте: cd, щоб перейти в той самий каталог, що і ваш файл get-pip.py

Крок: 4 використання: sudo python get-pip.py

На ньому встановиться остання версія pip.

або

Метод-3

Крок: 1 використання: sudo apt-get install python-pip

На ньому встановиться остання версія pip.


Чи можете ви додати трохи більше деталей у відповідь?
абарізон

Звичайно. Але де ти заплутався?
kiok46

Дякую, я видалив python-pip, а потім використав easy_install. pip знову працює.
phansen

@phansen немає проблем (у)
kiok46

8

Просто біг easy_install -U pipвирішив мою проблему.


2
Коментуючи старе, щоб висловити своє здивування, що мені довелося пробиратися через нитку людей, влучно чистячи різні програмні засоби, просто щоб знайти це дуже просте, корисне рішення. Не впевнений, які були всі обмеження, коли запитання було задано, але це спрацювало .
mttpgn

5

Перевірте, чи є у вас старіша версія requestsсидіти ~/.local/lib/python2.7/site-packages/і видаліть її, якщо це так (змінити шлях, щоб відобразити вашу версію python). Це вирішило для мене питання.


5

Моя версія pip на ubuntu пропонує:

  pip install --upgrade pip

4
Не працювало для мене, оскільки Pip цілком обтяжений цією помилкою. Будь-яке використання (навіть pip --version) відображає cannot import name IncompleteReadпомилку, тому піп, на жаль, не в змозі оновити себе
Abe Voelker

Насправді це працює на чистій установці Ubuntu 14.04 (завантажувальна програма від minbase). Якось pipвдається оновити себе, не звертаючись до requestsмодуля.
они

Це не спрацює зі зламаною кісточкою - дилемою з куркою чи яйця.
Arnie97

4

У Windows це працювало з адміністративного запиту:

  • Видалити C:\Python27\Lib\site-packages\requests*
  • easy_install requests==2.3
  • pip install --upgrade pip
  • pip install --upgrade requests

Встановлено / перевстановлено python-requestsта python3-requestsзафіксовано pip3. Зробив помилку встановлення python3.6beta, а потім python3.6rc.
noobninja

3

Я намагався з кожною відповіддю абебе, але не зміг.

Зробив це і працював

sudo apt-get purge python-virtualenv
sudo pip install pip -U

Після цього я просто встановив virtualenv з pip

sudo pip install virtualenv

Я створив virtualenv, над яким працював, і пакет був легко встановлений. Займіться у virtualenv, використовуючи source /bin/activate та спробуйте встановити ваш пакет, наприклад:

pip install terminado

Це працювало для мене, хоча я використовував python2.7 не python3


0

Перевірте, чи є живий інтерпретатор python у будь-якому з вікон терміналу. Якщо так, вбийте його, і спробуйте, sudo pipякий у мене працював.




0

Для CentOS я використав це, і він працював, будь ласка, використовуйте наступні команди:

sudo pip uninstall requests
sudo pip uninstall urllib3
sudo yum remove python-urllib3
sudo yum remove python-requests

(підтвердьте, що всі ці бібліотеки видалено)

sudo yum install python-urllib3
sudo yum install python-requests
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.