【发布时间】:2015-04-01 10:29:31
【问题描述】:
我在 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。
为什么会这样?这很令人困惑。
【问题讨论】:
-
我认为问题在于 pip 正在将东西安装到
/usr/local/lib/python2.7/dist-packages,但那不在sys.path上。但是为什么 pip 会选择将软件包安装到不在自己路径上的地方呢? -
你为什么要使用sudo安装,然后不使用sudo冻结pip?
-
好的,如果我运行
sudo pip freeze,我会看到相同版本的包。那么pip看到的内容是否取决于您以哪个 Linux 用户身份运行它?这……令人惊讶。
标签: python pip virtualenv