pip出问题了。如何修复DistributionNotFound错误?

156
无论何时我尝试使用pip时都会出现错误。例如:
$ sudo pip install gevent-websocket

Traceback (most recent call last):  
File "/usr/local/bin/pip", line 5, in <module>
from pkg_resources import load_entry_point
File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 2675, in <module>
parse_requirements(__requires__), Environment()
File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 552, in resolve
raise DistributionNotFound(req)
pkg_resources.DistributionNotFound: pip==0.8.1

我很想把值改成pip == 0.8.2,但我不想面对“黑客攻击”我的安装所带来的后果...... 我正在运行Python 2.7,而pip的版本是0.8.2。


这里有很多痛苦。简单的通用解决方案是从以下网址下载pip安装程序: https://bootstrap.pypa.io/get-pip.py 然后运行该文件(使用python)。其他修复方法非常依赖于系统,通常很混乱,下面的建议经常不起作用(基于我在两种不同类型的系统上的经验)。 - GregD
11个回答

256

我在我的MacBook上遇到了这个问题,原因是因为像@Stephan说的那样,我使用了easy_install安装pip,并且两种不同的py包管理工具混合使用导致了pkg_resources.DistributionNotFound问题。

解决方法是:

easy_install --upgrade pip

记住:只需使用上述工具中的一个来管理您的Py软件包。


58
这让我遇到了错误: pkg_resources.DistributionNotFound: distribute==0.6.36 - Timmmm
2
同样在Mac OS X 10.9上运行良好。谢谢! - Anton Babenko
2
你可能会发现:a) 你需要sudo easy_install --upgrade pip;b) 当你使用pip时,你可能会遇到关于wheel的错误。此时,请参考以下链接:https://dev59.com/dmEi5IYBdhLWcg3w2POB - mchicago
@PiotrDobrogost 我有点不同意 - 你链接的文章是关于使用virtualenv,否则你会有无数的包和性能问题以及应用程序之间的冲突 - 在这种情况下,我们想要使用virtualenv。然而,为了安装virtualenv,你希望为每个人全局安装它,因此需要sudo easyinstall。对于virtualenv的安装。这使得virtualenv可以正常工作,那么如何安装virtualenv而不进行手动(因此难以维护)安装呢? - mchicago
1
成功执行了命令'sudo easy_install3 --upgrade pip' - pavan
显示剩余4条评论

31

我将 /usr/local/bin/pip 中的 0.8.1 替换为 0.8.2,然后一切又正常了。

__requires__ = 'pip==0.8.2'
import sys
from pkg_resources import load_entry_point

if __name__ == '__main__':
    sys.exit(
        load_entry_point('pip==0.8.2', 'console_scripts', 'pip')()
    )

我通过easy_install安装了pip,这可能导致我的问题。 我认为现在应该这样做..

$ sudo apt-get install python-pip python-dev build-essential 
$ sudo pip install --upgrade pip 
$ sudo pip install --upgrade virtualenv

13
我总是试图避免使用操作系统软件包管理器安装纯Python软件包,我建议你也这样做。Ubuntu/Debian曾经损坏了setuptools软件包,这造成了一些问题,因为人们无法使用pip卸载软件包(由于它们的更改)。 - Hugo Lopes Tavares
使用apt或yum不够中立!本页面上的策略适用于本地开发,但请不要在部署时这样做。 - ken
我也遇到了同样的问题,在 Mac 上升级到 1.3.1 版本时,pip 自己崩溃了,但 pip 自己报告仍然是 1.2.1 版本... - Anthony Liekens
@PiotrDobrogost 请查看上面的评论 - 在这种情况下需要它才能使虚拟环境正常工作。 - mchicago

29

我在使用Homebrew时遇到了这个问题。以下是来自 #26900的解决方案。

python -m pip install --upgrade --force pip

尝试使用--user选项和不加选项两种方式可能会有所帮助(后者需要sudo权限)。 - Ray

13

尝试使用 get-pip 脚本重新安装:

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

这是从pip Github页面获取的内容,对我很有用。


1
我尝试了几个选项,这是对我有效的一个。 - Kobi

7

如果您使用的是CentOS,请确保已安装YUM软件包"python-setuptools"

yum install python-setuptools

帮我解决了问题。


6
我可以这样解决这个问题: ```html

我能够通过以下方式解决:

```
$ brew update
$ brew doctor
$ brew uninstall python
$ brew install python --build-from-source    # took ~5 mins
$ python --version                           # => Python 2.7.9
$ pip install --upgrade pip

我正在运行以下内容(截至2015年1月2日):

OS X Yosemite
Version 10.10.1

$ brew -v
Homebrew 0.9.5

$ python --version
Python 2.7.9

$ ipython --version
2.2.0

$ pip --version
pip 6.0.3 from /usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pip-6.0.3-py2.7.egg (python 2.7)

$ which pip
/usr/local/bin/pip

6
问题的根源通常是在bin(Linux)或Scripts(Windows)子目录中过时的脚本。我将以我自己遇到的问题为例进行解释。
我安装了虚拟环境版本1.10,它位于我的用户site-packages中(事实上,它在用户site-packages中而不是系统site-packages中是无关紧要的)。
pdobrogost@host:~$ which virtualenv
/home/users/pdobrogost/.local/bin/virtualenv
pdobrogost@host:~$ virtualenv --version
1.10

升级到1.11版本后,我遇到了以下错误:
pdobrogost@host:~$ virtualenv --version  
Traceback (most recent call last):   
  File "/home/users/pdobrogost/.local/bin/virtualenv", line 5, in <module>
    from pkg_resources import load_entry_point   
File "build/bdist.linux-x86_64/egg/pkg_resources.py", line 2701, in <module>
    return self.__dep_map   
File "build/bdist.linux-x86_64/egg/pkg_resources.py", line 572, in resolve
    if insert: 
pkg_resources.DistributionNotFound: virtualenv==1.10

在错误消息中提到的文件/home/users/pdobrogost/.local/bin/virtualenv看起来是这样的:

#!/opt/python/2.7.5/bin/python2.7
# EASY-INSTALL-ENTRY-SCRIPT: 'virtualenv==1.10','console_scripts','virtualenv'
__requires__ = 'virtualenv==1.10'
import sys
from pkg_resources import load_entry_point

if __name__ == '__main__':
    sys.exit(
        load_entry_point('virtualenv==1.10', 'console_scripts', 'virtualenv')()
    ) 

我们可以看到,virtualenv脚本没有更新,仍需要之前安装的1.10版本。
现在,可以按照以下方式重新安装virtualenv:

pdobrogost@host:~$ pip install --user --upgrade virtualenv
Downloading/unpacking virtualenv from https://pypi.python.org/packages/py27/v/virtualenv/virtualenv-1.11.1-py27-none-any.whl#md5=265770b61de41d34d2e9fdfddcdf034c
  Using download cache from /home/users/pdobrogost/.pip_download_cache/https%3A%2F%2Fpypi.python.org%2Fpackages%2Fpy27%2Fv%2Fvirtualenv%2Fvirtualenv-1.11.1-py27-none-any.whl
Installing collected packages: virtualenv
Successfully installed virtualenv
Cleaning up...

使用pip install --user --upgrade --force-reinstall virtualenv命令也无法解决问题(因为脚本/home/users/pdobrogost/.local/bin/virtualenv没有更改)。

我能找到的唯一解决方法是手动从/home/users/pdobrogost/.local/bin/文件夹中删除virtualenv*脚本,然后重新安装virtualenv。这样,新生成的脚本将引用包的正确版本:

pdobrogost@host:~$ virtualenv --version
1.11

6
我在OSx中遇到了类似的问题。我的堆栈跟踪显示:
raise DistributionNotFound(req)
pkg_resources.DistributionNotFound: setuptools>=11.3

然后我执行了以下操作。
sudo pip install --upgrade setuptools

这对我解决问题非常有帮助,希望其他人也会发现这个方法很实用。

1
这解决了我在 Windows 10 上的问题。 - Mark Allen
1
这在我们的CentOS 6上解决了问题。 - Dan Phillimore

2
在Mac OS X(MBP)上,以下方法(摘自本答案的另一个解决方案)解决了我的问题:
C02L257NDV33:~ jjohnson$ brew install pip
Error: No available formula for pip
Homebrew provides pip via: `brew install python`. However you will then
have two Pythons installed on your Mac, so alternatively you can:
    sudo easy_install pip
C02L257NDV33:~ jjohnson$ sudo easy_install pip

显然,这里的根本原因是有另一种方法来安装Python(在我的情况下是Homebrew)。希望负责pip脚本的人可以解决这个问题,因为它在首次在Stack Overflow上报告后仍然相关。


1

我遇到了这个问题,是因为我用一个奇怪的 ~/.pydistutils.cfg 安装了 python/pip,而我不记得自己写过。删除它,重新安装(使用 pybrew),一切都很好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接