【发布时间】:2015-05-26 13:04:40
【问题描述】:
我曾经使用 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,但它没有改变任何东西。 (我的本地用户也拥有该位置的完全访问权限。)
[更新:]
出于某种原因,我能够在没有 root (pip install --user virtualenv) 的情况下安装 virtualenv,但我尝试的所有其他软件包仍然失败。另外,如果我切换到新的虚拟环境,我仍然会收到同样的错误。我现在认为这与我的 $PYTHONPATH 变量有关,它似乎没有为我的virtualenv 更新,但我还没有找到真正的解决方案。
【问题讨论】:
-
我没有经常使用
pip,但我希望它知道该软件包是在系统范围内安装的还是只为用户安装的,这就是错误所在。解决方案是恢复原状,记录安装了哪些包,然后卸载并重新安装每个包。 -
pip通过查看$PYTHONPATH知道安装了哪些软件包。它不知道这是系统范围的还是用户特定的安装。 “还原”到根库文件夹不是解决方案,因为您必须在那里毫无疑问地使用sudo。这样做的重点是不在安装新的 python 包时使用sudo。 -
好的,所以我找到了这个,但我不同意接受的答案:stackoverflow.com/questions/15028648/…
标签: macos python-2.7 pip