pip freeze> requirements.txt包括virtualenv中所有系统安装的包

时间:2016-07-15 14:06:00

标签: python virtualenv

有点背景故事,我对Python和开发相对较新,并且愚蠢地将项目特定的软件包安装为系统软件包。在virtualenvs内部尝试为特定项目创建requirements.txt文件时,这会引起我的问​​题。

例如,我已经在系统范围内安装了Kivy,每次我创建一个带有需求文件的新env时,我都会得到以下内容(是的,env处于活动状态):

$ pip freeze > requirements.txt
$ cat requirements.txt
Kivy==1.9.1
Pillow==2.6.1
Pygments==2.0.1
chardet==2.3.0
colorama==0.3.2
docutils==0.12
html5lib==0.999
kazam==1.4.5
pygobject==3.14.0
python-apt==0.9.3.12
python-debian==0.1.27
pyxdg==0.25
requests==2.4.3
roman==2.0.0
six==1.8.0
urllib3==1.9.1
wheel==0.24.0

我还试图卸载Kivy,其中包括(试图在这里谨慎,不想删除重要的操作系统包),但得到以下输出:

$ pip uninstall kivy 
Not uninstalling Kivy at /usr/lib/python3/dist-packages, owned by OS

所以我的问题是: 我怎样才能将我的python包恢复到默认状态,只安装了必要的系统包(几乎就像一个新的python安装),然后如何阻止virtualenv中的requirements.txt文件,包括系统范围内安装的包(I&#) 39;将来会更好地使用evn,所以不应该有太多系统范围的包装)

我也有兴趣了解为什么pip unistall kivy无法正常工作(是的,我已经尝试过以root身份运行)

运行Debian 8,如果这有任何区别

希望这是有道理的,并感谢您的任何建议。

编辑:所以我认为我做错了这件事,一旦我创建了env,我就一直在使用pip install而不是env/bin/pip install。除非我弄错了,否则这就是全球安装软件包的原因。需求文件也是如此。

1 个答案:

答案 0 :(得分:9)

您可以使用-l(或--local)参数冻结每个virtualenv中的本地包

pip freeze --local > requirements.txt