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 :

  1. Créer un environnement virtuel

  2. Activer l’environnement virtuel

  3. 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.