Gestion des packages avec pip et venv¶
L’API standard Python est déjà très riche, mais la communauté l’a considérablement complétée en mettant à disposition en ligne des milliers de packages supplémentaires.
Le site Python Package Index (ou PyPI en abrégé) centralise sur le web les projets de la communauté. PyPI propose un moteur de recherche pour nous aider à trouver les packages dont nous pourrions avoir besoin. Mais surtout, PyPI héberge différentes versions de ces packages et nous permet de les télécharger pour les incorporer dans notre environnement de développement et d’exécution Python.
Deux outils sont particulièrement utiles pour nous aider à gérer l’installation de ces packages tiers :
- pip
pip
(Package Installer for Python) permet d’installer les modules fournis par PyPI.- venv
venv
(Virtual Environment) permet de créer un environnement virtuel Python afin d’isoler l’environnement d’exécution de nos projets Python.
Gérer les packages avec pip¶
pip
est le module Python qui permet d’installer des packages à partir
de PyPI (ou de n’importe quel dépôt compatible PyPI).
pip
est un projet qui suit ses propres cycles de livraison. Il n’est
plus directement intégré à la distribution Python. Il est néanmoins très souvent
installé en même temps que l’interpréteur Python.
Installation de pip¶
Si pip
n’est pas présent sur votre système, le plus simple est d’utiliser
le module ensurepip
qui est disponible par défaut et dont l’objectif est
justement d’installer pip
.
$ python -m ensurepip
Si vous voulez mettre à jour pip
:
$ python -m ensurepip --upgrade
Prudence
Installer ou mettre à jour pip
peut nécessiter des droits d’administrateur.
Si vous préférez installer pip
uniquement pour le compte utilisateur
courant, il faut utiliser le paramètre --user
:
$ python -m ensurepip --user
Installer des packages¶
Pour installer un package, on utilise la commande install
du module pip
:
$ python -m pip install <nom_du_package>
Note
pip
est généralement installé avec un lanceur de programme permettant
de l’utiliser directement comme une commande du système :
$ pip install <nom_du_package>
La commande pip est liée à la version de Python par défaut de votre
session. Si vous avez plusieurs versions disponibles sur votre système, alors
il est plus intéressant d’appeler pip
comme un module depuis votre
interpréteur Python. Cela vous permet de spécifier explicitement pour quelle
version de Python vous souhaitez installer le package.
Si nous voulons installer le package art qui fournit des fonctions pour créer de l’art ASCII, il suffit d’utiliser la commande :
$ python -m pip install art
Le module art est maintenant disponible dans l’environnement Python. On peut lancer un interpréteur et tester le code suivant :
>>> import art
>>> art.aprint("random")
~(^-^)~
Note
Si vous souhaitez mettre à jour un package déjà installé pour obtenir une
version plus récente vous devez ajouter le paramètre --upgrade
à la commande install
:
$ python -m pip install --upgrade art
Par défaut, la commande pip installe le nouveau package au niveau
système. Il est possible que cette opération requière des droits super-utilisateur.
Si vous le souhaitez, vous pouvez installer un package uniquement pour
l’utilisateur connecté. Cette opération ne requière pas de droit particulier
puisque le package sera installé dans un répertoire de configuration de
l’utilisateur. Pour ce type d’installation, on utilise le paramètre
--user
:
$ python -m pip install --user art
Note
Pour une installation limitée à l’utilisateur, le package est stocké dans un répertoire appartenant à l’utilisateur. Pour un système Linux ou MacOS, il s’agit du répertoire :
~/.local/lib/pythonX.X/site-packages
Pour un système Windows, il s’agit du répertoire :
%APPDATA%\Python\PythonXX\site-packages
Les X
représentent la version de Python.
Si on ne précise pas de version pour le package, pip
installera la dernière
version disponible. Il est cependant possible de préciser explicitement la version :
$ python -m pip install art==5.1
Note
Plutôt que de donner une version précise, il est possible de préciser :
Une version principale
$ python -m pip install 'art==5.*'
Une version minimale
$ python -m pip install 'art>=4.1'
Une version compatible avec la version donnée
$ python -m pip install 'art~=5.1'
Autres commandes utiles¶
Pour afficher le détail d’un package installé, vous pouvez utiliser la commande
show
.
$ python -m pip show art
Pour connaître la totalité des packages installés et leur version, vous pouvez utiliser la commande freeze
$ python -m pip freeze
Cette commande est particulièrement utile car elle affiche la liste des packages
dans un format compatible au format d’installation. Il est donc possible de
geler les informations de dépendance logicielle à un instant et les sauver
dans un fichier. Par convention, ce fichier est le plus souvent nommé
requirements.txt
.
$ python -m pip freeze > requirements.txt
Si vous placez ce fichier à la racine de l’arborescence de votre projet, il sera
très facile de s’assurer que les dépendances nécessaires sont installées grâce
à l’option -r
utilisée avec la commande install
.
$ python -m pip install -r requirements.txt
Gérer l’environnement avec venv¶
S’il est pratique de disposer d’un module comme pip
pour gérer les
dépendances, cela ne permet pas de résoudre tous les problèmes. En effet que
se passe-t-il si vous voulez utiliser pour des projets différents le même
package mais dans des versions différentes ? Ce problème est d’autant plus complexe
à résoudre au quotidien pour des systèmes GNU/Linux qui utilisent déjà des programmes
Python pour la gestion du système. Vous pouvez installer des dépendances qui
rendent votre système ou votre session utilisateur instable.
Lorsqu’on fait du développement Python, le plus simple est d’utiliser un
environnement isolé, une sorte de bac à sable, indépendant du système et de la
session utilisateur. Cela permet de contrôler parfaitement la version de Python
utilisée ainsi que les dépendances. Le module venv
nous permet de gérer
ces environnements isolés que l’on appelle des environnements virtuels Python.
Note
Les environnements virtuels Python n’ont rien à voir avec la virtualisation de système. Ils permettent simplement d’isoler l’exécution de scripts Python.
Création d’un environnement¶
Pour créer un environnement virtuel, il suffit de lancer le module venv
en lui passant en paramètre le chemin dans lequel seront stockés la configuration
et les dépendances de cet environnement.
$ python -m venv <chemin environnement>
Pour un projet, on peut décider de stocker l’environnement dans un dossier
~/.venv/mon_projet
:
$ python -m venv ~/.venv/mon_projet
Important
Le choix de l’interpréteur Python que vous utilisez pour lancer le module
venv
est important. C’est cet interpréteur qui sera associé à
l’environnement et qui sera lancé avec la commande python.
Activation de l’environnement¶
Pour utiliser un environnement, il faut l’activer. C’est-à-dire qu’il faut définir un certain nombre de variables d’environnement qui vont permettre d’isoler toutes les commandes Python dans l’environnement. Heureusement, l’environnement créé contient des scripts qui nous permettent de réaliser l’activation simplement.
Pour un système *Nix ou MacOS, il faut sourcer le fichier bin/activate
qui se trouve dans le répertoire de l’environnement. Pour reprendre l’exemple
de création d’environnement de la précédente section :
$ source ~/.venv/mon_projet/bin/activate
Note
Pour un système Windows, il faut lancer le script Scripts\activate
qui se trouve dans le répertoire de l’environnement virtuel.
Une fois l’environnement activée, toutes les commandes python et pip se feront dans l’environnement virtuel. Cela signifie notamment que les packages installés le seront indépendamment du système et sans nécessiter de droit de super-utilisateur.
Une fois l’environnement activé, tous les programmes lancés depuis le terminal utiliseront cet environnement Python.
Désactivation de l’environnement¶
Un environnement virtuel Python est en fait un ensemble de fichiers dans un répertoire et un ensemble de déclaration de variables d’environnement. En tant que tel, un environnement virtuel Python n’est pas en cours d’exécution.
Pour désactiver l’environnement, il vous suffit simplement de fermer le terminal dans lequel il a été activé.
Cependant, si vous souhaitez conserver le terminal ouvert, il vous suffit de taper la commande deactivate.
$ deactivate
Supprimer un environnement¶
Pour supprimer un environnement, il suffit de supprimer tous les fichiers de cet environnement. Il n’y a pas à proprement parlé de désinstallation à effectuer.
$ rm -fr ~/.venv/mon_projet
Configuration d’un projet¶
La plupart des projets Python fournissent un fichier requirements.txt
qui, nous l’avons vu, donne la liste des dépendances nécessaires avec leur version.
Lorsque vous récupérez un projet Python, les étapes initiales de configuration
de ce projet sont quasi-systématiquement les mêmes :
Créer un environnement virtuel
Activer l’environnement virtuel
installer les dépendances déclarées par le fichier
requirements.txt
$ python3.7 -m venv venv
$ source venv/bin/activate
$ pip install -r requirements.txt
Astuce
Dans l’exemple ci-dessus, le répertoire de l’environnement virtuel est nommé
venv
et il est placé à la racine du projet. Cela permet d’établir
une convention qui peut être pratique. De plus, l’environnement virtuel sera
supprimé en même temps que les sources du projet si on supprime le répertoire
du projet.