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





virtualenvwrapper