Introduction
La puissance de Python
vient en grande partie de la myriades de bibliothèques (packages) que l'on peut installer via le gestionnaire de paquets pip. Cependant quand on travaille sur plusieurs projets qui n'utilise pas tous la même version d'une bibliothèque, ni même de Python : ça devient vite le cauchemar.
C'est là que venv intervient pour isoler nos projets Python dans des environnements spécifiques. Chaque environnement virtuel pourra définir la version de Python ainsi que les bibliothèques à utiliser.
Installation
Il existe plusieurs solutions pour la création et l'utilisation des environnements virtuels sous Python. Dans cette article, nous allons parler des deux plus populaires :
venv: un module standard depuis Python 3.3virtualenv: un outil tiers populaire depuis Python 2.7
L'avantage de venv c'est qu'il est un outil standard intégré à Python. La force de virtualenv c'est qu'il offre une plus grande souplesse de configuration, comme par exemple la possibilité d'utiliser une version précise de Python.
Installation de venv
Si vous avez un Python récent (3.3+) installé sur votre machine, vous avez sûrement déjà accès à venv.
Cependant, sous Debian/Ubuntu, il sera tout de même nécessaire d'installer le paquet python3-venv :
sudo apt-get install python3-venv
Installation de virtualenv
Comme tous les paquets Python, la manière la plus simple de l'installer est d'utiliser pip3 :
pip3 install virtualenv
Création d'un environnement virtuel
C'est surtout à la création de l'environnement virtuel que la syntaxe diffère légèrement entre venv et virtualenv. Dans les deux cas vous allez obtenir un nouveau sous-dossier venv (par défaut) avec :
- script & fonction bash :
activateetdeactivate - binaires de
python,pipeteasy_install - dossier local pour les packages Python dont dépend le projet (
site-packages)
Création avec venv
python3 -m venv ./my-project/venv
-m venv(module venv) : le module venv de Python3./my-project/venv: le dossier de destination (par conventionvenv)
Création avec virtualenv
# version simple
virtualenv ./my-project/venv
# version avec choix version Python
virtualenv -p /usr/bin/python2.7 venv
-p(python) : l'interpréteur Python à utiliser
Utilisation de l'environnement virtuel
Activation
Il faut pour cela utiliser la commande source sur le script activate du dossier venv/bin.
user@host:~$ cd my-project
user@host:~/my-project$ source venv/bin/activate
(venv) user@host:~/my-project$
Une fois l'environnement virtuel activé, l'indication (venv) apparaîtra à gauche de l'invite de commande (prompt).
Installation de paquets
Nous pouvons installer des paquets de manière habituelle via pip, qui seront automatiquement placés dans le dossier local venv.
# exemple d'installation du package 'numpy' depuis un venv activé
(venv) user@host:~/my-project$ pip install numpy
Exécution du script
Quand le venv est activé, il est possible de lancer notre script Python de manière classique.
(venv) user@host:~/my-project$ python main.py
Cependant c'est une version spécifique de Python qui sera utilisée ainsi que les paquets locaux du venv.
Génération du fichier des dépendances
Il est possible (et fortement conseillé
) de générer et sauvegarder une liste des paquets Python nécessaire au bon fonctionnement de notre projet. Par convention, on appelle ce fichier requirements.txt.
Voilà comment générer cette liste automatiquement via la commande pip du venv.
(venv) user@host:~/my-project$ pip freeze > requirements.txt
Voici le contenu du fichier requirements.txt
numpy==1.18.1
On retrouve notre paquet numpy ainsi qu'un numéro de version 1.18.1.
Installer les dépendances depuis un fichier
Très pratique pour le déploiement du projet Python sur une nouvelle machine, il est possible d'installer toutes les dépendances depuis un fichier. Bien évidemment on va utiliser notre liste requirements.txt précédemment générée.
(venv) user@host:~/my-project$ pip install -r requirements.txt
-r(requirements) : le fichier des dépendances
Déactivation
Pour sortir de notre environement virtuel, rien de plus simple : il suffit d'invoquer la commande deactivate.
(venv) user@host:~/my-project$ deactivate
user@host:~$ cd my-project
On note que l'indication (venv) n'est plus visible dans l'invite de commande (prompt). Welcome home! 
Versionnage
Quand on versionne son projet sur Git (ou autre) il faudra respecter deux règles :
- ON NE VERSIONNE PAS LE DOSSIER
venv!!
- On versionne le fichier
requirements.txt
Ainsi dans Git on pourra appliquer ces règles via les commandes :
echo '/venv' > .gitignore
git add requirements.txt
En savoir plus
- Le
sourcedu scriptactivateva modifier temporairement notrePATH. Ainsi quand levenvest activé, les commandespythonetpipinvoqueront automatiquement les binaires installés dans levenv. - La commande
deactivaten'est pas un fichier script commeactivatemais une fonction bash définie dans le fichieractivate. - Le script
activateva également modifier la variable d'environnementPS1afin de rajouter le nom de votrevenventre parenthèses au début de l'invite de commande (prompt).
