Comment quitter / sortie / désactiver un virtualenv Python
-
13-09-2019 - |
Question
J'utilise virtualenv et virtualenvwrapper. Je peux passer d'années virtualenv très bien à l'aide de la commande workon
.
me@mymachine:~$ workon env1
(env1)me@mymachine:~$ workon env2
(env2)me@mymachine:~$ workon env1
(env1)me@mymachine:~$
Cependant, comment puis-je sortir toutes les machines virtuelles et WorkOn ma vraie machine à nouveau? En ce moment, la seule façon que j'ai de revenir à
me@mymachine:~$
est de sortir de la coquille et commencer une nouvelle. C'est un peu ennuyeux. Y at-il une commande pour WorkOn « rien », et si oui, quel est-il? Si une telle commande n'existe pas, comment pourrais-je aller sur la création il?
La solution
En général, l'activation d'un virtualenv vous donne une fonction shell nommée:
$ deactivate
qui remet les choses à la normale.
Je viens de regarder spécifiquement à nouveau le code pour virtualenvwrapper,
et, oui, il soutient aussi deactivate
que le moyen d'échapper à tous les virtualenvs.
Si vous essayez de laisser une Anaconda environnement, la procédure est un peu différent. Exécutez la commande de deux mots source deactivate
car ils mettent 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.
Autres conseils
Je alias workoff comme l'opposé de WorkOn:
alias workoff='deactivate'
Facile à retenir:
[bobstein@host ~]$ workon django_project
(django_project)[bobstein@host ~]$ workoff
[bobstein@host ~]$
$ deactivate
Si cela ne fonctionne pas, essayez
$ source deactivate
Toute personne qui sait comment bash source
œuvres penseront que est bizarre, mais certains emballages / flux de travail autour virtualenv mettre en œuvre comme un compliment / contrepartie source activate
. YMMV
pour activer l'environnement virtuel python:
$cd ~/python-venv/
$./bin/activate
pour désactiver:
$deactivate
Je trouve que lorsque dans un environnement Miniconda3 je devais courir:
conda deactivate
Ni deactivate
ni source deactivate
travaillé pour moi.
Vous pouvez utiliser virtualenvwrapper
afin de faciliter votre façon de travailler avec virtualenv
Installation virtualenvwrapper
pip install virtualenvwrapper
Si vous utilisez shell standard, ouvrez votre ~/.bashrc
ou ~/.zshrc
si vous utilisez oh-my-zsh. Ajouter ces deux lignes:
export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh
Pour activer une virtualenv existante, utilisez la commande WorkOn:
$ workon myenv
(myenv)$
Pour désactiver votre virtualenv:
(myenv)$ deactivate
Voici mon tutoriel , étape par étape dans l'installation virtualenv et virtualenvwrapper
Utilisez deactivate
.
(my_env) user@user:~/my_env$ deactivate
user@user-Lenovo-E40-80:~/my_env$
Note, (my_env)
est parti.
Depuis la fonction deactivate
créée par l'approvisionnement ~/bin/activate
ne peut pas être découvert par les moyens habituels de la recherche d'une telle commande en ~/bin
, vous voudrez peut-être créer un qui ne fait qu'exécuter la fonction deactivate
.
Le problème est qu'un script nommé deactivate
contenant une seule commande deactivate
provoquera une boucle sans fin si accidentellement exécuté sans la venv. Une erreur commune.
Cela peut être évité que par l'exécution deactivate
si la fonction existe (à savoir a été créé par activate
l'approvisionnement).
#!/bin/bash
declare -Ff deactivate && deactivate
J'utilise zsh-autoenv qui est basé sur autoenv .
zsh-autoenv automatiquement (sources connues /) des fichiers dans la liste blanche de
.autoenv.zsh
, généralement utilisés dans répertoires racine du projet. Il gère « enter » et laisser » les événements, imbrication, et stashing de variables (en écrasant et la 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
Alors, quand je quitte le répertoire dtree
, l'environnement virtuel est automatiquement sorti.
Had moi le même problème tout en travaillant sur un script d'installation, je pris un coup d'œil à ce que le bin / activate_this.py a fait et a renversée.
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 si elle fonctionne comme prévu, je peut-être manqué quelque chose de complètement.