pip freeze 中没有显示使用 pip 安装的软件包?
Installed packages with pip are not shown in pip freeze?
我在 Debian Wheezy 上使用 virtualenv
和 pip
。我有一个奇怪的问题,包似乎安装正常,但在 virtualenv 中不可见。
这是我的 requirements.txt
文件:
Django==1.7.7
psycopg2==2.5.4
django-geojson==2.6.0
如果我从我的 virtualenv 中使用 pip
安装它,它会说一切都已安装:
(.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
认为我有一套完全不同的包,特别是它没有看到 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
如果我启动 Python 终端,Python 就看不到 djgeojson
。
为什么会这样?这很令人困惑。
您的问题是您已经使用 sudo 安装了要求,但它们安装在您的系统 python 库文件夹中,而不是在您的虚拟环境的 venv
库中。
怎么办? 运行 相同的命令,但这次没有 sudo:pip install -r requirements.txt
。这将从虚拟环境中 运行 pip 并将包安装到正确的位置。
当您使用 source path/to/my/venv/bin/acivate
激活虚拟环境 e.q 时,您当前用户的路径变量 $PATH
会更新,然后当您使用 sudo 运行 时,这您刚刚在激活虚拟环境时更新的新 $PATH 不再相同。当您打开一个新的 shell window 或使用 su
或 运行ning sudo
、$PATH
变量以不同的用户身份登录时,也会发生同样的事情不是全局系统。
我在 Debian Wheezy 上使用 virtualenv
和 pip
。我有一个奇怪的问题,包似乎安装正常,但在 virtualenv 中不可见。
这是我的 requirements.txt
文件:
Django==1.7.7
psycopg2==2.5.4
django-geojson==2.6.0
如果我从我的 virtualenv 中使用 pip
安装它,它会说一切都已安装:
(.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
认为我有一套完全不同的包,特别是它没有看到 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
如果我启动 Python 终端,Python 就看不到 djgeojson
。
为什么会这样?这很令人困惑。
您的问题是您已经使用 sudo 安装了要求,但它们安装在您的系统 python 库文件夹中,而不是在您的虚拟环境的 venv
库中。
怎么办? 运行 相同的命令,但这次没有 sudo:pip install -r requirements.txt
。这将从虚拟环境中 运行 pip 并将包安装到正确的位置。
当您使用 source path/to/my/venv/bin/acivate
激活虚拟环境 e.q 时,您当前用户的路径变量 $PATH
会更新,然后当您使用 sudo 运行 时,这您刚刚在激活虚拟环境时更新的新 $PATH 不再相同。当您打开一个新的 shell window 或使用 su
或 运行ning sudo
、$PATH
变量以不同的用户身份登录时,也会发生同样的事情不是全局系统。