Pip requirements outputting global packages
我对我的Django项目有一个虚拟的env,但是当我点击pip freeze时,我得到了一个必须是全球站点包列表的内容,包括太多的包,比如Ubuntu包和很多不相关的东西。无论virtualenv是否处于活动状态,都会发生这种情况。我的网站包列表看起来也有点苗条,所以我想知道Venv是否一直在工作。
1 2 3 4 5 6 7
| (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 |
我的问题是什么?
如果您的虚拟环境可以访问系统的站点包目录(即您使用了virtualenv --system-site-packages),那么列表很长是正常的。
比较以下各项:
1 2 3 4 5
| $ 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忽略全局站点包:
1
| $ touch $VIRTUAL_ENV/lib/python${version}/no-global-site-packages.txt |
- 您的意思是再次设置virtualenv,并重新安装我使用的所有包?我想我别无选择,对吧?但我肯定我没有用——system-site-packages。我跟踪了:jeffknupp.com/blog/2012/02/09/…你能想到为什么会发生这种情况吗?我将通过删除env文件夹并重新启动它来重新创建虚拟env。我可以检查一下它是否在使用系统站点包吗?我想只要在第一次冻结时检查一下是否包括它们就行了?
- 我已经更新了答案,但是他们在文章中所遵循的过程并没有什么特别之处。检查一个no-global-site-packages.txt应该会给你这个信息。
- 有一个no-global-site-packages.txt文件。但是我的需求文件不应该包括Rhythbox Ubuntuone==3.0.0 sessionInstaller==0.0.0 simplejson==2.3.2 Software Center APTD Plugins==0.0.0 ssh==1.7.14 System Service==0.1.6 Ubuntuone Coach==0.3.0 Ubuntuone Installer==3.0.2 Ubuntuone Storage Protocol==3.0.2,我不明白。我早就知道我被诅咒了,但这一次不算数。
- 你和pip freeze --local有什么关系吗?也许连一个sudo pip install --upgrade pip virtualenv也算是个不错的度量?这真的不算什么。
- 嗯,我刚刚建立了一个新的环境,它似乎生成了一个更小的、正确的需求文件。我会注意的。同时,除了PIP,还有没有一种方法可以评估django文件中的需求,以便在新环境中重建需求?非常感谢您的关注!
- @gvalkov非常感谢--local选择pip freeze。请把这个写在你的答案里,因为我已经找了很久了。
- 还有pip list --local。