pip冷冻时没有显示带有pip的已安装软件包?

时间:2015-04-01 10:29:32

标签: python pip virtualenv

我在Debian Wheezy上使用virtualenvpip。我有一个奇怪的问题,包似乎安装好,但在virtualenv中不可见。

这是我的requirements.txt文件:

Django==1.7.7
psycopg2==2.5.4
django-geojson==2.6.0

如果我使用pip从我的virtualenv中安装它,它说已经安装了所有内容:

(.venv)$ sudo pip install -r requirements.txt
Requirement already satisfied (use --upgrade to upgrade): Django==1.7.7 in /usr/local/lib/python2.7/dist-packages (from -r requirements/base.txt (line 1))
Requirement already satisfied (use --upgrade to upgrade): psycopg2==2.5.4 in /usr/local/lib/python2.7/dist-packages (from -r requirements/base.txt (line 2))
Requirement already satisfied (use --upgrade to upgrade): django-geojson==2.6.0 in /usr/local/lib/python2.7/dist-packages (from -r requirements/base.txt (line 3))
Requirement already satisfied (use --upgrade to upgrade): six in /usr/local/lib/python2.7/dist-packages (from django-geojson==2.6.0->-r requirements/base.txt (line 3))
Cleaning up...

但是如果我pip freeze检查安装了什么,看起来pip认为我有一套完全不同的软件包,特别是它没有看到{{1}那里:

djgeojson

如果我启动Python终端,Python就看不到(.venv)$ pip freeze Django==1.7.4 argparse==1.2.1 coverage==3.7.1 distribute==0.6.24 django-debug-toolbar==1.2.1 gunicorn==19.3.0 psycopg2==2.5.4 requirements==0.1 setproctitle==1.1.8 sqlparse==0.1.14 wsgiref==0.1.2

为什么会这样?这很令人困惑。

1 个答案:

答案 0 :(得分:8)

您的问题是您已经安装了sudo的要求,而且它们已安装在您的系统python库文件夹中,而不是安装在虚拟环境的venv库中。

怎么办?运行相同的命令,但这次没有sudo:pip install -r requirements.txt。这将从虚拟环境运行pip并将软件包安装到正确的位置。

当您使用source path/to/my/venv/bin/acivate激活虚拟环境eq时,会更新当前用户的路径变量$PATH,然后当您使用sudo运行某些内容时,这个新的$ PATH就是您所拥有的激活虚拟环境时更新不再相同。当您打开新的shell窗口或以su或正在运行sudo的其他用户身份登录时,会发生同样的事情,$PATH变量不是全局系统变量。