Вопрос по python, virtualenv – virtualenv --system-site-packages не использует системные пакеты сайта

8

У меня сложилось впечатление, что использование флага --system-site-packages с virtualenv позволит виртуальной среде использовать уже установленные системные пакеты. Однако я считаю, что это не так. Я использую пользовательскую скомпилированную версию Python. Вы можете увидеть проблему в следующих шагах.

[[email protected] django]$ which python
/app/python/bin/python
[[email protected] django]$ which pip
/app/python/bin/pip
[[email protected] django]$ which virtualenv
/app/python/bin/virtualenv
[[email protected] django]$ python
Python 2.7.3 (default, Jul 27 2012, 11:30:41)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-50)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>> exit()
[[email protected] django]$ pip freeze
Django==1.4.2
distribute==0.6.30
mercurial==2.3.2
python-ldap==2.4.10
virtualenv==1.8.2
wsgiref==0.1.2
[[email protected] django]$ pip --version
pip 1.2.1 from /app/python/lib/python2.7/site-packages (python 2.7)
[[email protected] django]$ env

LD_LIBRARY_PATH=/app/python/lib:/app/openldap/lib:/app/instantclient_11_2
PATH=/app/python/bin:/app/openldap/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/bin/cfdelivered:/home/user/bin:/app/oracle/product/java/jdk1.6.0_30/bin
PYTHONPATH=/app/python/lib/python2.7
[[email protected] django]$ virtualenv --system-site-packages --distribute --python /app/python/bin/python2.7 foo
Running virtualenv with interpreter /app/python/bin/python2.7
New python executable in foo/bin/python2.7
Also creating executable in foo/bin/python
Installing distribute......done.
Installing pip................done.
[[email protected] django]$ . foo/bin/activate
(foo)[[email protected] django]$ which python
/app/xxx/django/foo/bin/python
(foo)[[email protected] django]$ which pip
/app/xxx/django/foo/bin/pip
(foo)[[email protected] django]$ env

LD_LIBRARY_PATH=/app/python/lib:/app/openldap/lib:/app/instantclient_11_2
VIRTUAL_ENV=/app/xxx/django/foo
PATH=/app/xxx/django/foo/bin:/app/python/bin:/app/openldap/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/bin/cfdelivered:/home/user/bin:/app/oracle/product/java/jdk1.6.0_30/bin
PYTHONPATH=/app/python/lib/python2.7
(foo)[[email protected] django]$ python
Python 2.7.3 (default, Jul 27 2012, 11:30:41)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-50)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
Traceback (most recent call last):
  File "", line 1, in 
ImportError: No module named django
>>>

Результаты python2.7 -c "импорт sys; печать (sys.path) "

Нормальный:

[[email protected] django]$ python2.7 -c "import sys;print(sys.path)" ['', '/app/python/lib/python2.7/site-packages/cx_Oracle-5.1.2-py2.7-linux-x86_64.egg'‌​, '/app/python/lib/python2.7/site-packages/python_ldap-2.4.10-py2.7-linux-x86_64.e‌​gg', '/app/python/lib/python2.7', '/app/python/lib/python27.zip', '/app/python/lib/python2.7/plat-linux2', '/app/python/lib/python2.7/lib-tk', '/app/python/lib/python2.7/lib-old', '/app/python/lib/python2.7/lib-dynload', '/app/python/lib/python2.7/site-packages']

Внутри venv:

(foo)[[email protected] django]$ python2.7 -c "import sys;print(sys.path)" ['', '/app/xxx/django/foo/lib/python2.7/site-packages/distribute-0.6.28-py2.7.egg', '/app/xxx/django/foo/lib/python2.7/site-packages/pip-1.2.1-py2.7.egg', '/app/python/lib/python2.7', '/app/xxx/django/foo/lib/python27.zip', '/app/xxx/django/foo/lib/python2.7', '/app/xxx/django/foo/lib/python2.7/plat-linux2', '/app/xxx/django/foo/lib/python2.7/lib-tk', '/app/xxx/django/foo/lib/python2.7/lib-old', '/app/xxx/django/foo/lib/python2.7/lib-dynload', '/app/xxx/django/foo/lib/python2.7/site-packages']
Что печатается, если вы попробуетеpython2.7 -c "import sys;print(sys.path)" при использовании как Python внутри virtualenv и Python используется для создания virtualenv? Ned Deily
Пожалуйста, включите перечисленные выше списки в свой вопрос (я бы поставил один путь на строку) и удалите их из комментариев. Thanks.I» Piotr Dobrogost

Ваш Ответ

1   ответ
7

я не уверен, что пошло не так, когда вы создалиvirtualenv но ясно, что он не имеет ожидаемых значений в егоsys.path, Если вы используетеvirtualenv x --system-site-packages создать виртуальную средуx, вы должны увидеть родительский Pythonsite-packages каталог наsys.path, В приведенном выше листинге последний элемент для внутреннего случая venv должен совпадать с обычным:/app/python/lib/python2.7/site-packages, Вы можете попробовать экспериментировать, создав два простыхvirtualenvс и без--system-site-packages, чтобы увидеть, если это так. Если нет, вы можете попробовать упростить свою конфигурацию и повторить попытку, например, удалить переменные среды, такие какPYTHONPATH который вам не нужно устанавливать.

Переменная среды PYTHONPATH была причиной проблемы. Удаление, которое решило проблему. Спасибо за вашу помощь! Michael Miller

Похожие вопросы