Почему pip freeze сообщает о некоторых пакетах в новом virtualenv, созданном с помощью -- no-site-packages?


когда я создаю новый 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"
2 52

2 ответа:

каждый раз, когда вы создаете virtualenv с -- no-site-packages он устанавливает setuptools или distribute. И причина wsgiref появляется потому, что стандартная библиотека python 2.5 + предоставляет информацию о яйце wsgiref lib (и pip не знает, если это stdlib или пакет 3rd party).

это, кажется, решается на Python3.3+: http://bugs.python.org/issue12218

чтобы ответить на несколько другой вопрос: вы можете исключить wsgiref (и любой другой аналогично-проблематичный .egg файлы, если вам не повезло иметь их по какой-либо причине), делая pip freeze -l вместо pip freeze.

pip help freeze описывает такой вариант:

- l, --local если в virtualenv, не сообщайте глобально установленные пакеты