pip install --user error under OS X (virtualenv 没有修复)

pip install --user error under OS X (virtualenv doesn't fix it)

我曾经使用 sudo pip install [...] 安装 python (2.7.6) 包,直到最近我认为这是一个坏主意,我应该改用:pip install --user [...]

由于我使用的是 Mac OS X (10.10.3),我的 python 模块已安装到 /Library/Python/2.7/site-packages 中。现在,启用 --user 选项后,它们将安装到:/Users/USER/Library/Python/2.7/lib/python/site-packages

我已经将 所有 包(包括 pip/setuptools)移动到这个目的地,调整了我的 $PYTHONPATH 并更改了文件所有权给我的本地用户。我希望我现在可以打电话给 pip install --user [..],一切都会顺利进行。

不幸的是,情况并非如此。对于任何 pip install(或 pip install --upgrade)命令,我都会收到相同的错误(如下)。使用 virtualenv 时也是如此 - 出现相同的错误,我不知道为什么。

但是,当我使用 sudo pip install --user 时,一切正常 "fine",这就是为什么我认为它与文件权限有某种关系错误我看不到。 (这不太好,因为新安装的软件包将位于正确的位置,但所有文件都归 root 所有。)

知道我做错了什么或如何调试吗?

pip install --upgrade --user tornado
Collecting tornado
  Using cached tornado-4.1.tar.gz
Exception:
Traceback (most recent call last):
  File "/Users/USER/Library/Python/2.7/lib/python/site-packages/pip/basecommand.py", line 223, in main
status = self.run(options, args)
  File "/Users/USER/Library/Python/2.7/lib/python/site-packages/pip/commands/install.py", line 280, in run
requirement_set.prepare_files(finder)
  File "/Users/USER/Library/Python/2.7/lib/python/site-packages/pip/req/req_set.py", line 317, in prepare_files
functools.partial(self._prepare_file, finder))
  File "/Users/USER/Library/Python/2.7/lib/python/site-packages/pip/req/req_set.py", line 304, in _walk_req_to_install
more_reqs = handler(req_to_install)
  File "/Users/USER/Library/Python/2.7/lib/python/site-packages/pip/req/req_set.py", line 483, in _prepare_file
abstract_dist.prep_for_dist()
  File "/Users/USER/Library/Python/2.7/lib/python/site-packages/pip/req/req_set.py", line 123, in prep_for_dist
self.req_to_install.run_egg_info()
  File "/Users/USER/Library/Python/2.7/lib/python/site-packages/pip/req/req_install.py", line 368, in run_egg_info
self.setup_py, self.name,
  File "/Users/USER/Library/Python/2.7/lib/python/site-packages/pip/req/req_install.py", line 339, in setup_py
import setuptools  # noqa
  File "/Users/USER/Library/Python/2.7/lib/python/site-packages/setuptools/__init__.py", line 11, in <module>
from setuptools.extension import Extension
  File "/Users/USER/Library/Python/2.7/lib/python/site-packages/setuptools/extension.py", line 8, in <module>
from .dist import _get_unpatched
  File "/Users/USER/Library/Python/2.7/lib/python/site-packages/setuptools/dist.py", line 21, in <module>
    packaging = pkg_resources.packaging
AttributeError: 'module' object has no attribute 'packaging'

我也检查了pkg_resources的位置,出于某种原因删除了位于/usr/local/lib/python2.7/site-packagespkg_resources.pyc,但它没有改变任何东西。 (我的本地用户在此位置也具有完全访问权限。)

[更新:] 出于某种原因,我能够在没有 root (pip install --user virtualenv) 的情况下安装 virtualenv,但我尝试的所有其他软件包仍然失败。另外,如果我切换到一个新的虚拟环境,我仍然会收到同样的错误。我现在认为这与我的 $PYTHONPATH 变量有关,它似乎没有为我的 virtualenv 更新,但我还没有找到真正的解决方案。

好的,所以我找到了实际的问题和解决方案。我的 $PYTHONPATH 包含无效目录。我很久以前设置了我的 $PYTHONPATH 并将其写入 .bashrc(或更准确地说 .bash_profile)脚本。

pip 可能正在查看 $PYTHONPATH 中的所有目录,虽然我不知道它在每个目录中做了什么导致上述错误,但是删除无效目录修复了我的问题问题。

我现在也强烈建议只使用 virtualenv 而不是静态设置。