我正在将Django应用程序部署到开发服务器上,当我运行pip install -r requirements.txt时,遇到了这个错误:

Traceback (most recent call last):
  File "/var/www/mydir/virtualenvs/dev/bin/pip", line 5, in <module>
    from pkg_resources import load_entry_point
ImportError: No module named pkg_resources

Pkg_resources似乎与setuptools一起分发。最初我认为这可能不会安装到virtualenv中的Python中,因此我使用以下命令将setuptools 2.6(与Python相同版本)安装到virtualenv中的Python站点包中:

sh setuptools-0.6c11-py2.6.egg --install-dir /var/www/mydir/virtualenvs/dev/lib/python2.6/site-packages

编辑:这只发生在virtualenv内部。如果我在virtualenv之外打开一个控制台,那么pkg_resources是存在的,但我仍然得到相同的错误。

关于为什么pkg_resources不在路径上有任何想法吗?


当前回答

我在更新Ubuntu版本后遇到了这个问题。它似乎已经通过并删除了我所有虚拟环境中的设置工具。

为了解决这个问题,我将虚拟环境重新安装回目标目录。这清理了丢失的安装工具,让事情再次运行。

例如:

~/RepoDir/TestProject$ virtualenv TestEnvironmentDir

其他回答

简单的解决方法是使用conda来升级setuptools或整个环境。(windows用户专用)

conda upgrade -c anaconda setuptools

如果setuptools被移除,需要重新安装setuptools。

conda install -c anaconda setuptools

如果这些方法都不起作用,您可以升级conda环境。但我不建议你重新安装和卸载一些包,因为这将加剧情况。

很多答案都推荐以下方法,但是如果你通读了脚本的源代码,你就会发现它已经被弃用了。

wget https://bootstrap.pypa.io/ez_setup.py -O - | python

如果你的pip也坏了,这也没用。

pip install setuptools

我发现我必须运行确保pip、setuptools和wheel是最新的命令,以使pip重新工作。

python -m pip install --upgrade pip setuptools wheel

如果你在通过conda安装的应用程序中遇到这个问题,解决方案(如此错误报告中所述)只是简单地安装安装工具:

conda install setuptools

这种事也发生在我身上。我认为如果requirements.txt包含一个“分发”条目,而virtualenv使用setuptools,问题就会发生。Pip将尝试修补setuptools以为分发腾出空间,但不幸的是它会中途失败。

简单的解决方法是删除当前的virtualenv,然后使用——distribute参数创建一个新的virtualenv。

使用virtualenvwrapper的示例:

$ deactivate
$ rmvirtualenv yourenv
$ mkvirtualenv yourenv --distribute
$ workon yourenv
$ pip install -r requirements.txt

当我以不同于创建它的用户的身份激活virtualenv时,我遇到了这个问题。似乎是权限问题。当我尝试@cwc的答案并在输出中看到这一点时,我发现了这一点:

Installing easy_install script to /path/env/bin
error: /path/env/bin/easy_install: Permission denied

切换回创建virtualenv的用户,然后运行原来的pip install命令,没有任何问题。希望这能有所帮助!