Wie verlassen / exit / deaktivieren ein Python virtualenv
-
13-09-2019 - |
Frage
Ich verwende virtualenv und die virtualenvwrapper. Ich kann zwischen virtualenv der Schalter nur in Ordnung, den workon
Befehl.
me@mymachine:~$ workon env1
(env1)me@mymachine:~$ workon env2
(env2)me@mymachine:~$ workon env1
(env1)me@mymachine:~$
Doch wie beende ich alle virtuellen Maschinen und meine realen Maschine WorkON wieder? Gerade jetzt, der einzige Weg, ich zurück zu haben
me@mymachine:~$
ist die Schale zu verlassen und eine neue starten. Das ist irgendwie ärgerlich. Gibt es einen Befehl „nichts“ WorkON, und wenn ja, was ist es? Wenn ein solcher Befehl nicht vorhanden ist, wie würde ich mich über sie zu schaffen?
Lösung
Normalerweise eine virtualenv Aktivierung erhalten Sie eine Shell-Funktion mit dem Namen:
$ deactivate
, welche die Dinge wieder normal setzt.
Ich habe sah nur speziell wieder auf dem Code für virtualenvwrapper,
und, ja, es unterstützt auch deactivate
als Weg aus allen virtualenvs zu entkommen.
Wenn Sie versuchen, eine verlassen Anaconda Umwelt, das Verfahren ist ein bisschen anders. Führen Sie den Zwei-Wort-Befehl source deactivate
da sie implementieren Deaktivierung eines eigenständigen Skript mit
bash-4.3$ deactivate
pyenv-virtualenv: deactivate must be sourced. Run 'source deactivate' instead of 'deactivate'
bash-4.3$ source deactivate
pyenv-virtualenv: no virtualenv has been activated.
Andere Tipps
ich eine alias workoff als das Gegenteil von WorkON:
alias workoff='deactivate'
Einfach zu merken:
[bobstein@host ~]$ workon django_project
(django_project)[bobstein@host ~]$ workoff
[bobstein@host ~]$
$ deactivate
Wenn das nicht funktioniert, versuchen Sie
$ source deactivate
Wer weiß, wie bash source
Werke werden denken, das ist seltsam, aber einige Wrapper / Workflows um als Kompliment virtualenv zu implementieren / Gegenstück source activate
. YMMV
Python virtuelle Umgebung zu aktivieren:
$cd ~/python-venv/
$./bin/activate
deaktivieren:
$deactivate
Ich fand, dass, wenn sie innerhalb einer Miniconda3 Umgebung hatte ich laufen:
conda deactivate
Weder deactivate
noch source deactivate
für mich gearbeitet.
Sie können virtualenvwrapper
, um die Art und Weise arbeiten Sie mit virtualenv
Installieren virtualenvwrapper
pip install virtualenvwrapper
Wenn Sie Standard-Shell verwenden, öffnen Sie Ihre ~/.bashrc
oder ~/.zshrc
wenn Sie oh-my-zsh verwenden. Fügen Sie diese zwei Zeilen:
export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh
Um eine bestehende virtualenv zu aktivieren, Befehl WorkON verwenden:
$ workon myenv
(myenv)$
Um Ihre virtualenv zu deaktivieren:
(myenv)$ deactivate
Hier ist mein Tutorial , Schritt für Schritt, wie virtualenv und virtualenvwrapper installieren
Mit deactivate
.
(my_env) user@user:~/my_env$ deactivate
user@user-Lenovo-E40-80:~/my_env$
Beachten Sie, (my_env)
ist weg.
Da die deactivate
Funktion von Sourcing ~/bin/activate
erstellt wurden, können nicht mit den üblichen Mitteln der Suche nach einem solchen Befehl in ~/bin
entdeckt werden, können Sie möchten erstellen, die nur die Funktion deactivate
ausführt.
Das Problem ist, dass ein Skript namens deactivate
einen einzigen Befehl deactivate
enthält, wird eine Endlosschleife verursachen, wenn sie versehentlich in der Venv während nicht ausgeführt. Ein häufiger Fehler.
Dies kann nur dadurch verhindert werden, deactivate
Ausführung, wenn die Funktion vorhanden ist (das heißt, durch Sourcing activate
erstellt wurde).
#!/bin/bash
declare -Ff deactivate && deactivate
Ich benutze zsh-autoenv die Basis weg ist autoenv .
zsh-autoenv automatisch Quellen (bekannt / weiße Liste)
.autoenv.zsh
Dateien, typischerweise verwendet in Projektstammverzeichnisse. Es behandelt „Enter“ und „Ereignisse verlassen, nisten, und stashing von Variablen (Überschreiben und Wiederherstellung).
Hier ist ein Beispiel:
; cd dtree
Switching to virtual environment: Development tree utiles
;dtree(feature/task24|✓); cat .autoenv.zsh
# Autoenv.
echo -n "Switching to virtual environment: "
printf "\e[38;5;93m%s\e[0m\n" "Development tree utiles"
workon dtree
# eof
dtree(feature/task24|✓); cat .autoenv_leave.zsh
deactivate
Also, wenn ich das dtree
Verzeichnis verlassen, wird die virtuelle Umgebung automatisch verlassen.
Das gleiche Problem selbst hatte während auf einem Installationsskript arbeiten, nahm ich einen Blick auf die bin / activate_this.py tat und es umgekehrt.
Beispiel:
#! /usr/bin/python
# -*- coding: utf-8 -*-
import os
import sys
# path to virtualenv
venv_path = os.path.join('/home', 'sixdays', '.virtualenvs', 'test32')
# Save old values
old_os_path = os.environ['PATH']
old_sys_path = list(sys.path)
old_sys_prefix = sys.prefix
def deactivate():
# Change back by setting values to starting values
os.environ['PATH'] = old_os_path
sys.prefix = old_sys_prefix
sys.path[:0] = old_sys_path
# Activate the virtualenvironment
activate_this = os.path.join(venv_path, 'bin/activate_this.py')
execfile(activate_this, dict(__file__=activate_this))
# Print list of pip packages for virtualenv for example purpose
import pip
print str(pip.get_installed_distributions())
# Unload pip module
del pip
# deactive/switch back to initial interpreter
deactivate()
# print list of initial environment pip packages for example purpose
import pip
print str(pip.get_installed_distributions())
Nicht 100% sicher, ob es wie vorgesehen funktioniert, ich etwas völlig verpasst haben.