Python est un langage de programmation très répandu, surtout sur les Unix-like qui l'utilisent au coeur même du système.

Le soucis, c'est que le système à besoin d'un certain nombre de modules Python dans des versions bien spécifiques pour pouvoir fonctionner correctement. De plus, jongler entre l'usage des gestionnaires de paquets (apt, yum, pacman, et j'en passe) et le gestionnaire de module Python (setuptools, easy_install, pip) n'est vraiment pas conseillé.

Lorsque l'on commence à développer, il y a de forte de chance qu'une mise à jour de ces modules soit nécessaire, or, le risque de conflits avec le système est grand.

Pour finir, il se peut que deux applications Python fassent appel au même module mais dans deux versions différentes. Autant dire que pour beaucoup de monde, cela peut apparaitre comme une vrai galère, et pourtant la solution n'est vraiment pas compliqué...

Virtualenv

C'est exactement ce que viens rédoudre VirtualEnv et VirtualEnvWrapper. Le module Virtualenv va creer un environnement Python virtuel isolé. Il n'y aura plus 1 seul répertoire "site-package" mais autant que d'environnement virtuel. Les problèmes de conflits se sont envollés.

Nous n'utiliserons pas VirtualEnv directement mais une surcouche: VirtualenvWrapper. Il s'agît tout simplement d'un module faisant office de surcouche à VirtualEnv, simplifiant encore plus la gestion des environnements virtuels.

En revanche, et bien que VirtualEnv fonctionne parfaitement sous Windows, ce n'est pas le cas de VirtualEnvWrapper.

Installation

L'installation est très simple (comme souvent), le gestionnaire de paquets de la distribution préférée fera parfaitement l'affaire. Dans mon cas sur Arch Linux:

pacman -S python-virtualenv python-Virtualenvwrapper

À partir de maintenant, il y a une règle absolue à respecter:

Il est interdit d'installer le moindre module sur le Python du système. Les environnements sont là pour cela!

Usage

Alors, maitenant, comment ça fonctionne ce truc? C'est très simple. La première chose à faire et de taper la commande suivante:

source virtualenvwrapper.sh

Je vous recommande de placer cette ligne dans votre fichier .bashrc ou .zshrc afin de ne pas avoir à la retapper par la suite. De nouvelles commandes ont été ajoutées:

  • mkvirtualenv: créé un nouvel environnement virtuel
  • rmvirtualenv: supprime un environnement virtuel
  • workon: permet d'entrer dans un environnement virtuel
  • deactivate: permet de sortir d'un environnement virtuel

Il y en a certainement d'autres, je ne connais pas tout l'outil, mais ces quelques commandes simplifient vraiment la vie. Voici un exemple d'usage de VirtualEnvWrapper:

23:41 romain@myarch ~% mkvirtualenv -p python2 monenvironnement #Création de monenvironnement
Running virtualenv with interpreter /usr/bin/python2
New python executable in monenvironnement/bin/python2
Also creating executable in monenvironnement/bin/python
Installing setuptools............................done.
Installing pip...............done.
(...)
(...)
(monenvironnement)23:42 romain@myarch ~% pip install sqlalchemy==0.5 #On installe sqlalchemy v0.5
Downloading/unpacking sqlalchemy==0.5
Downloading SQLAlchemy-0.5.0.tar.gz (1.4Mb): 1.4Mb downloaded
Running setup.py egg_info for package sqlalchemy

Installing collected packages: sqlalchemy
Running setup.py install for sqlalchemy

(...)
(...)

Successfully installed sqlalchemy
Cleaning up...
(monenvironnement)23:43 romain@myarch ~% deactivate #on sort de monenvironnement
23:43 romain@myarch ~% mkvirtualenv -p python2 monenvironnement2 #création de monenvironnement2
Running virtualenv with interpreter /usr/bin/python2
New python executable in monenvironnement2/bin/python2
Also creating executable in monenvironnement2/bin/python
Installing setuptools............................done.
Installing pip...............done.
(...)
(...)
(monenvironnement2)23:43 romain@myarch ~% pip install sqlalchemy==0.7 #on installe sqlalchemy v0.7.0
Downloading/unpacking sqlalchemy==0.7
Downloading SQLAlchemy-0.7.0.tar.gz (2.3Mb): 2.3Mb downloaded
Running setup.py egg_info for package sqlalchemy

(...)
(...)
Successfully installed sqlalchemy
Cleaning up...
(monenvironnement2)23:44 romain@myarch ~% deactivate #On sort de monenvironnement2
23:46 romain@myarch ~% rmvirtualenv monenvironnement2 #on détruit monenvironnement2
Removing monenvironnement2...
23:46 romain@myarch ~% workon monenvironnement #on retourne dans monenviromment
(monenvironnement)23:47 romain@myarch ~%

Voila pour cette petite introduction au environnements virtuels Python. Il faut tout de même savoir que leurs usages sont fortement recommandés, voir indispenssables en production.



Autres billets

Conversion de coordonnées géographiques en Python

03 Feb 2011 by Romain Commandé

Au boulot, j'ai eu à convertir des coordonnées géographiques exprimées en Lambert III carto vers du WGS84 afin de les utiliser avec l'API Google Map. J'ai eu du mal à trouver comment faire, les algos disponibles sont beaucoup trop complexes pour un non mathématicien comme moi.

Je ...

lire la suite

[gentoo] Activer le support de l'HFS et l'HFS+ (système de fichiers Mac)

29 Aug 2010 by Romain Commandé
http://www.chromebook-linux.com/wp-content/uploads/2011/11/gentoolinux1.png

Il peut arriver que l'on ait un voisin qui utilise exclusivement des machines de la firme de la Pomme qui a la gentillesse de nous prêter son disque dur externe ou son IPOD qui utilise un système de fichiers MAC (appelé HFS ou HFS+ pour les intimes). Malheureusement, il ...

lire la suite

PyCON FR 2010 - Le programme est en ligne

26 Jul 2010 by Romain Commandé

Je me permet de faire suivre l'annonce officielle:

image0

L'Association Francophone Python organise comme à son habitude son rendez-vous annuel autour de Python : Pycon FR.

Venez échanger sur Python avec des passionnés à la Cyberbase de la Villette à Paris les 28 et 29 août.

Des dizaines de conférences ...

lire la suite