为什么pip freeze会在使用--no-site-packages创建的新virtualenv中报告一些包?

Day*_*Day 52 python ubuntu pip virtualenv

当我创建一个新的virtualenv时,pip freeze表明我已安装了几个软件包,即使我没有在环境中安装任何东西.我期待pip freeze在我第一次pip install进入环境之前返回空输出.wsgiref是标准库的一部分不是吗,为什么它会出现呢?

day@garage:~$ mkdir testing
day@garage:~$ cd testing
day@garage:~/testing$ virtualenv --no-site-packages .
New python executable in ./bin/python
Installing distribute..........................................................
...............................................................................
.........................................done.
day@garage:~/testing$ . bin/activate
(testing)day@garage:~/testing$ pip freeze
distribute==0.6.10
wsgiref==0.1.2

一些额外的信息:

(testing)day@garage:~/testing$ pip --version
pip 0.7.2 from /home/day/testing/lib/python2.7/site-packages/pip-0.7.2-py2.7.eg
g (python 2.7)
(testing)day@garage:~/testing$ deactivate
day@garage:~/testing$ virtualenv --version
1.4.9
day@garage:~/testing$ which virtualenv
/usr/bin/virtualenv
day@garage:~/testing$ dpkg -S /usr/bin/virtualenv
python-virtualenv: /usr/bin/virtualenv
day@garage:~/testing$ cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=11.04
DISTRIB_CODENAME=natty
DISTRIB_DESCRIPTION="Ubuntu 11.04"

Hug*_*res 44

每次使用--no-site-packages创建virtualenv时,都会安装setuptoolsdistribute.wsgiref出现的原因是因为python 2.5+标准库向wsgireflib 提供egg信息(并且pip不知道它是stdlib还是第三方包).

它似乎在Python3.3 +上解决:http://bugs.python.org/issue12218

  • 是的,你不应该删除`wsgiref`本身.但如果你从`pip的输出中生成了'wsgiref`行,那么从你的[requirements.txt](http://www.pip-installer.org/en/latest/requirements.html)中删除`wsgiref`行是安全的. freeze`. (9认同)

Gly*_*yph 29

要回答一个稍微不同的问题:你可以通过代替而排除wsgiref(和任何其他类似问题的.egg文件,如果你不幸有任何原因).pip freeze -lpip freeze

pip help freeze 描述此选项:

-l, - local如果在virtualenv中,则不报告全局安装的包

  • 谢谢,这很有帮助. (2认同)
  • 花了我太久才找到这个答案.我需要`-l` (2认同)