Ich benutze virtualenv und den virtualenvwrapper. Mit dem workon
Befehl kann ich problemlos zwischen virtualenv wechseln .
me@mymachine:~$ workon env1
(env1)me@mymachine:~$ workon env2
(env2)me@mymachine:~$ workon env1
(env1)me@mymachine:~$
Wie beende ich alle virtuellen Maschinen und arbeite wieder an meiner realen Maschine? Im Moment kann ich nur zurückkehren, indem ich me@mymachine:~$
die Shell verlasse und eine neue starte. Das ist irgendwie nervig. Gibt es einen Befehl, an "nichts" zu arbeiten, und wenn ja, was ist das? Wenn ein solcher Befehl nicht existiert, wie würde ich ihn erstellen?
python
virtualenv
virtualenvwrapper
Apreche
quelle
quelle
Antworten:
Wenn Sie eine virtuelle Umgebung aktivieren, erhalten Sie normalerweise eine Shell-Funktion mit dem Namen:
was die Dinge wieder normalisiert.
Ich habe mir gerade noch einmal den Code genauer angesehen
virtualenvwrapper
, und ja, er unterstütztdeactivate
auch den Weg, um allen virtuellen Umgebungen zu entkommen.Wenn Sie versuchen, eine Anaconda- Umgebung zu verlassen , hängt der Befehl von Ihrer Version von ab
conda
. Neuere Versionen (wie 4.6) installieren eineconda
Funktion direkt in Ihrer Shell. In diesem Fall führen Sie Folgendes aus:Ältere Conda-Versionen implementieren stattdessen die Deaktivierung mithilfe eines eigenständigen Skripts:
quelle
virtualenvwrapper
und vielleicht Doug Hellmann es in Betracht ziehen würde! Hinweis für diejenigen , die später diese Kommentare lesen könnten, dassworkon
ist nicht ein nativevirtualenv
Befehl (das ist , was die ursprüngliche Frage ist etwa) , sondern einvirtualenvwrapper
Befehl!Ich habe einen Alias , Workoff , als das Gegenteil von Workon definiert :
Es ist leicht zu merken:
quelle
.bashrc
?~/.bashrc
Verwenden:
Wenn dies nicht funktioniert, versuchen Sie es
Jeder, der weiß, wie Bash
source
funktioniert, wird das seltsam finden, aber einige Wrapper / Workflows rund um virtualenv implementieren es als Ergänzung / Gegenstück zusource activate
. Ihr Kilometerstand kann variieren.quelle
deactivate
ist eine Funktion, die erstellt wird, wenn Sie dieactivate
Datei als Quelle verwenden. Ihr Vorschlag machtsource deactivate
überhaupt keinen Sinn, da es keine Datei mit dem Namendeactivate
So aktivieren Sie eine virtuelle Python-Umgebung:
So deaktivieren Sie:
quelle
$source activate
$cd /to/dir/i/want/my/virtualenv/installed
dann$virtualenv name_i_want_for_it
dann$. name_i_want_for_it/bin/activate
virtualenv scheint mir noch ein bisschen abwegig zu sein.Ich stellte fest, dass ich in einer Miniconda3-Umgebung Folgendes ausführen musste:
Weder
deactivate
nochsource deactivate
für mich gearbeitet.quelle
deactivate
war fürvirtualenv
undsource deactivate
ist für alte conda unter Linux.conda deactivate
ist ein guter plattformübergreifender Weg für Conda Envs (nicht Virtualenvs)Sie können verwenden
virtualenvwrapper
, um die Arbeitsweise zu vereinfachenvirtualenv
.Installation
virtualenvwrapper
:Wenn Sie eine Standard-Shell verwenden, öffnen Sie Ihre
~/.bashrc
oder~/.zshrc
wenn Sie Oh My Zsh verwenden . Fügen Sie diese beiden Zeilen hinzu:Verwenden Sie den folgenden Befehl, um eine vorhandene virtuelle Umgebung zu aktivieren
workon
:So deaktivieren Sie Ihre virtuelle Umgebung:
Hier ist mein Tutorial , Schritt für Schritt, wie man virtualenv und virtualenvwrapper installiert.
quelle
workon
Befehl, er funktioniert von jedem Verzeichnis aus.deactivate
in einem Shell-Skript verwenden, ohne zuerst das Skript zu beziehen , das diese Funktion definiert (in diesem Fall wird dieser Befehl nicht gefunden.). . Fehler)Da die
deactivate
durch Sourcing erstellte Funktion~/bin/activate
nicht mit den üblichen Mitteln zum Suchen nach einem solchen Befehl erkannt werden~/bin
kann, möchten Sie möglicherweise einen erstellen, der nur die Funktion ausführtdeactivate
.Das Problem ist, dass ein Skript mit dem Namen
deactivate
eines einzelnen Befehlsdeactivate
eine Endlosschleife verursacht, wenn es versehentlich ausgeführt wird, während es sich nicht im venv befindet. Ein häufiger Fehler.Dies kann vermieden werden, indem nur ausgeführt wird,
deactivate
wenn die Funktion vorhanden ist (dh durch Sourcing erstellt wurdeactivate
).quelle
Verwenden Sie
deactivate
.Beachten Sie,
(my_env)
ist weg.quelle
Ich benutze zsh-autoenv, das auf autoenv basiert .
Hier ist ein Beispiel:
Wenn ich das
dtree
Verzeichnis verlasse , wird die virtuelle Umgebung automatisch beendet."Development tree utiles"
ist nur ein Name ... Keine versteckte Verbindung zu den Illuminaten hier.quelle
Wenn Sie die
deactivate
im venv-activate
Skript bereitgestellte Funktion verwenden möchten, müssen Sie darauf vertrauen, dass die Deaktivierungsfunktion ordnungsgemäß codiert ist , um alle Umgebungsvariablen wieder auf den vorherigen Stand zu bringen. Dabei werden nicht nur die ursprüngliche Aktivierung , sondern auch alle Schalter , Konfigurationen oder andere Faktoren berücksichtigt Arbeit, die Sie vielleicht in der Zwischenzeit erledigt haben.Es ist wahrscheinlich in Ordnung, aber es birgt ein neues Risiko ungleich Null, dass Ihre Umgebung danach geändert wird.
Es ist jedoch technisch nicht möglich, dass ein Prozess die Umgebungsvariablen seines übergeordneten Elements direkt ändert. Daher können wir eine separate Sub-Shell verwenden, um absolut sicherzugehen, dass unsere
venv
s keine verbleibenden Änderungen hinterlassen:Aktivieren:
$ bash --init-file PythonVenv/bin/activate
venv
. Ihre ursprünglichebash
Hülle bleibt unverändert.So deaktivieren Sie:
$ exit
ODER[CTRL]
+[D]
venv
sich die Shell befindet, und Sie kehren zur ursprünglichen Shell zurück, bevor das Aktivierungsskript Änderungen an der Umgebung vorgenommen hat.Beispiel:
quelle
Ich hatte das gleiche Problem bei der Arbeit an einem Installationsskript. Ich habe mir angesehen, was die bin / activate_this.py ist hat und es umgekehrt.
Beispiel:
Ich bin nicht 100% sicher, ob es wie beabsichtigt funktioniert. Ich habe vielleicht etwas komplett verpasst.
quelle