我的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
我的问题是什么?
答案 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