pip, virtualenv, virtualenvwrapper et pydev

Posté le 10 July 2010 dans Python

L’une des difficultés majeures du développement aujourd’hui est la gestion des dépendances et en particulier pour Python l’isolement de l’environnement de développement.

Pour résoudre ce problème, nous allons utiliser :

  • pip: un remplaçant d’easy_install bien plus complet.
  • virtualenv: permet d’instancier des environnements python isolés.
  • virtualenvwrapper: facilite l’utilisation de virtualenv

Installation des outils de développement

Si ce n’est déjà fait, il faut installer un environnement de développement python classique:

~$ sudo aptitude install python-setuptools python-dev build-essential

Nous installons la dernière version de pip:

~$ sudo easy_install pip

Puis nous installons virtualenv et virtualenvwrapper

~$ sudo pip install virtualenv virtualenvwrapper

Il faut maintenant configurer notre environnement en ajoutant au fichier ~/.bahrc:

# Python pip / virtualenv / virtualenvwrapper
export WORKON_HOME=$HOME/.virtualenvs
export PIP_VIRTUALENV_BASE=$WORKON_HOME
export PIP_RESPECT_VIRTUALENV=true
source /usr/local/bin/virtualenvwrapper.sh

Puis nous initialisons l’environnement:

~$ mkdir ~/.virtualenvs
~$ source ~/.bashrc
virtualenvwrapper.user_scripts Creating /home/noirbizarre/.virtualenvs/initialize
virtualenvwrapper.user_scripts Creating /home/noirbizarre/.virtualenvs/premkvirtualenv
virtualenvwrapper.user_scripts Creating /home/noirbizarre/.virtualenvs/postmkvirtualenv
virtualenvwrapper.user_scripts Creating /home/noirbizarre/.virtualenvs/prermvirtualenv
virtualenvwrapper.user_scripts Creating /home/noirbizarre/.virtualenvs/postrmvirtualenv
virtualenvwrapper.user_scripts Creating /home/noirbizarre/.virtualenvs/predeactivate
virtualenvwrapper.user_scripts Creating /home/noirbizarre/.virtualenvs/postdeactivate
virtualenvwrapper.user_scripts Creating /home/noirbizarre/.virtualenvs/preactivate
virtualenvwrapper.user_scripts Creating /home/noirbizarre/.virtualenvs/postactivate
virtualenvwrapper.user_scripts Creating /home/noirbizarre/.virtualenvs/get_env_details

Nous sommes maintenant prêts à instancier notre premier environnement.

Création d’un environnement isolé

Il suffit maintenant d’utiliser la commande mkvirtualenv.

~$ mkvirtualenv --no-site-packages myenv
New python executable in myenv/bin/python
Installing setuptools............done.
virtualenvwrapper.user_scripts Creating /home/noirbizarre/.virtualenvs/myenv/bin/predeactivate
virtualenvwrapper.user_scripts Creating /home/noirbizarre/.virtualenvs/myenv/bin/postdeactivate
virtualenvwrapper.user_scripts Creating /home/noirbizarre/.virtualenvs/myenv/bin/preactivate
virtualenvwrapper.user_scripts Creating /home/noirbizarre/.virtualenvs/myenv/bin/postactivate
virtualenvwrapper.user_scripts Creating /home/noirbizarre/.virtualenvs/myenv/bin/get\_env\_details
(myenv)~$

L’option --no-site-packages permet d’avoir une installation de python nue, c’est à dire sans aucune des dépendances python ajoutées dans l’installation courante.

Utilisation en ligne de commande

Une fois l’environnement actif, le prompt du shell est préfixé par “(nom de l’environnement)”.

Pour désactiver l’environnement, il suffit d’executer:

(myenv)~$ deactivate
~$

Pour réactiver l’environnement il suffit d’executer:

~$ workon myenv
(myenv)~$

La liste complète des commandes de virtualenvwrapper est disponible ici.

Utilisation dans Eclipse/Pydev

Pour utiliser cet environnement dans eclipse avec Pydev il suffit d’aller dans Preferences > Pydev > Interpreter Python et d’ajouter l’executable python qui correspond, dans notre cas ~/.virtualenvs/myenv/bin/python.

Configuration de l'executable python

Sur l’écran qui apparait ensuite, il ne faut selectionner que les chemin qui correspondent à notre environnement (ceux commençant par ~/.virtualenvs/myenv/).

Sélection des chemins

L’environnement apparait ensuite dans la liste des environnement disponibles.

Préférences Pydev de l'interpreteur python

Il suffit ensuite de le sélectionner dans les préférences des projets concernés.

Sélection de l'interpréteur python d'un projet

Utilisation de pip

Lorsque l’environnement est actif, pip s’utilise comme apt/aptitude.

# Recherche de paquets
(myenv)~$ pip search mypackage

# Installation d'un paquet
(myenv)~$ pip install mypackage

Lorsque l’environnement est inactif, il est possible de specifier à pip un environnement pour l’installation avec l’option -E:

~$ pip install -E myenv mypackage

Il est possible de dumper tous les modules installés dans un fichier:

~$ pip freeze > requirements

Puis de les recharger d’un coup dans un autre environnement:

~$ pip install -r requirements

Pour plus de détails sur l’utilisation de pip, la page officielle fait office de documentation.