Homebrew Python 2.7安装中升级pip时出现的问题

5
我在Mac上使用Homebrew安装了Python 2.7.9,并且Homebrew也安装了pip。此外,我的Mac默认还安装了一个旧版本的Python,但是我从未使用过。
问题是,当我尝试升级pip(使用命令pip install --upgrade pip)时,pip似乎想要升级默认Python版本中附带的pip版本。以下是发生的情况(在重新安装Python 2.7.9之后,即执行brew remove python,然后执行brew install python):
$ pip -V
pip 6.0.7 from /usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pip-6.0.7-py2.7.egg (python 2.7)

以上看起来是正确的。但是,接下来会发生以下情况:
$ pip install --upgrade pip
You are using pip version 6.0.7, however version 6.0.8 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
Collecting pip from https://pypi.python.org/packages/py2.py3/p/pip/pip-6.0.8-py2.py3-none-any.whl#md5=41e73fae2c86ba2270ff51c1d86f7e09
  Using cached pip-6.0.8-py2.py3-none-any.whl
Installing collected packages: pip
  Found existing installation: pip 6.0.7
    Uninstalling pip-6.0.7:
      Successfully uninstalled pip-6.0.7

Successfully installed pip-1.4.1

为什么安装了pip 1.4.1?现在我收到以下信息:
$ pip -V
pip 1.4.1 from /Library/Python/2.7/site-packages/pip-1.4.1-py2.7.egg (python 2.7)

看起来对应的是较旧版本的Python,默认版本如此。当我再次尝试升级时,它会失败:

$ pip install --upgrade pip
Downloading/unpacking pip from https://pypi.python.org/packages/source/p/pip/pip-6.0.8.tar.gz#md5=2332e6f97e75ded3bddde0ced01dbda3
  Downloading pip-6.0.8.tar.gz (1.2MB): 1.2MB downloaded
  Running setup.py egg_info for package pip

    warning: no previously-included files found matching '.coveragerc'
    warning: no previously-included files found matching '.mailmap'
    warning: no previously-included files found matching '.travis.yml'
    warning: no previously-included files found matching 'pip/_vendor/Makefile'
    warning: no previously-included files found matching 'tox.ini'
    warning: no previously-included files found matching 'dev-requirements.txt'
    no previously-included directories found matching '.travis'
    no previously-included directories found matching 'docs/_build'
    no previously-included directories found matching 'contrib'
    no previously-included directories found matching 'tasks'
    no previously-included directories found matching 'tests'
Installing collected packages: pip
  Found existing installation: pip 1.4.1
    Uninstalling pip:
Cleaning up...
Exception:
Traceback (most recent call last):
  File "/Library/Python/2.7/site-packages/pip-1.4.1-py2.7.egg/pip/basecommand.py", line 134, in main
    status = self.run(options, args)
  File "/Library/Python/2.7/site-packages/pip-1.4.1-py2.7.egg/pip/commands/install.py", line 241, in run
    requirement_set.install(install_options, global_options, root=options.root_path)
  File "/Library/Python/2.7/site-packages/pip-1.4.1-py2.7.egg/pip/req.py", line 1294, in install
    requirement.uninstall(auto_confirm=True)
  File "/Library/Python/2.7/site-packages/pip-1.4.1-py2.7.egg/pip/req.py", line 525, in uninstall
    paths_to_remove.remove(auto_confirm)
  File "/Library/Python/2.7/site-packages/pip-1.4.1-py2.7.egg/pip/req.py", line 1639, in remove
    renames(path, new_path)
  File "/Library/Python/2.7/site-packages/pip-1.4.1-py2.7.egg/pip/util.py", line 294, in renames
    shutil.move(old, new)
  File "/usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 300, in move
    rmtree(src)
  File "/usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 247, in rmtree
    rmtree(fullname, ignore_errors, onerror)
  File "/usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 252, in rmtree
    onerror(os.remove, fullname, sys.exc_info())
  File "/usr/local/Cellar/python/2.7.9/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 250, in rmtree
    os.remove(fullname)
OSError: [Errno 13] Permission denied: '/Library/Python/2.7/site-packages/pip-1.4.1-py2.7.egg/EGG-INFO/dependency_links.txt'

Storing complete log in /Users/[me]/.pip/pip.log

然而,pip正确地安装到了/usr/local/lib/python2.7/site-packages(Homebrew提供的版本),我在使用pip安装模块和使用这些模块时没有明显的问题。在上述操作完成后,以下是which的输出结果:

$ which pip
/usr/local/bin/pip
$ which python
/usr/local/bin/python

发生了什么?需要帮助。


看起来确实很奇怪。我会尝试:/usr/local/bin/python -E -m pip install --upgrade pip - cel
/Library/Python/2.7/site-packages/pip-1.4.1-py2.7.egg 中的 pip 1.4.1 是 OSX 系统范围内的 Python 安装程序,现在使用 Homebrew,您不应该对其进行更改。确保 pip 二进制文件从 /usr/local/bin 运行。 - Mikko Ohtamaa
@MikkoOhtamaa 我相当确定当我运行 pip 时,会执行 /usr/local/bin/pip,这是根据 which pip 的输出判断的。这个结论合理吗? - dowbuen
@cel 这给了我与只运行 pip install --upgrade pip 相同的结果。我非常确定每次都在运行正确版本的 pippython,我的猜测是 Homebrew 安装的 pip 在某种程度上对来自默认 OS X 安装的 pip 感到困惑。 - dowbuen
@dowbuen 哦,好的,我之前猜测是 PYTHONPATHPYTHONHOME 的问题。那就算了。 - cel
显示剩余3条评论
2个回答

8

我认为这与此处描述的问题相同:https://github.com/pypa/pip/issues/2319

当sys.path中存在另一个pip egg时,会导致pip表现不良。

最简单的解决方法是持续运行sudo python -m pip uninstall pip,直到它停止工作,然后执行brew postinstall python(重新安装pip)。


这个对我有用,谢谢!链接也帮助我理解发生了什么。 - dowbuen
我知道这是两年前的评论了,但它真的帮助了我!谢谢。 - gonzofish

0

我也遇到了这个问题(在Yosemite上使用Homebrew Python 2.7.9)。我试图运行pip install virtualenv时遇到了这个问题:

> which pip2.7
/usr/local/bin/pip2.7
> which python
/usr/local/bin/python
> pip install virtualenv
Requirement already satisfied (use --upgrade to upgrade): virtualenv in /Library/Python/2.7/site-packages
> pip install --upgrade virtualenv
..
OSError: [Errno 13] Permission denied: '/Library/Python/2.7/site-packages/virtualenv-1.11.5-py2.7.egg-info/dependency_links.txt'

我通过暂时隐藏 /Library/Python/2.7/site-packages 文件并在完成后将其移回来来解决了这个问题。

> pip install virtualenv
Collecting virtualenv
  Using cached virtualenv-12.0.7-py2.py3-none-any.whl
Installing collected packages: virtualenv

Successfully installed virtualenv-12.0.7
> which virtualenv
/usr/local/bin/virtualenv
>

这也能正常工作。我在虚拟环境中得到了2.7.9版本,并且可以安装numpymatplotlibscipy等库,它们也能正常工作。


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