Setzen Sie die Option "--no-site-packages" mit virtualenv zurück

126

Ich habe mit dieser --no-site-packagesOption eine virtuelle Umgebung erstellt und viele Bibliotheken installiert. Jetzt möchte ich die --no-site-packagesOption zurücksetzen und auch die globalen Pakete verwenden.

Kann ich das tun, ohne die virtuelle Umgebung neu zu erstellen?

Etwas präziser:

Ich frage mich, was genau passiert, wenn eine virtuelle Umgebung mit dieser --no-site-packagesOption erstellt wird, anstatt diese Option nicht zu verwenden.

Wenn ich weiß, was passiert, kann ich herausfinden, wie ich es rückgängig machen kann.

Olivier Verdier
quelle
Eine andere Frage wurde als Duplikat dieser Frage markiert und erhielt eine Antwort, die auch hier interessant sein könnte.
Mariotomo

Antworten:

162

Versuchen Sie, die Datei no-global-site-packages.txtin Ihrem LibOrdner in Ihrer virtuellen Umgebung zu entfernen (oder umzubenennen) .

Wobei venv der Name Ihrer virtuellen Umgebung ist und python3.4 der jeweiligen Python-Version entspricht, zum Beispiel:

$ rm venv/lib/python3.4/no-global-site-packages.txt

Und wenn Sie Ihre Meinung ändern und es zurückstellen möchten:

$ touch venv/lib/python3.4/no-global-site-packages.txt

Hinweis: Wenn Sie die obige Datei nicht sehen, haben Sie eine neuere Version von virtualenv. Sie möchten stattdessen dieser Antwort folgen

ars
quelle
18
Das wird es tun. Das Vorhandensein (oder Nichtvorhandensein) dieser Datei ist die einzige direkte Auswirkung des Flags no-site-packages. Die angepasste site.py von Virtualenv sucht nach dieser Datei, um zu entscheiden, ob sys.path globale Site-Paket-Verzeichnisse hinzugefügt werden sollen.
Carl Meyer
Brillant! Das hat es geschafft! Vielen Dank für diese Antwort und danke an Carl Meyer für den zusätzlichen Kommentar.
Olivier Verdier
1
Das ist virtualenv/python2.7/no-global-site-packages.txtin meinem Ubuntu-Server.
Caesarsol
4
Die Windows-Version von virtualenv enthält eine virtualenv/pyenv.cfgDatei. Es gibt eine Option für Site-Pakete: include-system-site-packages = false Ändern Sie diesen Wert und rufen Sie Activate.ps1
georgik
@georgik - das funktioniert auch für die Linux-Version von venvfür Python 3.4.
Tomasz Dzieniak
13

Zumindest für Python 3.5.2 befindet sich eine pyvenv.cfgDatei im Stammverzeichnis des Verzeichnisses virtualenv. Sie müssen lediglich das include-system-site-packagesFlag von ändern falsein true:

home = /usr/bin
include-system-site-packages = false  # <- change this to "true"
version = 3.5.2
Kotrfa
quelle
12

Wenn Sie virtualenvwrapper zum Verwalten von virtualenvs verwenden, können Sie mit der Shell-Funktion toggleglobalsitepackageszwischen der Verwendung und der Nichtverwendung von Site-Paketen wechseln.

Adaephon
quelle
2

Versuchen Sie, einen Symlink zwischen /virtualenv_root/lib/und hinzuzufügen/path/to/desired/site-packages/

Tim McNamara
quelle
+1 Dies funktioniert auf meinem System (openSUSE Linux 12.3, Python 2.7.3, virtualenv 1.8.4); Ich habe no-global-site-packages.txtnirgendwo etwas.
Aaron Digulla
2

Gehen Sie zu Ihrem venv-Ordner und öffnen Sie ihn pyvenv.cfg. (Wenn beispielsweise Ihre virtuelle Umgebung aufgerufen myenvwird, befindet sich die Datei unter myenv\pyvenv.cfg)

Sie sehen eine boolesche Einstellung namens include-system-site-packages

Setzen Sie diese Einstellung auf true, um globale Pakete zu verwenden

Wenn Sie die Verwendung globaler Pakete deaktivieren möchten, setzen Sie diese Einstellung falsestattdessen auf.

Zain Rizvi
quelle