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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top