pip install - OS X下的用户错误(virtualenv没有解决它)

时间:2015-05-26 13:04:41

标签: macos python-2.7 pip

我曾经使用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 时,一切都运行良好"这就是为什么我认为它与文件权限错误有某种关系我看不到。 (它并不完全正确,因为新安装的软件包将位于正确的位置,但所有文件都归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的位置并删除了pkg_resources.pyc,由于某种原因,它位于/usr/local/lib/python2.7/site-packages,但它没有改变任何内容。 (我的本地用户在此位置也拥有完全访问权限。)

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

1 个答案:

答案 0 :(得分:0)

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

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

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