升级pip后出现DistributionNotFound错误

10

在阅读有关 virtualenv 的 这里 时,我意识到我没有 pip 1.3+,所以我运行了 pip install --upgrade pip,现在当我运行 pip --version 时,我得到以下结果:

Traceback (most recent call last):
  File "/usr/local/bin/pip", line 5, in <module>
    from pkg_resources import load_entry_point
  File "/usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/distribute-0.6.34-py2.7.egg/pkg_resources.py", line 2807, in <module>
    parse_requirements(__requires__), Environment()
  File "/usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/distribute-0.6.34-py2.7.egg/pkg_resources.py", line 594, in resolve
    raise DistributionNotFound(req)
pkg_resources.DistributionNotFound: pip==1.2.1

如果有帮助或者相关的话,我的$PATH看起来像这样:

/usr/local/bin:/usr/local/share/python:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/git/bin

此外,which pip 告诉我 /usr/local/bin/pip

不确定如何处理这个错误。谢谢。

8个回答

21

暴力方法:

假设您在Mac上使用homebrew(因为我看到了/usr/local/Cellar),我建议您:

  • 删除(或备份)/usr/local/lib/python2.7,然后
  • brew rm python && brew install python

这一定会在python旁边安装pip 1.3.3。您的distribute版本也将是0.6.35。

温和方法:

/usr/local/lib/python2.7/site-packages中只需删除以下内容:

  • easy-install.pth
  • pip-1.2.1-py2.7.egg 或者其他版本的pip。
  • distribute-0.6.34-py2.7.egg 或其他版本。

然后,执行brew rm python && brew install python。 这将保留来自brew和已安装东西的所有其他绑定。 Python、pip和distribute将被替换为最新版本。

此外:

请检查您是否在/Library/Python/2.7/site-packages中没有分发或setuptools或pip。该目录由所有python 2.7版本(从OS X或brewed)重复使用,并将干扰Homebrew已安装的pip / distribute。


在进入/Library/Python/2.7/site-packages目录后执行ls -a命令,只会显示三个文件:...README。所以我想这方面应该没问题了。 - saclark
好的,那么你没有执行 sudo easy_install pip,这很好。 - Samuel John
1
为什么这是必要的?是否有针对Homebrew的相关问题已经提交? - Justin Turner Arthur

10

今天我从OS X Lion升级到Mountain Lion后,恰巧遇到了类似的状态。

其他提出的解决方案要么不起作用,要么将Apple版Python替换为brew版本,我不确定这是否是saclark所要求的。

我所做的是手动安装distribute,从而使easy_install重新开始工作,然后再使用它安装pip

命令如下:

$ curl -O http://pypi.python.org/packages/source/d/distribute/distribute-0.6.45.tar.gz
$ tar -xzvf distribute-0.6.45.tar.gz
$ cd distribute-0.6.45
$ sudo python setup.py install
$ sudo easy_install pip

如果链接无法使用,您始终可以在此处找到更新版本的distribute。


这对我很有用,而且比“brew rm python && brew install python”的其他答案简单得多 - 谢谢! - MrColes
也对我有用,谢谢! - harperville

6

我今天遇到了类似的问题。经过一些研究,我通过使用以下方法重新安装pip来解决了这个问题:

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

希望有人会觉得它有用。

4

顺便提一下,有一个更简单的方法可以做到这一点(我刚遇到了这个问题)。

编辑/usr/local/bin/pip并更改版本号的引用(因此在下面,您需要将'1.5.6'更改为您正在使用的任何版本号):

#!/usr/local/opt/python/bin/python2.7
# EASY-INSTALL-ENTRY-SCRIPT: 'pip==1.5.6','console_scripts','pip'
__requires__ = 'pip==1.5.6'
import sys
from pkg_resources import load_entry_point

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

如果您能够达到这个点,那么您在这方面可能已经非常出色了。

以上所有其他答案对我都无效,这个有效!谢谢Jeff。 - Max

2
不需要卸载Python并重新安装。只需安装最新的分发软件包,然后使用它更新pip即可解决问题。
wget https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py
sudo python ez_setup.py
sudo easy_install -U pip

2

我想找出pip 1.2.1被要求的位置,但我没有那么多时间......所以我只是将pip降级到1.2.1。这在一段时间内是无法避免的,直到pip或分发包被修改为止。

怎么做呢?只需在控制台中键入以下内容(我希望您的分发包是正常的):

easy_install pip==1.2.1

1

修复现代版本(6.x)pip 的正确方法(2步)

  1. Delete the pip package in Python's site-package. For Homebrew Python 2.7, do this:

    rm -r /usr/local/lib/python2.7/site-packages/pip
    
  2. Follow the instructions on the official pip documentation site to reinstall it. For short:

    curl -O https://bootstrap.pypa.io/get-pip.py
    python get-pip.py
    
对于pip 6.x版本,无需安装旧版distribute包。只需安装setuptools即可,默认情况下通过上述提到的get-pip.py脚本进行安装。

0

嗯...令人困惑。不知道那个1.2.1是从哪里来的。只是出于好奇,你能否发布一下/usr/local/bin/pip的内容?应该只有几行。

你可以尝试使用distribute更新pip(再次),也可以更新distribute本身。

easy_install --upgrade distribute
easy_install --upgrade pip

如果我没记错的话,我相信1.2.1是我在运行pip install --upgrade pip之前所拥有的pip版本。nano /usr/local/bin/pip给了我这个:`#!/usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/2.7/Resou$

EASY-INSTALL-ENTRY-SCRIPT: 'pip==1.2.1','console_scripts','pip'

requires = 'pip==1.2.1' import sys from pkg_resources import load_entry_pointif name == 'main': sys.exit( load_entry_point('pip==1.2.1', 'console_scripts', 'pip')() )`
- saclark
这里有一些链接可以帮助解决问题(我不确定自己在做什么之前不愿意尝试任何东西):pip 破损; -- homebrew python 问题; -- 无法使用 pip; -- 使用 homebrew python 的 pip; -- homebrew/distributionnotfound 错误 - saclark
显然 pip --upgrade pip 没有升级 pip。我认为在我的回复中执行 easy_install 命令没有任何危险。如果一切都失败了,你也可以重新安装/重新编译 Python(brew rm python,然后 brew install python)。 - lutzh

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