J'utilise virtualenv et virtualenvwrapper. Je peux très bien basculer entre virtualenv en utilisant la workon
commande.
me@mymachine:~$ workon env1
(env1)me@mymachine:~$ workon env2
(env2)me@mymachine:~$ workon env1
(env1)me@mymachine:~$
Comment quitter toutes les machines virtuelles et travailler à nouveau sur ma vraie machine? À l'heure actuelle, la seule façon de revenir me@mymachine:~$
est de quitter le shell et d'en démarrer un nouveau. C'est assez ennuyeux. Existe-t-il une commande pour travailler sur "rien", et si oui, qu'est-ce que c'est? Si une telle commande n'existe pas, comment pourrais-je procéder pour la créer?
python
virtualenv
virtualenvwrapper
Apreche
la source
la source
Réponses:
Habituellement, l'activation d'un virtualenv vous donne une fonction shell nommée:
ce qui ramène les choses à la normale.
Je viens de regarder spécifiquement à nouveau le code pour
virtualenvwrapper
, et, oui, il prend également en chargedeactivate
comme moyen d'échapper à tous les virtualenvs.Si vous essayez de quitter un environnement Anaconda , la commande dépend de votre version de
conda
. Les versions récentes (comme 4.6) installent uneconda
fonction directement dans votre shell, auquel cas vous exécutez:Les anciennes versions de conda implémentent plutôt la désactivation à l'aide d'un script autonome:
la source
virtualenvwrapper
et peut-être que Doug Hellmann le considérerait! Notez, pour ceux qui pourraient lire ces commentaires plus tard, que ceworkon
n'est PAS unevirtualenv
commande native (ce qui est le sujet de la question d'origine) mais unevirtualenvwrapper
commande!J'ai défini un alias , workoff , comme l'opposé de workon :
Il est facile de se souvenir:
la source
.bashrc
?~/.bashrc
Utilisation:
Si cela ne fonctionne pas, essayez
Quiconque sait comment fonctionne Bash
source
pensera que c'est étrange, mais certains wrappers / workflows autour de virtualenv l'implémentent en complément / contrepartiesource activate
. Votre kilométrage peut varier.la source
deactivate
est une fonction qui est créée lorsque vous sourcez leactivate
fichier. Votre suggestion de fairesource deactivate
n'a aucun sens, car il n'y a pas de fichier nommédeactivate
Pour activer un environnement virtuel Python:
Pour désactiver:
la source
$source activate
$cd /to/dir/i/want/my/virtualenv/installed
alors$virtualenv name_i_want_for_it
puis$. name_i_want_for_it/bin/activate
virtualenv me semble encore un peu éteint. A besoin d'être amélioré ...J'ai découvert que dans un environnement Miniconda3, je devais exécuter:
Ni
deactivate
nisource deactivate
travaillé pour moi.la source
deactivate
était pourvirtualenv
, etsource deactivate
est pour les anciens conda sous Linux.conda deactivate
est un bon moyen multiplateforme pour les conda envs (pas virtualenvs)Vous pouvez utiliser
virtualenvwrapper
afin de faciliter la façon dont vous travaillezvirtualenv
.Installation
virtualenvwrapper
:Si vous utilisez un shell standard, ouvrez votre
~/.bashrc
ou~/.zshrc
si vous utilisez Oh My Zsh . Ajoutez ces deux lignes:Pour activer un virtualenv existant, utilisez la commande
workon
:Afin de désactiver votre virtualenv:
Voici mon tutoriel , étape par étape sur la façon d'installer virtualenv et virtualenvwrapper.
la source
workon
commande, elle fonctionne depuis n'importe quel répertoire.deactivate
dans un script shell sans avoir préalablement sourcé le script qui définit cette fonction (dans ce cas, vous n'aurez pas trouvé cette commande.) . error)Étant donné que la
deactivate
fonction créée par l'approvisionnement~/bin/activate
ne peut pas être découverte par les moyens habituels de recherche d'une telle commande dans~/bin
, vous pouvez en créer une qui exécute simplement la fonctiondeactivate
.Le problème est qu'un script nommé
deactivate
contenant une seule commandedeactivate
provoquera une boucle sans fin s'il est exécuté accidentellement alors qu'il n'est pas dans le venv. Une erreur courante.Cela peut être évité en n'exécutant que
deactivate
si la fonction existe (c'est-à-dire qu'elle a été créée par sourcingactivate
).la source
Utilisez
deactivate
.Remarque,
(my_env)
est parti.la source
J'utilise zsh-autoenv qui est basé sur autoenv .
Voici un exemple:
Ainsi, lorsque je quitte le
dtree
répertoire, l'environnement virtuel se ferme automatiquement."Development tree utiles"
est juste un nom… Aucun moyen caché de lien avec les Illuminati ici.la source
L'utilisation de la
deactivate
fonctionnalité fournie par le script du venvactivate
nécessite que vous fassiez confiance à la fonction de désactivation pour être correctement codée afin de réinitialiser proprement toutes les variables d'environnement à leur état antérieur, en tenant compte non seulement de l' activation d'origine , mais également de tous les commutateurs , configurations ou autres travail que vous avez peut-être fait entre-temps.C'est probablement bien, mais cela introduit un nouveau risque non nul de laisser votre environnement modifié par la suite.
Cependant, il n'est pas techniquement possible qu'un processus modifie directement les variables d'environnement de son parent, nous pouvons donc utiliser un sous-shell séparé pour être absolument sûr que nos
venv
s ne laissent aucun changement résiduel derrière:Activer:
$ bash --init-file PythonVenv/bin/activate
venv
. Votrebash
coque d' origine reste inchangée.Pour désactiver:
$ exit
OU[CTRL]
+[D]
venv
dans lequel il se trouve et vous ramène au shell d'origine avant que le script d'activation n'apporte de modifications à l'environnement.Exemple:
la source
J'ai eu le même problème en travaillant sur un script d'installation. J'ai regardé ce que le bin / activate_this.py a fait et je l'ai inversé.
Exemple:
Je ne suis pas sûr à 100% si cela fonctionne comme prévu. J'ai peut-être complètement raté quelque chose.
la source