Pip要求输出全局包

时间:2012-09-23 13:13:16

标签: pip virtualenv requirements.txt

我的django项目有一个虚拟环境,但是当我点击pip freeze时,我得到了一个必须是全球网站包列表,包括太多的包,比如ubuntu包和那些无关紧要的东西。无论virtualenv是否有效,都会发生这种情况。我的网站包列表看起来也有点苗条,所以我想知道venv是否一直在运作。

(env)~/code/django/ssc/dev/env/lib/python2.7/site-packages> ls
django
Django-1.4-py2.7.egg-info
easy-install.pth
pip-1.0.2-py2.7.egg
setuptools-0.6c11-py2.7.egg
setuptools.pth

我的问题是什么?

2 个答案:

答案 0 :(得分:4)

如果您的虚拟环境可以访问系统的site-packages目录(即您使用virtualenv --system-site-packages),那么列表的长度是正常的。

比较以下内容:

$ virtualenv --system-site-packages v1 && source v1/bin/activate
$ (v1) pip freeze | wc -l  # 100

$ virtualenv v2 && source v2/bin/activate
$ (v2) pip freeze | wc -l  # 2

你可以尝试重新创建virtualenv吗?

或者,添加no-global-site-packages.txt文件应该告诉pip忽略全局站点包:

$ touch $VIRTUAL_ENV/lib/python${version}/no-global-site-packages.txt

答案 1 :(得分:0)

我不明白为什么在评论中只剩下最简洁的选项。由于我几乎错过了它,因此我将通过一些调整将其放在此处作为单独的答案。 如果您正在运行启用了system-site-packages的虚拟环境,则可以在冻结点时添加--local标志。 所以,如果您有:

py -m venv --system-site-packages env

要确保没有将所有系统部门都带入requirements.txt,只需运行:

python -m pip freeze --local > requirements.txt

另一个更复杂的选择,但仍然可行,因为依赖项不应该经常更改,那就是进入虚拟env库中的pyvenv.cfg文件并手动更改:

include-system-site-packages = true/false