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

Ric*_*ard 5 python pip virtualenv

我正在使用virtualenvpipDebian Wheezy.我有一个奇怪的问题,包似乎安装好,但然后在virtualenv中不可见.

这是我的requirements.txt档案:

Django==1.7.7
psycopg2==2.5.4
django-geojson==2.6.0
Run Code Online (Sandbox Code Playgroud)

如果我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...
Run Code Online (Sandbox Code Playgroud)

但是如果我pip freeze要检查安装的是什么,看起来pip我认为我有一套完全不同的软件包,特别是它看不到djgeojson:

(.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
Run Code Online (Sandbox Code Playgroud)

如果我启动Python终端,Python无法看到djgeojson.

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

Tim*_*vec 8

您的问题是您已经使用sudo安装了需求,而是将它们安装在系统python库文件夹中,而不是安装在虚拟环境的venv库中.

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

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