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 :
activate
etdeactivate
- binaires de
python
,pip
eteasy_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
source
du scriptactivate
va modifier temporairement notrePATH
. Ainsi quand levenv
est activé, les commandespython
etpip
invoqueront automatiquement les binaires installés dans levenv
. - La commande
deactivate
n'est pas un fichier script commeactivate
mais une fonction bash définie dans le fichieractivate
. - Le script
activate
va également modifier la variable d'environnementPS1
afin de rajouter le nom de votrevenv
entre parenthèses au début de l'invite de commande (prompt).