为什么在使用--no-site-packages创建的新虚拟环境中pip freeze报告了某些包?
当我创建一个新的虚拟环境时,使用 pip freeze
命令查看时,发现里面已经有几个包被安装了,尽管我什么都没有安装。这让我很困惑,因为我本以为在第一次使用 pip install
安装东西之前,pip freeze
应该是空的。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"
2 个回答
30
为了回答一个稍微不同的问题:如果你遇到了一些麻烦的 .egg
文件,比如 wsgiref
,你可以通过使用 pip freeze -l
来排除它们,而不是使用 pip freeze
。
pip help freeze
中对这个选项的描述是:
-l, --local 如果在虚拟环境中,不报告全局安装的包
44
每次你用 --no-site-packages 创建一个虚拟环境时,它都会安装 setuptools
或 distribute
。出现 wsgiref
的原因是因为 Python 2.5 及以上版本的标准库给 wsgiref
库提供了 egg 信息,而 pip
并不知道这个是标准库的一部分还是第三方包。
在 Python 3.3 及以上版本中,这个问题似乎已经解决了:http://bugs.python.org/issue12218