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?

War es hilfreich?

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

verwenden zu erleichtern

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top