почему virtualenv не включает все системные пути?

Я создал virtualenv, и хотя у него много системных путей, других у него нет. В частности, кажется, что пакеты pyshared и dist не включены. В результате мои общесистемные MySQLdb и psycopg2 недоступны. Есть идеи, почему?


person freyley    schedule 04.11.2010    source источник
comment
Подробности: как вы создали файл virtualenv. какая была команда.   -  person pyfunc    schedule 05.11.2010


Ответы (2)


Кажется, это связано с тем, что Ubuntu возится с python и виртуальная среда

person freyley    schedule 04.11.2010

Единственный возможный способ, о котором я знаю, это если вы создали свой virtualenv с аргументом --no-site-packages:

из здесь:

Если вы строите ENV с помощью virtualenv --no-site-packages, он не будет наследовать какие-либо пакеты из /usr/lib/python2.5/site-packages (или из любого другого места, где находится ваш глобальный каталог site-packages). Это можно использовать, если у вас нет контроля над пакетами сайтов и вы не хотите зависеть от пакетов там, или вы просто хотите большей изоляции от глобальной системы.

Итак, вот пример, чтобы понять больше:

Сначала я создам виртуальную среду в обычном режиме (без --no-site-package), и вы увидите, что я всегда могу получить доступ к django, который установлен в моих системных пакетах сайтов (или dist-packages):

$ virtualenv A
New python executable in A/bin/python
Installing setuptools............done
$ source A/bin/activate
(A)$ python
Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41) 
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import django  
>>> django.__file__
'/usr/local/lib/python2.6/dist-packages/django/__init__.pyc'

Но теперь я создам виртуальную среду, используя --no-site-package:

$ virtualenv B --no-site-package
New python executable in B/bin/python
Installing setuptools............done.
$ source B/bin/activate
(B)$ python
Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41) 
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named django

теперь вы видите, что virtaulenv смог получить доступ к django из системных dist-packages (ubuntu) на моей машине.

Надеюсь, это поможет :)

person mouad    schedule 04.11.2010
comment
Это был бы хороший ответ, за исключением той части, что это единственный возможный способ, который совершенно неверен. Ubuntu обрабатывает dist-пакеты (которые он создал) иначе, чем сайт-пакеты (которые создал Debian), и поэтому, если вы создаете virtualenv, используя virtualenv, который вы установили из easy_install python или из установленного питона, он не распознает dist-packages, и в Ubuntu будут отображаться именно эти симптомы. - person freyley; 06.11.2010
comment
@freyley: извините, но я не согласен, потому что когда вы запускаете virtualenv с пакетами no-site-packages, это означает, что интерпретатор python в virtualenv не распознает ни один пакет за пределами виртуальной среды, независимо от того, где установлен (site-package, dist-packages ...) или какую ОС вы используете, посмотрите мое редактирование, особенно ту часть, когда я импортирую django, чтобы увидеть, что то, что вы предполагали, неверно, потому что в моем первом virtualenv я импортирую django из < b>dist-packages, просто чтобы прояснить, что я хочу просто помочь вам, поэтому я не хочу спорить или что-то в этом роде, и, возможно, ваш случай особенный. - person mouad; 06.11.2010
comment
не так, как я хочу спорить, это смешно, потому что вы приводите аргумент, что я не прав, и единственный способ, которым проблема, с которой я столкнулся, мог возникнуть, - это отсутствие пакетов-сайтов. - person freyley; 24.11.2010
comment
Чтобы быть ясным, сингулярность, я думаю, что ваш ответ великолепен, за исключением этих нескольких слов. Для того, кто нашел другой способ (который, как вы признаете, возможен — может быть, ваш случай особый — эти слова кажутся атакой. Они бесполезны. Наиболее вероятный способ был бы полезнее. - person freyley; 24.11.2010
comment
@freyley: извините, если я каким-либо образом оскорбляю вас, но есть поговорка, что мой бизнес многому меня научил: 80% ошибок возникают из-за пользователей, а не из-за приложения, понимаете. я просто пытался помочь здесь, но я думаю, вы этого не видите, но извините меня за то, что я говорю это, но вы могли бы просто сказать: я не использовал no-site-package при создании моего virtualenv с самого начала, чем я заткнется :) , но хорошо примите мои извинения, если я каким-либо образом оскорблю вас, и удачи вам :) - person mouad; 24.11.2010