2011-07-08 3 views
52

Когда я создаю новый virtualenv, pip freeze показывает, что у меня есть пара пакетов, хотя я ничего не установил в среде. Я ожидал, что pip freeze вернет пустой вывод до моего первого pip install в окружающую среду. wsgiref is part of the standard library не так ли, так почему он вообще появляется?Почему pp Freeze сообщает о некоторых пакетах в новом virtualenv, созданном с -no-site-пакетами?

 
[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" 
+0

распространять это то, что обеспечивает пип себя, так что если вы хотите быть в состоянии использовать pip для установки вещей в вашем virtualenv, вам нужно начать с pip. пип зависит от wsgiref. –

+3

pip не зависит от wsgiref –

ответ

44

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

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

+0

Большое спасибо. +1 для 3.3 bugref :) – Day

+0

Так безопасно ли удалить wsgiref? Спасибо за информацию! – Paolo

+1

Нет, удалить его не безопасно, поскольку 'wsgiref' является частью стандартной библиотеки python: http://docs.python.org/library/wsgiref.html –

29

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

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

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

+2

Спасибо, что это полезно. – Day

+0

дистрибутив по-прежнему будет указан, tho ... –

+2

Взял меня слишком долго, чтобы найти этот ответ. Мне нужен был '-l' – blockloop