6

我的 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

我的问题是什么?

4

2 回答 2

9

如果您的虚拟环境可以访问系统的 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
于 2012-09-23T13:21:47.057 回答
1

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

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

为确保您没有将所有系统依赖项放入您的requirements.txt.

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

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

include-system-site-packages = true/false
于 2020-05-31T15:42:58.117 回答