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ć?
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
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ć.
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 ~]$
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
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.
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.
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
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ął.
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.
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łokabash
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!
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
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
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ć.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