Een Python virtualenv verlaten/afsluiten/deactiveren

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 deactivateals 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 sourcewerkt, 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 deactivatenoch source deactivatewerkte voor mij.


Antwoord 6

Je kunt virtualenvwrappergebruiken om de manier waarop je werkt met virtualenvte vergemakkelijken.

Installatie van virtualenvwrapper:

pip install virtualenvwrapper

Als je een standaard shell gebruikt, open je ~/.bashrcof ~/.zshrcals je Oh My Zsh. Voeg deze twee regels toe:

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

Gebruik het commando workonom 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 deactivatedie is gemaakt door ~/bin/activatete 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 deactivateuitvoert.

Het probleem is dat een script met de naam deactivatemet een enkele opdracht deactivateeen 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 deactivatealleen uit te voeren als de functie bestaat (d.w.z. is gemaakt door activatete 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 dtreeverlaat, 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 deactivategebruikt 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 venvs laat geen resterende wijzigingen achter:


Activeren:

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

  • Dit start een nieuwe shell rond de venv. Je originele bashshell blijft ongewijzigd.

Deactiveren:

$ exitOF [CTRL]+[D]

  • Hiermee verlaat u de hele shell waarin de venvzich 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 virtualenvironmentmapnaam

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.

Other episodes