Installer des bibliothèques avec pip et venv
Temps de lecture15 minEn bref
Résumé de l’article
La bibliothèque standard de Python ne couvre pas tous les besoins : dès que vous faites du calcul scientifique, du tracé de courbes ou du traitement de données, vous installez des bibliothèques écrites par d’autres. Cet article présente l’outil qui les installe, pip, et le dépôt où il va les chercher, PyPI.
Il explique surtout pourquoi on ne les installe jamais au niveau de la machine mais dans un environnement isolé, propre à chaque projet : parce que deux projets peuvent avoir besoin de deux versions incompatibles de la même bibliothèque. Vous verrez comment créer un tel environnement avec le module venv, ce que veut dire « activer » un environnement, et comment retrouver la liste exacte de ce qui y est installé.
Ces outils sont ceux de l’écosystème historique. Ils restent indispensables à connaître, car vous les rencontrerez partout, mais la gestion moderne de projet avec uv automatise tout ce qui est décrit ici.
Points clés à retenir
- Un module est un fichier, un paquet est un ensemble de modules organisés en dossiers. La bibliothèque standard en fournit beaucoup ; PyPI en fournit des centaines de milliers d’autres.
pipest l’installateur de paquets de Python. On l’invoque de préférence parpython -m pip, ce qui garantit qu’il installe pour l’interpréteur que l’on croit.- Installer une bibliothèque pour toute la machine est une mauvaise pratique, et les versions récentes de Python le refusent d’ailleurs. Deux projets peuvent exiger deux versions incompatibles d’une même bibliothèque.
- Un environnement virtuel est un dossier contenant un interpréteur et ses paquets, isolé du reste du système. Un environnement par projet.
- « Activer » un environnement configure simplement votre terminal pour que
pythonetpipdésignent ceux de l’environnement. C’est l’étape qu’on oublie, et la cause principale des erreursModuleNotFoundError.
Contenu de l’article
Modules, paquets et bibliothèque standard
Vous avez déjà écrit des programmes qui utilisent du code que vous n’avez pas écrit. Par exemple, pour afficher la date du jour, il est hors de question de mettre à jour le programme chaque matin :
La première ligne indique que la classe date du module datetime sera utilisée. Cette classe et ses méthodes sont définies dans un fichier datetime.py que l’interpréteur sait trouver, parce qu’il a été installé en même temps que lui.
De nombreux autres modules ont également été installés : ils constituent la bibliothèque standard Python. Cependant, selon votre domaine (traitement du signal, sciences des données…), cette bibliothèque peut ne pas offrir certaines fonctionnalités spécifiques. C’est pourquoi des modules ou paquets externes existent pour offrir des fonctionnalités supplémentaires au/à la développeur(se).
Information
En Python, les modules et les paquets organisent et structurent le code, mais ont des objectifs différents.
En termes simples, un module est un fichier unique contenant du code Python, tandis qu’un paquet est un ensemble de modules organisés selon une hiérarchie de répertoires.
Si vous avez déjà créé un programme en Python, vous avez certainement déjà rencontré différents paquets Python tels que numpy, pandas, matplotlib, seaborn et des modules Python tels que math, random, sys, datetime…
Où trouver des bibliothèques : PyPI
PyPI (Python Package Index) est le dépôt de logiciels du langage Python. PyPI vous aide à trouver et installer les logiciels développés et partagés par la communauté Python, et c’est là que l’installateur pip va chercher ce que vous lui demandez.
Attention
Avant d’installer tout paquet, vérifiez le contenu de la page de description du projet dans le dépôt PyPI car vous y trouverez des informations pertinentes sur le paquet (fonctionnalités) et sur la manière correcte de l’utiliser (versions compatibles de l’interpréteur Python, dépendances ou contraintes spécifiques, bibliothèques externes supplémentaires à installer pour obtenir des fonctionnalités supplémentaires…).
Méfiez-vous également des noms approchants : installer numpi au lieu de numpy est une technique d’attaque courante, appelée typosquatting.
pip, l’installateur de paquets
L’outil le plus populaire pour installer des paquets Python, et celui inclus dans les versions modernes de Python, est pip (Package Installer for Python). Il est normalement installé avec l’interpréteur ; vous pouvez le vérifier :
Remarquez la forme employée : python -m pip plutôt que pip tout court. Les deux fonctionnent le plus souvent, mais la première est plus sûre. Elle demande explicitement à cet interpréteur-là d’exécuter son propre pip, donc d’installer les paquets là où cet interpréteur les cherchera. Avec pip seul, rien ne garantit que l’outil trouvé dans le PATH corresponde à l’interpréteur que vous utilisez.
Pour connaître la liste des paquets disponibles dans l’environnement courant, ce qui est utile pour reconstruire cet environnement ailleurs (changement de machine, déploiement…) :
Pourquoi un environnement virtuel ?
Les programmes Python utilisent souvent des paquets et modules qui ne font pas partie de la bibliothèque standard. Ils nécessitent aussi, parfois, une version spécifique d’une bibliothèque, par exemple parce qu’un certain bogue a été corrigé ou encore que le programme a été implémenté en utilisant une version obsolète de l’interface de cette bibliothèque.
Cela signifie qu’il n’est pas toujours possible, pour une installation unique de Python, de couvrir tous les besoins de toutes les applications. Si une application A dépend de la version 1.0 d’un module et qu’une application B dépend de la version 2.0, ces dépendances entrent en conflit : installer la version 1.0 ou 2.0 laisse une des deux applications incapable de fonctionner.
Installer des paquets à un niveau global impacte de plus les exécutions de tous les programmes Python de la machine, y compris ceux que vous n’avez pas développés – et dont certains font partie du système d’exploitation. Pour cette raison, les versions récentes de Python refusent purement et simplement l’installation globale d’un paquet et vous renvoient une erreur externally-managed-environment.
La solution est de créer, pour chaque projet, un environnement virtuel : un dossier qui contient son propre interpréteur et ses propres paquets, isolé de l’existant sur votre machine. Cette technique vous permet de garder le contrôle des paquets installés, y compris de leurs numéros de version ; cette connaissance est cruciale si vous devez déployer votre programme, ou tout simplement l’exécuter, sur une autre machine.
Créer et activer un environnement virtuel avec venv
Le module venv, fourni avec Python, crée et gère ces environnements. On se place dans le dossier du projet, puis on demande la création d’un environnement – appelé ici env1 :
Un dossier env1 apparaît, contenant une copie de l’interpréteur Python et les emplacements où seront rangés les paquets. À ce stade l’environnement existe, mais il n’est pas encore activé : le python de votre terminal est toujours celui du système.
L’activation consiste à exécuter un script fourni dans l’environnement :
Information
Powershell n’autorise pas l’exécution de scripts non validés par un organisme de confiance. Il vous faudra donc reduire la sévérité de la politique d’exécution :
Information
Activer un environnement virtuel :
- change le prompt de votre ligne de commande pour afficher le nom de l’environnement virtuel que vous utilisez,
- fait que
pythonetpipdésignent désormais ceux de l’environnement, dont la version peut être différente de celle installée globalement, - rend disponibles les paquets spécifiques installés dans cet environnement.
Rien de tout cela n’est magique : le script d’activation ne fait que modifier des variables d’environnement de votre terminal, au premier rang desquelles le PATH. C’est pourquoi l’activation ne vaut que pour le terminal dans lequel vous l’avez lancée : un nouvel onglet, une nouvelle fenêtre ou un redémarrage repart de zéro. Pour vérifier l’effet, comparez la sortie de import sys; print(sys.executable); print(sys.path) avant et après activation.
Pour revenir à l’environnement global, tapez simplement deactivate.
Installer des paquets dans l’environnement
L’environnement étant activé, les paquets dont vous avez besoin seront installés localement, sans perturber le reste de votre ordinateur.
Supposons que nous voulions tracer une courbe. Quelques recherches sur PyPI désignent le paquet matplotlib comme tout à fait adapté :
Exécuté tel quel dans un environnement neuf, ce script échoue sur un ModuleNotFoundError: No module named 'matplotlib' : la bibliothèque n’est pas encore là. On l’installe :
L’option -U (ou --upgrade) met à jour un paquet déjà installé. Une nouvelle exécution du script affiche à présent la fenêtre attendue :

Pour plus d’informations sur l’utilisation de pip, consultez la documentation officielle sur l’installation de paquets.
Pour aller plus loin
Figer et rejouer un environnement avec requirements.txt
Un environnement virtuel n’est pas destiné à être partagé : il est volumineux et dépend du système d’exploitation. Ce que l’on partage, c’est la liste de ce qu’il contient, traditionnellement dans un fichier requirements.txt :
Sur une autre machine, ou dans un nouvel environnement, cette liste se rejoue en une commande :
Attention toutefois : pip freeze capture tout ce qui est installé dans l’environnement courant, y compris les dépendances indirectes et ce qui est spécifique à votre machine. Ce n’est donc pas exactement la liste des dépendances de votre projet. Pour cela, soit vous rédigez requirements.txt à la main, parce que vous savez ce dont votre code a besoin, soit vous utilisez un outil comme pipreqs qui analyse le code d’un répertoire pour le déduire :
Plusieurs environnements pour un même dossier
Rien n’empêche de créer plusieurs environnements virtuels côte à côte, par exemple env_312 et env_313, pour vérifier que votre code fonctionne avec deux versions de Python. Il suffit d’activer celui dont vous avez besoin. C’est un moyen simple de tester la compatibilité de votre programme avant de l’annoncer.