我曾经使用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
似乎没有更新,但我还没有找到真正的解决方案。
答案 0 :(得分:0)
好吧,所以我找到了实际的问题和解决方案。我的$PYTHONPATH
包含无效目录。我很久以前就设置了$PYTHONPATH
并将其写入.bashrc
(或更准确的.bash_profile
)脚本。
pip
可能正在查看$PYTHONPATH
中的所有目录,虽然我不知道它们在每个目录中做了什么导致上述错误,但删除无效目录修复了我的问题。
我现在强烈建议您只使用virtualenv
而不是静态设置。