so deaktivieren Sie virtualenv aus einem bash-Skript
Ich bin ein Anfänger in shell-Skripting, aber ich möchte ein bash-Skript zum aktivieren/deaktivieren einer virtuellen Umgebung mit virtualenv.
Dann möchte ich dieses Skript verwenden, wie ein Dienst in Ubuntu zu kopieren in /etc/init.d Ordner.
In meinem script habe ich eine variable wie diese:
VENV=/opt/odoo/odoo_server/venv_oddo/bin
Diese variable repräsentiert den bin-Pfad in meiner virtuellen Umgebung.
Innerhalb des Skripts ich aktivieren kann, die virtuelle Umgebung mit diesem statement:
. ${VENV}/activate
Dies ist möglich, da aktivieren wird eine Datei im bin-Verzeichnis in der virtuellen Umgebung.
Aber ich weiß nicht, die Anweisung in meinem script zu deaktivieren meiner virtuellen Umgebung.
Ich kann das nicht tun: . ${VENV}/deactivate
Das problem ist, dass nicht existiert eine Datei mit dem Namen deaktivieren, aber deaktiviert, ist eine Funktion innerhalb des bin/activate-Datei in der virtuellen Umgebung.
deactivate
vor der Ausfahrt ist weder notwendig noch nützlich ist.InformationsquelleAutor edkalel | 2015-04-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Werde es schwer sein, einen Dienst wie das nützliche.
oder
wird Quelle die
activate
Skript, d.h. seinen Inhalt , als wären Sie ein Teil der shell oder Skript, wo Sie Quelle Sie.virtualenvironment
'sactivate
ist speziell für diese Verwendung. Im Gegensatz dazu, nur das Skript normalerweise mitseinen Inhalt in einer subshell und haben keine nützliche Wirkung.
Jedoch, wird Ihr service-Skript wird bereits die Ausführung in einer subshell von seiner eigenen. Also, außer für die python-Befehle, die Sie als Teil der service-Prozess starten, wird es keine Wirkung haben wird.
Auf der plus-Seite, werden Sie nicht einmal zu kümmern, de-aktivieren der Umwelt, es sei denn, Sie wollen laufen, auch mehr python-Zeug in den service-Prozess starten, aber außerhalb Ihres virtualenv.
Ich habe bearbeitet meine Antwort. @edkalel, ist es jetzt einfacher zu verstehen? Der entscheidende Punkt ist, dass
activate
wirkt sich nur auf die shell/Skript, wo es ist sourced, nicht das ganze system.Danke für Ihre Erklärung. Ich denke, ich habe schon verstanden. Dann, wenn ich
activate
in meinem bash-Skript (mit . oder die Quelle), ist die virtuelle Umgebung aktiviert werden, die nur innerhalb des Skripts, nicht außerhalb in die Schale.Genau, @edkalel
InformationsquelleAutor das-g
Nur
deactivate
. Es funktioniert in der Schrift wie auch in der Kommandozeile, so lange, wie Sie die bash verwenden.Edit: auch in den meisten Fällen ist es eine bessere Idee, um Zauber vollständigen python-Pfad in Ihren Skripts und Dienste. Es ist zustandslos, mehr tragbar und funktioniert so ziemlich überall. Also anstatt das zu tun,
ist es normalerweise vorzuziehend zu tun
Vertrauen Sie mir, es wird speichern Sie die Fehlerbehebung)
deactivate
Innenseite des bash-Skript, bei der Ausführung, bekomme ich folgende Meldung in der shell:deactivate: command not found
Sie können nicht verwenden
deactivate
in ein shell-Skript ohne ersten einbinden des Skripts definiert diese Funktion . Siehe meine separate Antwort auf diese Frage.InformationsquelleAutor letitbee
Den
deactivate
"Befehl" vonvirtualenvwrapper
ist eigentlich eine shell-Funktion, ebenfalls so fürworkon
. Wenn Sie einen virtuellen env aktiv ist, können Sie die Liste mit den Namen dieser Funktionen mittypeset -F
.Um Sie in einem Skript, die Sie benötigen, werden dort definiert, da die shell-Funktionen nicht ausbreiten, Kind Muscheln.
Sie diese Funktionen definieren, die Quelle der
virtualenvwrapper.sh
Skript in der shell-Skript, wo Sie wollen, um auf diese Funktionen, z.B.:Erlaubt, dass Sie zum aufrufen dieser Funktionen in Ihren shell-Skript, wie man in der shell:
Update: Was ich beschrieben funktioniert für die anderen Funktionen virtualenvwrapper (z.B.
workon
). Ich habe fälschlicherweise angenommen es würde funktionieren auch deaktivieren, aber das ist ein komplizierter Fall, denn es ist eine Funktion, die definiert wird nur in der shell, woworkon
oderactivate
ausgeführt wurde.virtualenv
oderpython3 -m venv
.Wahrscheinlich auch an brasizy Methode (obwohl ich es nicht mag). Eigentlich denke ich, es ist in der Regel genug, um einfach wiederherstellen $PATH.
InformationsquelleAutor Andreas Maier
kopieren deaktivieren von code, der in ${VENV}/aktivieren.
fügen Sie Ihre ~/.bashrc
Befehl ausführen.
Habe ich selektiv verwendet, ohne Probleme python 2.7 und python 3,5 in dieser Weise.
Ich will wissen, der Grund für die negative Bewertung.
UPD: es funktioniert nicht, weil _OLD_VIRTUAL_PATH ist eine lokale variable und nicht exportiert... Ach. Keine gute Lösung. Keine Lösung überhaupt.
InformationsquelleAutor brasizy