19 Stimmen

Wie kann überprüft werden, ob virtualenv mit '--no-site-packages' erstellt wurde?

Manchmal treten Fehler auf, von denen ich vermute, dass sie darauf zurückzuführen sind, dass meine Django-App global installierte Python-Module/Django-Apps verwendet, anstatt solche innerhalb ihres Virtualenvs.

Gibt es eine Möglichkeit zu überprüfen, ob das Virtualenv meiner App mit '--no-site-packages' erstellt wurde, ohne es löschen und dann wie folgt neu erstellen zu müssen?

deactivate
rmvirtualenv my_env
mkvirtualenv my_env --no-site-packages
workon my_env
pip install -r requirements.txt

Sicherlich muss es einen besseren Weg geben! Vielen Dank.

24voto

Rob Wouters Punkte 14969

Es gibt eine Datei in /lib/pythonX.X/ namens no-global-site-packages.txt, wenn Sie eine virtuelle Umgebung mit --no-site-packages erstellen.

Hab das gerade mit virtualenv 1.7 ausprobiert:

% virtualenv --no-site-packages env.without
% virtualenv --system-site-packages env.with

% find env.without | sed 's/env.without//' > files.without
% find env.with | sed 's/env.with//' > files.with

% diff files.with*
230a231
> /lib/python3.2/no-global-site-packages.txt

6voto

ThiefMaster Punkte 297146

Ein einfacher Weg ist das Öffnen der interaktiven Python-Shell und das Ausführen von import somemodule; print somemodule und dann den Pfad überprüfen, von dem aus das Modul importiert wurde.

>>> import flask; print flask

vs.

>>> import flask; print flask

0 Stimmen

Dies ist nur gültig, wenn Sie das gleiche Modul an beiden Stellen installiert haben. Sie können nicht wirklich versuchen, beide gleichzeitig zu importieren (es sei denn, Sie ändern den Pythonpfad)

0 Stimmen

Wenn nicht, erhalten Sie einen ImportError - abhängig davon, wo Sie es erhalten, wissen Sie, dass es nur am Standort X installiert ist.

0 Stimmen

Richtig, wenn Sie das Modul in site-packages installiert haben. Aber dann müssen Sie ein Modul auswählen, von dem Sie wissen, dass es da ist, und tatsächlich nach ImportError suchen.

3voto

Laur Ivan Punkte 3995

@Rob's Lösung ist gültig für neuere Versionen, ich habe mir den Code angesehen :).

Wenn du eine alte Version hast (wie meine 1.4.5), kannst du den Python-Pfad überprüfen. Wenn du das Standard-"site-packages"-Verzeichnis im Pfad hast (z. B. /usr/lib/python/site-packages), dann wurde dein virtualenv mit site-packages erstellt.

Du kannst es etwas wie folgt überprüfen:

import sys
for p in sys.path:
   if p.find("site-packages") >= 0:
     print (p)

Wenn du --no-site-packages hattest, wären alle deine Pfade wie:

/home/user/virtualenv/myenv/lib/python2.6/site-packages/distribute-0.6.10-py2.6.egg
/home/user/virtualenv/myenv/lib/python2.6/site-packages/pip-1.0.2-py2.6.egg
/home/user/virtualenv/myenv/lib/python2.6/site-packages

Ansonsten wirst du etwas wie haben:

/home/user/virtualenv/myenv/lib/python2.6/site-packages/distribute-0.6.10-py2.6.egg
/home/user/virtualenv/myenv/lib/python2.6/site-packages/pip-1.0.2-py2.6.egg
/home/user/virtualenv/myenv/lib/python2.6/site-packages
/usr/local/lib/python2.6/site-packages

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X