Почему pip freeze сообщает о некоторых пакетах в новом virtualenv, созданном с -no-site-пакетами?
Когда я создаю новый virtualenv, pip freeze
показывает, что у меня установлено несколько пакетов, хотя я ничего не установил в среде. Я ожидал, что pip freeze
вернет пустой вывод до моего первого pip install
в среду. wsgiref является частью стандартной библиотеки, не так ли, поэтому почему он вообще появляется?
[email protected]:~$ mkdir testing
[email protected]:~$ cd testing
[email protected]:~/testing$ virtualenv --no-site-packages .
New python executable in ./bin/python
Installing distribute..........................................................
...............................................................................
.........................................done.
[email protected]:~/testing$ . bin/activate
(testing)[email protected]:~/testing$ pip freeze
distribute==0.6.10
wsgiref==0.1.2
Дополнительная информация:
(testing)[email protected]:~/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)[email protected]:~/testing$ deactivate
[email protected]:~/testing$ virtualenv --version
1.4.9
[email protected]:~/testing$ which virtualenv
/usr/bin/virtualenv
[email protected]:~/testing$ dpkg -S /usr/bin/virtualenv
python-virtualenv: /usr/bin/virtualenv
[email protected]:~/testing$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=11.04
DISTRIB_CODENAME=natty
DISTRIB_DESCRIPTION="Ubuntu 11.04"
Ответы
Ответ 1
Каждый раз, когда вы создаете virtualenv с --no-site-пакетами, он устанавливает setuptools
или distribute
. И причина, по которой возникает wsgiref
, заключается в том, что стандартная библиотека python 2.5+ предоставляет информацию о яйцах в wsgiref
lib (и pip
не знает, является ли это stdlib или сторонним пакетом).
Кажется, он решен на Python3.3 +: http://bugs.python.org/issue12218
Ответ 2
Чтобы ответить на несколько иной вопрос: вы можете исключить wsgiref
(и любые другие аналогично-проблемные файлы .egg
, если вам почему-то не хватает, чтобы по каким-либо причинам), выполнив pip freeze -l
вместо pip freeze
.
pip help freeze
описывает эту опцию:
-l, --local Если в virtualenv не сообщать глобально установленные пакеты