我正在将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不在路径上有任何想法吗?


当前回答

没有一个张贴的答案对我有用,所以我重新安装pip,它工作了!

sudo apt-get install python-setuptools python-dev build-essential 

sudo easy_install pip 

pip install --upgrade setuptools

(参考:http://www.saltycrane.com/blog/2010/02/how-install-pip-ubuntu/)

其他回答

显然你缺少setuptools。一些virtualenv版本默认使用distribute而不是setuptools。在创建virtualenv时使用——setuptools选项,或者在您的环境中设置VIRTUALENV_SETUPTOOLS=1。

我在谷歌应用程序引擎环境中遇到了这个错误。pip install -t lib setuptools修复了这个问题。

如果您使用的是Python 3,则应该使用pip3而不是pip。该命令类似于$ pip3 install requirements.txt

对我来说,这个错误是因为我有一个名为“site”的子目录!我不知道这是不是pip bug,但我开始说:

/一些/目录/要求.txt /一些/目录/站点/

PIP install -r requirements.txt不能工作,给我上面的错误!

将子文件夹从“site”重命名为“src”修复了这个问题!也许皮普正在寻找“站点包”?疯了。

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

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

使用virtualenvwrapper的示例:

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