/ / virtualenv - system-site-пакети, що не використовують пакети системних сайтів - python, virtualenv

virtualenv --системи-сайти-пакети не використовують системні пакети сайту - python, virtualenv

Я маю враження, що використовуючиПрапор --system-site-пакети з virtualenv дозволить віртуальному середовищу використовувати вже встановлені системні пакети. Однак я знаходжу, що це не так. Я використовую власну компільовану версію python. Ви можете побачити проблему на кроках нижче.

[user@machine django]$ which python
/app/python/bin/python
[user@machine django]$ which pip
/app/python/bin/pip
[user@machine django]$ which virtualenv
/app/python/bin/virtualenv
[user@machine 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()
[user@machine 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
[user@machine django]$ pip --version
pip 1.2.1 from /app/python/lib/python2.7/site-packages (python 2.7)
[user@machine django]$ env
<snip>
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
[user@machine 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...<snip>...done.
Installing pip................done.
[user@machine django]$ . foo/bin/activate
(foo)[user@machine django]$ which python
/app/xxx/django/foo/bin/python
(foo)[user@machine django]$ which pip
/app/xxx/django/foo/bin/pip
(foo)[user@machine django]$ env
<snip>
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)[user@machine 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 "<stdin>", line 1, in <module>
ImportError: No module named django
>>>

Результати python2.7 -c "import sys; print (sys.path)"

Нормальний:

[user@machine 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"]

Всередині вену:

(foo)[user@machine 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"]

Відповіді:

7 для відповіді № 1

Я не впевнений, що пішло не так, коли ви створили virtualenv але, очевидно, він не має очікуваних значень у своїх sys.path. Якщо ви використовуєте virtualenv x --system-site-packages для створення віртуального середовища x, ви повинні побачити батьківський Python "s site-packages каталог на sys.path. У вашому списку вище, останній елемент для внутрішнього корпусу venv повинен бути таким же, як у звичайному випадку: /app/python/lib/python2.7/site-packages. Ви можете спробувати експериментувати, створивши два простих virtualenv, з і без --system-site-packages, щоб побачити, чи це так. Якщо ні, ви можете спробувати спростити конфігурацію та повторити спробу, як-от видалення змінних середовища, як-от PYTHONPATH які вам не потрібно буде встановлювати.