为什么在使用--no-site-packages创建的新虚拟环境中pip freeze报告了某些包?

52 投票
2 回答
9136 浏览
提问于 2025-04-16 21:06

当我创建一个新的虚拟环境时,使用 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 创建一个虚拟环境时,它都会安装 setuptoolsdistribute。出现 wsgiref 的原因是因为 Python 2.5 及以上版本的标准库给 wsgiref 库提供了 egg 信息,而 pip 并不知道这个是标准库的一部分还是第三方包。

在 Python 3.3 及以上版本中,这个问题似乎已经解决了:http://bugs.python.org/issue12218

撰写回答