De virtualenvwrapper à pew

Mise à jour du 12/10/2016 : Alexandre Franke signale la commande pew pour modifier l'invite de commande.

Mise à jour du 01/12/2015 : Baptiste Darthenay fait remarquer que l'invite de prompt publiée est incorrecte et donne une solution. Un grand merci à lui !

Pew et virtualenvwrapper sont tous les deux des outils en ligne de commande permettant de gérer des environnements virtuels Python. Il s'agit d'avoir une commande permettant de créer, modifier, copier, supprimer, (etc...) des environnements python.

En fait, dans le cas de virtualenvwrapper, il s'agit d'un ensemble de (19 !) commandes écrites en Bourne Shell qui vont chacune permettre une action sur un de nos environnements virtuels. Là où virtualenvwrapper me frustrait, c'est quand il fallait faire une autre commande que workon ou deactivate : impossible de retrouver la commande recherchée sans aller dans la doc en ligne...

pew change d'approche en la matière : il n'y a qu'une seule commande (pew) qui permet d'accèder à toutes les actions réalisables (pew help nous permet de les lister). pew est écrit en Python et a un code plus clair, et plus concis (environ 500 lignes de python pour pew contre 1200 de shell pour virtualenvwrapper).

Pour l'installer sour ArchLinux, il suffit d'installer le paquet python-pew disponible dans AUR :

yaourt -S python-pew

Il y a des paquets pour d'autres distributions. Sinon :

pip install pew

On peut maintenant commenter l'inclusion de virtualenvwrapper dans son ~/.bashrc :

#source /usr/bin/virtualenvwrapper.sh

Par défaut, pew stocke ses virtualenvs dans ~/.local/share/virtualenvs, mais tous nos virtualenvs sont dans ~/.virtualenvs. pew profite de la variable d'environnement WORKON_HOME définie lorsque vous avez installé virtualenvwrapper. Nous allons donc garder cette variable (ainsi que PROJECT_HOME) :

export WORKON_HOME=$HOME/.virtualenvs
export PROJECT_HOME=$HOME/Projets

À partir de maintenant, vous pouvez utiliser pew :

$ pew ls
venv1 venv2 venv3
$ pew workon venv1
Launching subshell in virtual environment. Type 'exit' or 'Ctrl+D' to return.
$ which python
/home/arthur/.virtualenvs/venv1/bin/python
$

pew ne modifie pas l'invite de commande du shell, on ne sait donc pas si on est dans un environnement virtuel ou non. En revanche pew fournit une solution avec sa commande shell_config qui retourne une fichier à inclure pour votre shell :

which pew
PEW_EXISTS=$?
if [ $PEW_EXISTS -eq 0 ] ; then
  source $(pew shell_config)
fi

Enfin, je veux garder les mêmes commandes pour les deux actions que je fait 90% du temps (workon, et deactivate). Je crée donc des alias pour leurs équivalents :

alias workon="pew workon"
alias deactivate="exit"

Et voilà le résultat à placer dans votre .bashrc :

# pew
which pew
PEW_EXISTS=$?
if [ $PEW_EXISTS -eq 0 ] ; then
  source $(pew shell_config)
fi
export WORKON_HOME=$HOME/.virtualenvs
export PROJECT_HOME=$HOME/Projets
alias workon="pew workon"
alias deactivate="exit"
# endof pew

Derniers articles

P

PyParis 2018
E

Ethics by Design 2018
P

PyConFr 2018
C

Certification en Éco-conception

Parcourir les articles