virtuel - virtualenv python 3
Comment quitter/quitter/désactiver un virtualenv python? (6)
J'utilise virtualenv et le virtualenvwrapper. Je peux basculer entre virtualenv très bien en utilisant la commande workon.
[email protected]:~$ workon env1
(env1)[email protected]:~$ workon env2
(env2)[email protected]:~$ workon env1
(env1)[email protected]:~$
Cependant, comment puis-je quitter toutes les machines virtuelles et travailler à nouveau sur ma machine réelle? En ce moment, la seule façon que j'ai de revenir à
[email protected]:~$
est de quitter le shell et d'en commencer un nouveau. C'est plutôt ennuyeux. Y a-t-il un ordre de travailler sur "rien", et si oui, qu'est-ce que c'est? Si une telle commande n'existe pas, comment pourrais-je la créer?
(my_env) basant @ basant: ~ / EonTraining / my_env $ désactiver
utilisez 'désactiver'
basant @ basant-Lenovo-E40-80: ~ / EonTraining / mon_env $
Parti (my_env);
Habituellement, activer un virtualenv vous donne une fonction shell nommée:
$ deactivate
ce qui remet les choses à la normale.
Modifier 1
Je viens de regarder spécifiquement le code de virtualenvwrapper,
et, oui, il supporte aussi deactivate
comme moyen d'échapper à tous les virtualenvs.
Modifier 2
Si vous essayez de quitter un environnement Anaconda , la procédure est un peu différente: exécutez la commande de deux mots source deactivate
car elle met en œuvre la désactivation à l'aide d'un script autonome.
bash-4.3$ deactivate
pyenv-virtualenv: deactivate must be sourced. Run 'source deactivate' instead of 'deactivate'
bash-4.3$ source deactivate
pyenv-virtualenv: no virtualenv has been activated.
J'ai eu le même problème pendant que je travaillais sur un script d'installateur, j'ai jeté un oeil à ce que bin / activate_this.py a fait et l'ai inversé.
Exemple:
#! /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
# deactive/switch back to initial interpreter
deactivate()
# print list of initial environment pip packages for example purpose
import pip
print str(pip.get_installed_distributions())
Pas 100% sûr que si cela fonctionne comme prévu, j'ai peut-être raté quelque chose complètement.
J'utilise zsh-autoenv qui est basé sur autoenv .
zsh-autoenv automatiquement les zsh-autoenv (connus / en liste blanche)
.autoenv.zsh
, généralement utilisés dans les répertoires racine du projet. Il gère "entrer" et laisser "événements, l'imbrication, et la mise en cache des variables (écrasement et restauration).
Voici un exemple:
; 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
Donc, quand je quitte le répertoire dtree
, l'environnement virtuel est automatiquement quitté.
pour activer l'environnement virtuel python:
$cd ~/python-venv/
$./bin/activate
désactiver:
$deactivate
$ deactivate
Si cela ne fonctionne pas, essayez
$ source deactivate
Quiconque sait comment fonctionne la source
bash va penser que c'est bizarre, mais certains wrappers / workflows autour de virtualenv implémentent comme complément / contrepartie de la source activate
. YMMV