如何修复“ 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系统。

我该如何解决这个问题?



@cel:这不是重复的,因为它是用于Windows的,我已经看到了。
Martin Thoma 2014年

接受答案中的链接指向ubuntu的问题跟踪器-因此,此问题似乎不是Windows特有的。您是否尝试过按照OP建议重新安装python ?
2014年

@cel没关系,我只是找到了一个非常简单的解决方案。
Martin Thoma 2014年

4
...那是什么?
乔纳森·哈特利

Answers:


433

尽管以前的答案可能是原因,但此片段为我解决了问题(在中Ubuntu 14.04):

首先从程序包管理器中删除程序包:

# apt-get remove python-pip

然后并行安装最新版本:

# easy_install pip

(感谢@ Aufziehvogel,@ JunchaoGu)


10
感兴趣的用户::--upgrade (-U)强制升级(在PyPI中搜索最新版本)
Martin Thoma 2015年

11
您只需要注意,不要混淆您的本机软件包管理器(apt)并排安装easy_install。如果可能的话,我建议apt-get remove pip再选择easy_install pip
Aufziehvogel 2015年

16
@Aufziehvogelapt-get remove python-pip
eggonlegs 2015年

7
基本上,这个答案使情况更加糟糕。
hek2mgl 2015年

7
对我来说,这是“ apt-get remove python3-pip”,然后是“ apt-get install python3-setuptools”,然后是“ easy_install3 pip”
Jason Pepas

85

此问题是由您的pip安装与请求安装之间的不匹配引起的。

根据要求,版本2.4.0 requests.compat.IncompleteRead 已被删除。较旧版本的点子(例如从2014年7月开始)仍然依赖IncompleteRead。在当前版本的pip中,IncompleteRead已删除的导入。

因此,应该怪的是:

  • 请求,以太快地删除公共API
  • Ubuntu的更新点太慢

您可以通过通过Ubuntu更新pip(如果有较新版本)或通过在Ubuntu之外安装pip来解决此问题。


3
pip安装请求-U,解决了该问题。
jonincanada

2
@jonincanada pip崩溃时我应该如何运行pip命令?
彼得

80

要修复pip3(在Ubuntu 14.10上工作):

easy_install3 -U pip

2
这也可以在Ubuntu 14.04中使用。请注意,这将安装一个/usr/local/bin/pip适用于Python3的版本。以前pip运行的是Python 2版本。我通过/usr/local/bin/pip完全禁用来解决此问题,因此必须显式运行pip2pip3
尼尔森

3
在Debian上Jessie使用python2.7-清除pip sudo apt-get purge python-requests并使用apt-get重新安装(显示在另一个答案上)后,运行easy_install -U pip就可以了。
MikeiLL,2015年

1
对我自己而言,比什么都重要;这是对我有用的解决方案。
哈米德

奇迹般有效!
失败的科学家,

33

或者您可以删除所有requests

例如:

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

这对我有用。可我知道什么是要求安装的python-PIP的关系
罗斯琳Verbo多明戈

如果查看requests模块,您将看到此模块/库用于发送HTTP请求。pip模块需要requests模块来从. And the 您删除的“ Python软件包索引请求”中下载软件包,您pip需要安装另一个版本。
Marius Stanca,2015年

这对我也起作用;运行Ansible剧本时遇到错误,该剧本使用该pip模块在Raspbian Jessie(适用于Raspberry Pi)的全新安装上安装依赖项。删除了请求dist包后,一切正常。
geerlingguy 2015年

也为我工作。我将操作系统从Wheezy升级到了jessie,所以可能发生了问题。首先,上述三种方法对我不起作用。但是,如果我使用方法3,然后使用rm -rf命令,我发现它确实起作用。
Eamonn Kenny

这样就完成了工作,同时仍然保持了Debian回购协议的优势。非常感谢!
Stefan

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脚本说我已经有了要查找的软件包,但建议我将sudo与-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
这绝对是一个不错的解决方案。
Tinker Sun

8
很酷的知道purge。这仍然没有安装pip的有效版本,当我尝试from requests.compat import IncompleteRead在python CLI中运行时,它给出了相同的错误。在运行上述命令后,什么DID工作正在运行easy_install -U pip
MikeiLL 2015年

这是不涉及easy_install的最佳解决方案,并且不会通过先删除pip来破坏系统。
Marc Tamsky '16

9

这应该为您工作。请遵循以下简单步骤。

首先,让我们删除已经安装的点子,这样就不会引起任何错误。

打开终端。

类型:sudo apt-get remove 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最新版本。


您能否在答案中添加更多细节?
abarisone 2015年

当然。但是,您在哪里感到困惑?
kiok46 2015年

谢谢,我删除了python-pip,然后使用easy_install。点子再次工作。
phansen

@phansen没问题(y)
kiok46

8

只需运行即可easy_install -U pip解决我的问题。


2
旧时的评论表达了我的惊讶,即我不得不经过一群倾向于清除各种软件的人,才发现这个非常简单,有用的解决方案。不知道提出问题时所有的限制是什么,但这是可行的
mttpgn

5

请检查是否你有一个旧版本的requests坐在你~/.local/lib/python2.7/site-packages/并删除它,如果它是(以反映您的Python版本的变化路径)的情况下。这为我解决了这个问题。


5

我在ubuntu上的pip版本建议:

  pip install --upgrade pip

4
对我没用,因为这个错误让点子变得很无聊。任何用法(甚至pip --version)都显示cannot import name IncompleteRead错误,因此pip可惜无法自我升级
Abe Voelker 2015年

实际上,这适用于全新安装的Ubuntu 14.04(来自的引导minbase)。不知何故pip设法无需引用requests模块即可自行更新。
2016年

这对折断的点子不起作用-鸡或蛋的困境。
Arnie97

4

在Windows中,这是通过管理提示进行的:

  • 删除 C:\Python27\Lib\site-packages\requests*
  • easy_install requests==2.3
  • pip install --upgrade pip
  • pip install --upgrade requests

安装/重新安装python-requestspython3-requests并修复了pip3。犯了安装python3.6beta然后python3.6rc的错误。
noobninja

3

我尝试了所有答案,但无法成功。

做到了并且工作了

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

之后,我用pip安装了virtualenv

sudo pip install virtualenv

我构建了正在使用的virtualenv,并且该软件包易于安装。通过使用进入virtualenv source /bin/activate 并尝试安装您的软件包,例如:

pip install terminado

它为我工作,尽管我使用的是python2.7而不是python3


0

检查是否在任何终端窗口中都存在python解释器。如果是这样,请杀死它并尝试sudo pip对我有用。


0
  1. sudo apt-get删除python-pip
  2. sudo easy_install请求== 2.3.0
  3. 须藤apt-get install python-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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.