Jak opuścić/zakończyć / dezaktywować wirtualną wersję Pythona

Używam virtualenv i virtualenvwrapper. Mogę przełączyć się pomiędzy virtualenv ' em za pomocą polecenia workon.

me@mymachine:~$ workon env1
(env1)me@mymachine:~$ workon env2
(env2)me@mymachine:~$ workon env1
(env1)me@mymachine:~$ 

Jak wyjść ze wszystkich maszyn wirtualnych i ponownie pracować na mojej prawdziwej maszynie? W tej chwili jedynym sposobem na powrót do me@mymachine:~$ jest wyjście z powłoki i rozpoczęcie nowej. To trochę irytujące. Czy istnieje polecenie do pracy nad "nic", a jeśli tak, to co to jest? Jeśli takie polecenie nie istnieje, jak miałbym je stworzyć?

Author: David B, 2009-06-13

13 answers

Zwykle aktywacja virtualenv daje funkcję powłoki o nazwie:

$ deactivate
Co przywraca wszystko do normy.

Właśnie ponownie przyjrzałem się dokładnie kodowi virtualenvwrapper i tak, również obsługuje deactivate jako sposób na ucieczkę od wszystkich virtualenvów.

Jeśli próbujesz zostawić Anakonda environment, polecenie zależy od wersji conda. Najnowsze wersje (np. 4.6) instalują funkcję conda bezpośrednio w powłoce, w takim przypadku biegasz:

conda deactivate

Starsze wersje conda zamiast tego implementują dezaktywację za pomocą autonomicznego skryptu:

source deactivate
 2894
Author: Brandon Rhodes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-11-26 16:19:27

Użycie:

$ deactivate 

Jeśli to nie zadziała, spróbuj

$ source deactivate

Każdy, kto wie jak Bash source prace będą myśleć, że to dziwne, ale niektóre owijarki / przepływy pracy wokół virtualenv implementują go jako uzupełnienie / odpowiednik source activate. Przebieg może się różnić.

 61
Author: DarkRider,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-11-07 11:54:24

Zdefiniowałem alias, workoff , jako przeciwieństwo workoff :

alias workoff='deactivate'

Łatwo zapamiętać:

[bobstein@host ~]$ workon django_project
(django_project)[bobstein@host ~]$ workoff
[bobstein@host ~]$
 54
Author: Bob Stein,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-11-07 11:50:37

Aby aktywować środowisko wirtualne Pythona:

$cd ~/python-venv/
$./bin/activate

Aby wyłączyć:

$deactivate
 21
Author: Amitesh Ranjan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-11-07 11:55:01

Stwierdziłem, że gdy w środowisku Miniconda3 muszę uruchomić:

conda deactivate

Ani deactivate Ani source deactivate nie zadziałały dla mnie.

 10
Author: CephBirk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-04-23 18:49:25

Możesz użyć virtualenvwrapper, Aby ułatwić sobie pracę z virtualenv.

virtualenvwrapper:

pip install virtualenvwrapper

Jeśli używasz standardowej powłoki, otwórz ~/.bashrc lub ~/.zshrc Jeśli używasz Oh My Zsh . Dodaj te dwie linie:

export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh

Aby aktywować istniejący virtualenv, użyj polecenia workon:

$ workon myenv
(myenv)$

W celu dezaktywacji virtualenv:

(myenv)$ deactivate

Oto mój tutorial, krok po kroku jak zainstalować virtualenv i virtualenvwrapper.

 8
Author: levi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-11-07 11:57:39

Ponieważ deactivate funkcja utworzona przez sourcing ~/bin/activate nie może zostać odkryta przez zwykłe szukanie takiego polecenia w ~/bin, możesz chcieć utworzyć taką, która po prostu wykonuje funkcję deactivate.

Problem polega na tym, że skrypt o nazwie deactivate zawierający jedno polecenie deactivate spowoduje niekończącą się pętlę, jeśli przypadkowo zostanie wykonany, gdy nie będzie w venv. Częsty błąd.

Można tego uniknąć, wykonując tylko deactivate, Jeśli funkcja istnieje (tzn. została utworzona przez sourcing activate).

#!/bin/bash

declare -Ff deactivate  && deactivate
 4
Author: DocSalvager,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-08-03 21:33:54

Użyj deactivate.

(my_env) user@user:~/my_env$ deactivate
user@user-Lenovo-E40-80:~/my_env$ 

Uwaga, (my_env) zniknął.

 3
Author: Basant Rules,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-02-15 21:45:28

Używam zsh-autoenv który jest oparty na autoenv .

Zsh-autoenv automatycznie pliki sources (known / whitelisted) .autoenv.zsh, zazwyczaj używane w katalogów głównych projektu. Obsługuje zdarzenia" enter" I leave", zagnieżdżanie i przechowywanie zmiennych (nadpisywanie i przywracanie).

Oto przykład:

; 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

Więc kiedy opuszczam katalog dtree, środowisko wirtualne jest automatycznie opuszczane.

"Development tree utiles" to tylko imię… Nie ma tu żadnych ukrytych powiązań z iluminatami.

 2
Author: Sardathrion - against SE abuse,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-11-07 13:39:00

Korzystanie z funkcji deactivate dostarczonej przez skrypt venv activate wymaga zaufania, że Funkcja dezaktywacji jest poprawnie zakodowana , aby zresetować wszystkie zmienne środowiskowe z powrotem do stanu poprzedniego - biorąc pod uwagę nie tylko oryginalną aktywację , ale także wszelkie przełączniki , konfiguracja , lub inna praca być może wykonałeś w międzyczasie.

Prawdopodobnie jest w porządku, ale wprowadza nowe, niezerowe ryzyko odejścia twoje środowisko zostało później zmodyfikowane.

Nie jest jednak technicznie możliwe, aby proces bezpośrednio zmieniał zmienne środowiskowe swojego rodzica, więc możemy użyć oddzielnej pod-powłoki, aby mieć całkowitą pewność naszevenv nie pozostawiają żadnych resztkowych zmian: {]}


Aby aktywować:

$ bash --init-file PythonVenv/bin/activate

  • to rozpoczyna nową powłokę wokół venv. Oryginalna powłoka bash pozostaje niezmodyfikowana.

Aby wyłączyć:

$ exit Lub [CTRL]+[D]

  • to opuszcza całą powłokę, w której znajduje się venv, i przenosi cię z powrotem do oryginalnej powłoki, zanim skrypt aktywacyjny wprowadził jakiekolwiek zmiany w środowisku.

Przykład:

[user@computer ~]$ echo $VIRTUAL_ENV
No virtualenv!

[user@computer ~]$ bash --init-file PythonVenv/bin/activate

(PythonVenv) [user@computer ~]$ echo $VIRTUAL_ENV
/home/user/PythonVenv

(PythonVenv) [user@computer ~]$ exit
exit

[user@computer ~]$ echo $VIRTUAL_ENV
No virtualenv!
 2
Author: Will Chen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-02-18 22:48:29

Jest to bardzo proste, aby dezaktywować twój wirtualny env

  • If using Anaconda - use conda deactivate
  • Jeśli nie używasz Anakonda - Użyj source deactivate
 0
Author: Naved Ahmad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-07-03 03:13:02

Po prostu wpisz następujące polecenie w wierszu poleceń w środowisku wirtualnym:

deactivate
 0
Author: jepaljey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-09-21 18:30:59

Miałem ten sam problem podczas pracy nad skryptem instalatora. Rzuciłem okiem na to, co ... bin/activate_this.py zrobiłem to i odwróciłem.

Przykład:

#! /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

# Deactivate/switch back to initial interpreter
deactivate()

# Print list of initial environment pip packages for example purpose
import pip
print str(pip.get_installed_distributions())
Nie jestem w 100% pewien, czy działa zgodnie z przeznaczeniem. Mogłem coś przeoczyć.
 -1
Author: Lord Sumner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-11-07 11:49:16