2012-11-05 13 views
7

Mam wrażenie, że użycie flagi --system-site-packages z virtualenv pozwoli środowisku wirtualnemu na korzystanie z już zainstalowanych pakietów systemowych. Jednak stwierdzam, że tak nie jest. Używam niestandardowej skompilowanej wersji Pythona. Możesz zobaczyć problem w poniższych krokach.virtualenv --systemy-site-site, które nie używają pakietów witryny systemowej

[[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 
<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 
[[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...<snip>...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 
<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)[[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 "<stdin>", line 1, in <module> 
ImportError: No module named django 
>>> 

Wyniki python2.7 -c "import sys; print (sys.path)"

Normalny:

[[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'] 

Wewnątrz 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'] 
+0

Co jest drukowane, jeśli wypróbujesz 'python2.7 -c" importuj sys; print (sys.path) "' podczas używania zarówno Pythona wewnątrz virtualenv, jak i Pythona użytego do utworzenia virtualenv? –

+0

Proszę wstawić powyższe informacje do pytania (umieszczę jedną ścieżkę w wierszu) i usunąć je z komentarzy. Dzięki. –

Odpowiedz

6

I nie jestem pewien, co poszło nie tak podczas tworzenia virtualenv, ale wyraźnie nie ma oczekiwanych wartości w swoim sys.path. Jeśli użyjesz virtualenv x --system-site-packages do utworzenia środowiska wirtualnego x, powinieneś zobaczyć katalog macierzysty Pythona site-packages na sys.path. W twoim wykazie powyżej, ostatni element dla sprawy wewnętrznej venv powinien być taki sam jak normalny przypadek: /app/python/lib/python2.7/site-packages. Możesz spróbować eksperymentować tworząc dwa proste virtualenv, z lub bez --system-site-packages, aby sprawdzić, czy tak jest. Jeśli nie, spróbuj uprościć konfigurację i spróbować ponownie, np. Usuwając zmienne środowiskowe, takie jak PYTHONPATH, których nie trzeba ustawiać.

+2

Przyczyną problemu była zmienna środowiskowa PYTHONPATH. Usunięcie to naprawiło problem. Dzięki za pomoc! –

Powiązane problemy