Używam virtualenv i virtualenvwrapper. Mogę przełączać się między virtualenv'em w porządku za pomocąworkon
polecenia.
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 me@mymachine:~$
jest wyjście z powłoki i uruchomienie nowej. To trochę denerwujące. Czy istnieje polecenie pracy nad „niczym”, a jeśli tak, to co to jest? Jeśli takie polecenie nie istnieje, jak miałbym je tworzyć?
python
virtualenv
virtualenvwrapper
Apreche
źródło
źródło
Odpowiedzi:
Zwykle aktywacja virtualenv daje funkcję powłoki o nazwie:
co przywraca normalność.
Właśnie ponownie przyjrzałem się kodowi
virtualenvwrapper
i tak, on też obsługujedeactivate
jako sposób na ucieczkę od wszystkich virtualenvs.Jeśli próbujesz opuścić środowisko Anaconda , polecenie zależy od wersji
conda
. Najnowsze wersje (jak 4.6) instalująconda
funkcję bezpośrednio w powłoce, w którym to przypadku uruchamiasz:Starsze wersje conda zamiast tego implementują dezaktywację za pomocą autonomicznego skryptu:
źródło
virtualenvwrapper
i być może Doug Hellmann to rozważy! Uwaga: dla tych, którzy mogą przeczytać te komentarze później, NIEworkon
jest to polecenie natywne (o to chodzi w pierwotnym pytaniu), ale polecenie!virtualenv
virtualenvwrapper
Zdefiniowałem alias , workoff , jako przeciwieństwo workon :
Łatwo jest zapamiętać:
źródło
.bashrc
?~/.bashrc
Posługiwać się:
Jeśli to nie zadziała, spróbuj
Każdy, kto wie, jak działa Bash
source
, pomyśli, że to dziwne, ale niektóre owijki / przepływy pracy wokół virtualenv implementują go jako uzupełnienie / odpowiedniksource activate
. Twój przebieg może się różnić.źródło
deactivate
to funkcja, która jest tworzona podczas źródłaactivate
pliku. Twoja sugestia, aby to zrobić,source deactivate
nie ma żadnego sensu, ponieważ nie ma pliku o nazwiedeactivate
Aby aktywować środowisko wirtualne Python:
Aby dezaktywować:
źródło
$source activate
$cd /to/dir/i/want/my/virtualenv/installed
wtedy,$virtualenv name_i_want_for_it
a$. name_i_want_for_it/bin/activate
virtualenv nadal wydaje mi się trochę off.Odkryłem, że będąc w środowisku Miniconda3 musiałem uruchomić:
Ani dla mnie
deactivate
niesource deactivate
działał.źródło
deactivate
był dla starej Linuksavirtualenv
isource deactivate
jest dla starej.conda deactivate
jest dobrym, wieloplatformowym sposobem dla conda envs (nie virtualenvs)Możesz użyć
virtualenvwrapper
, aby ułatwić sobie pracęvirtualenv
.Instalowanie
virtualenvwrapper
:Jeśli używasz standardowej powłoki, otwórz swoją
~/.bashrc
lub~/.zshrc
jeśli używasz Oh My Zsh . Dodaj te dwie linie:Aby aktywować istniejące virtualenv, użyj polecenia
workon
:Aby dezaktywować virtualenv:
Oto mój samouczek krok po kroku, jak zainstalować virtualenv i virtualenvwrapper.
źródło
workon
polecenie, działa ono z dowolnego katalogu.deactivate
w skrypcie powłoki bez wcześniejszego wyszukania skryptu, który definiuje tę funkcję (w takim przypadku nie będzie można znaleźć tego polecenia. . error)Ponieważ
deactivate
funkcji utworzonej przez sourcing~/bin/activate
nie można odkryć zwykłymi metodami szukania takiej komendy~/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 poleceniedeactivate
spowoduje nieskończoną pętlę, jeśli zostanie przypadkowo wykonany, gdy nie będzie w venv. Powszechny błąd.Można tego uniknąć, wykonując tylko
deactivate
wtedy, gdy funkcja istnieje (tzn. Została utworzona przez sourcingactivate
).źródło
Zastosowanie
deactivate
.Uwaga,
(my_env)
nie ma.źródło
Używam zsh-autoenv, który jest oparty na autoenv .
Oto przykład:
Więc kiedy opuszczę
dtree
katalog, środowisko wirtualne jest automatycznie zamykane."Development tree utiles"
to tylko nazwa… Żadne ukryte znaczenie nie prowadzi do iluminatów tutaj.źródło
Korzystanie z
deactivate
funkcji dostarczonej przezactivate
skrypt venv wymaga, aby funkcja dezaktywacji została poprawnie zakodowana w celu czystego zresetowania wszystkich zmiennych środowiskowych do poprzedniego stanu - biorąc pod uwagę nie tylko oryginalną aktywację , ale także wszelkie przełączniki , konfigurację lub inne praca, którą mogłeś w międzyczasie wykonać.Prawdopodobnie jest w porządku, ale wprowadza nowe niezerowe ryzyko, że środowisko zostanie zmodyfikowane później.
Jednak nie jest technicznie możliwe, aby proces bezpośrednio zmieniał zmienne środowiskowe swojego rodzica, więc możemy użyć oddzielnej podpowłoki, aby mieć absolutną pewność, że nasze
venv
nie pozostawiają żadnych resztkowych zmian:Aktywować:
$ bash --init-file PythonVenv/bin/activate
venv
. Twoja oryginalnabash
powłoka pozostaje niezmodyfikowana.Aby dezaktywować:
$ exit
LUB[CTRL]
+[D]
venv
znajduje, i powrót do oryginalnej powłoki sprzed skryptu aktywacyjnego, który wprowadził jakiekolwiek zmiany w środowisku.Przykład:
źródło
Miałem ten sam problem podczas pracy nad skryptem instalatora. Rzuciłem okiem na to, co bin / Activ_this.py zrobił i odwróciłem to.
Przykład:
Nie jestem w 100% pewien, czy działa zgodnie z przeznaczeniem. Mogłem coś całkowicie przeoczyć.
źródło