Ik gebruik virtualenv en de virtualenvwrapper. Ik kan prima schakelen tussen virtualenv’s met de opdracht workon
.
me@mymachine:~$ workon env1
(env1)me@mymachine:~$ workon env2
(env2)me@mymachine:~$ workon env1
(env1)me@mymachine:~$
Hoe sluit ik alle virtuele machines af en werk ik weer op mijn echte machine? Op dit moment is de enige manier die ik heb om terug te gaan naar me@mymachine:~$
, de shell te verlaten en een nieuwe te starten. Dat is best vervelend. Is er een opdracht om aan “niets” te werken, en zo ja, wat is dat dan? Als zo’n commando niet bestaat, hoe kan ik het dan maken?
Antwoord 1, autoriteit 100%
Normaal gesproken geeft het activeren van een virtualenv u een shell-functie met de naam:
$ deactivate
wat alles weer normaal maakt.
Ik heb zojuist nog eens specifiek gekeken naar de code voor virtualenvwrapper
, en ja, ook deze ondersteunt deactivate
als de manier om te ontsnappen aan alle virtualenvs.
Als je probeert een Anacondaachter te laten omgeving, hangt de opdracht af van uw versie van conda
. Recente versies (zoals 4.6) installeren een conda
-functie rechtstreeks in uw shell, in welk geval u het volgende uitvoert:
conda deactivate
Oudere conda-versies implementeren in plaats daarvan deactivering met behulp van een stand-alone script:
source deactivate
Antwoord 2, autoriteit 2%
Gebruik:
$ deactivate
Als dit niet werkt, probeer dan
$ source deactivate
Iedereen die weet hoe Bash source
werkt, zal dat vreemd vinden, maar sommige wrappers/ workflows rond virtualenv implementeren het als een aanvulling/tegenhanger van source activate
. Uw kilometerstand kan variëren.
Antwoord 3, autoriteit 2%
Ik heb een alias, workoff gedefinieerd , als het tegenovergestelde van workon:
alias workoff='deactivate'
Het is gemakkelijk te onthouden:
[bobstein@host ~]$ workon django_project
(django_project)[bobstein@host ~]$ workoff
[bobstein@host ~]$
Antwoord 4
Een virtuele Python-omgeving activeren:
$cd ~/python-venv/
$./bin/activate
Deactiveren:
$deactivate
Antwoord 5
Ik ontdekte dat ik in een Miniconda3-omgeving het volgende moest uitvoeren:
conda deactivate
Noch deactivate
noch source deactivate
werkte voor mij.
Antwoord 6
Je kunt virtualenvwrapper
gebruiken om de manier waarop je werkt met virtualenv
te vergemakkelijken.
Installatie van virtualenvwrapper
:
pip install virtualenvwrapper
Als je een standaard shell gebruikt, open je ~/.bashrc
of ~/.zshrc
als je Oh My Zsh. Voeg deze twee regels toe:
export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh
Gebruik het commando workon
om een bestaande virtualenv te activeren:
$ workon myenv
(myenv)$
Om uw virtualenv te deactiveren:
(myenv)$ deactivate
Hier is mijn tutorial, stap voor stap over het installeren van virtualenv en virtualenvwrapper .
Antwoord 7
Aangezien de functie deactivate
die is gemaakt door ~/bin/activate
te sourcen, niet kan worden ontdekt met de gebruikelijke manier om naar een dergelijk commando te zoeken in ~/bin
, wil je er misschien een maken die alleen de functie deactivate
uitvoert.
Het probleem is dat een script met de naam deactivate
met een enkele opdracht deactivate
een eindeloze lus zal veroorzaken als het per ongeluk wordt uitgevoerd terwijl het niet in de venv is. Een veelgemaakte fout.
Dit kan worden vermeden door deactivate
alleen uit te voeren als de functie bestaat (d.w.z. is gemaakt door activate
te gebruiken).
#!/bin/bash
declare -Ff deactivate && deactivate
Antwoord 8
Gebruik deactivate
.
(my_env) user@user:~/my_env$ deactivate
user@user-Lenovo-E40-80:~/my_env$
Let op, (my_env)
is verdwenen.
Antwoord 9
Ik gebruik zsh-autoenvdie is gebaseerd op autoenv.
zsh-autoenvautomatisch
bronnen (bekend/op de witte lijst).autoenv.zsh
-bestanden, meestal gebruikt in
hoofddirectory’s van het project. Het behandelt “enter” en verlaat”-gebeurtenissen,
nesten en stashing van variabelen (overschrijven en herstellen).
Hier is een voorbeeld:
; 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
Dus als ik de map dtree
verlaat, wordt de virtuele omgeving automatisch afgesloten.
"Development tree utiles"
is slechts een naam Geen verborgen link naar de Illuminati hier.
Antwoord 10
Als u de functie deactivate
gebruikt die wordt geleverd door het activate
-script van de venv, moet u erop vertrouwen dat de deactiveringsfunctie correct is gecodeerdom alle omgevingen netjes te resetten variabelen terug naar hoe ze voorheen waren waarbij niet alleen rekening wordt gehouden met de oorspronkelijke activering, maar ook met eventuele switches, configuratieof andere werkdat je in de tussentijd misschien hebt gedaan.
Het is waarschijnlijk prima, maar het introduceert wel een nieuw, niet-nul risico dat uw omgeving achteraf wordt gewijzigd.
Het is echter technisch niet mogelijk voor een proces om de omgevingsvariabelen van zijn ouder direct te wijzigen, dus we kunnen een aparte sub-shell gebruiken om absoluut zeker te zijnonze venv
s laat geen resterende wijzigingen achter:
Activeren:
$ bash --init-file PythonVenv/bin/activate
- Dit start een nieuwe shell rond de
venv
. Je originelebash
shell blijft ongewijzigd.
Deactiveren:
$ exit
OF [CTRL]
+[D]
- Hiermee verlaat u de hele shell waarin de
venv
zich bevindt, en keert u terug naar de originele shell van voordat het activeringsscript wijzigingen aan de omgeving aanbracht.
Voorbeeld:
[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!
Antwoord 11
Door deactivate [name of your environment]
uit te voeren, kunt u uw python-omgeving afsluiten/deactiveren.
Voorbeeld met python3.6 Windows 10:
PS C:\Users\kyrlon\Desktop> py -m venv env1
PS C:\Users\kyrlon\Desktop> .\env1\Scripts\activate
(env1) PS C:\Users\kyrlon\Desktop> deactivate env1
PS C:\Users\klongwood3\Desktop> py -m venv env1
Voorbeeld met python3.9 op Linux Ubuntu 20.04 LTS Desktop:
kyrlon@pc1:~$ python3 -m venv venv1
kyrlon@pc1:~$ source venv1/bin/activate
(venv1) kyrlon@pc1:~$ deactivate venv1
kyrlon@pc1:~$
Antwoord 12
Het is heel eenvoudig om uw virtuele omgeving deactiveren
- Bij gebruik van Anaconda– gebruik
conda deactivate
- Als u Anacondaniet gebruikt – gebruik
source deactivate
Antwoord 13
Typ gewoon de volgende opdracht op de opdrachtregel in de virtuele omgeving:
deactivate
Antwoord 14
Voor mijn specifieke geval ga ik naar de werkmap
CD /myworkingdirectory
Vervolgens activeer ik mijn env als volgt:
my-env/scripts/activate
Vanuit dezelfde werkmap (/myworkingdirectory
) om te deactiveren, ik heb dit geprobeerd, maar het doet niets:
my-env/scripts/deactivate
Dit werkt wel:
deactivate
Antwoord 15
Een virtuele Python-omgeving activeren:
source venv/bin/activate
Opmerking: hier is “venv” uw virtualenvironment
mapnaam
Om te deactiveren:
`deactivate` or `source deactivate`
Antwoord 16
Ik had hetzelfde probleem toen ik aan een installatiescript werkte. Ik heb gekeken wat de bin/activate_this.pydeed en heb het teruggedraaid.
Voorbeeld:
#! /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())
Ik weet niet 100% zeker of het werkt zoals bedoeld. Ik heb misschien iets helemaal gemist.