在 Homebrew Python 2.7 安装中升级 pip 的问题

Problems with upgrading pip in Homebrew Python 2.7 installation

我在 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

这是怎么回事?任何帮助将不胜感激。

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

这是由于sys.path中有另一个pip egg时pip行为异常造成的。

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

我也有这个问题(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
>

它也能正常工作。我在 virtualenv 中安装了 2.7.9,可以安装 numpymatplotlibscipy,并且它们可以工作。