Pip vs pipx : comprendre leurs différences pour mieux gérer vos projets Python
Sommaire
I. Présentation
Pip est depuis longtemps l’outil favori des développeurs et utilisateurs de Python pour gérer les dépendances de leurs outils et projets, mais il a de la concurrence !
Depuis plusieurs années, l’outil pipx a fait son apparition et est de plus en plus utilisé. Nous allons voir dans cet article quelles sont les différences concrètes entre pip et pipx et comment utiliser ce dernier.
II. Pour mes projets Python : Pip ou pipX ?
L’outil pip vous est forcément connu si vous avez appris à utiliser et à développer en Python. Si vous souhaitez utiliser dans votre projet un ensemble de fonctions Python qui existent déjà (une bibliothèque, aussi appelée “librairie” ou “module”), il est au préalable nécessaire d’installer cette dépendance avec pip, par exemple :
Avec pip, les bibliothèques sont installées directement dans l’environnement Python actif (global ou virtuel). Par exemple, l’installation de la bibliothèque “requests” télécharge automatiquement la dernière version depuis le serveur officiel pypi.org et l’ajoute à votre environnement. Ainsi, la version de la bibliothèque “requests” que nous venons d’installer se trouvera dans le dossier “/usr/lib/python3/dist-packages/requests/” :

En conséquence, tous les scripts et projets contenant la directive “import requests” utiliseront cette version. Une conséquence négative possible, et de plus en plus fréquente, est que si un de vos outils Python requiert “requests” en version 1.2.3 et que vous devez mettre à jour cette bibliothèque sur votre système pour un second outil qui requiert la dernière version (2.32.3), cela risque de poser quelques problèmes. C’est notamment le cas s’il y a des breaking changes, et c’est le problème que résolvent les venv (Virtual Environment) en Python.
Le “breaking changes” ou “modifications incompatibles” désigne des mises à jour qui cassent la compatibilité avec les anciennes versions. Une telle mise à jour entraine souvent des conflits et dysfonctionnement entre les projets qui ont été mis à jour pour utiliser la nouvelle version de la bibliothèque et ceux qui ne l’ont pas été. Ces changements sont généralement signalés par une augmentation du numéro de version majeure (exemple : passage de v2.x.x à v3.0.0).
L’outil pipx est, lui, conçu pour installer et exécuter des outils Python en tant qu’applications autonomes dans des environnements virtuels dédiés. Cela présente plusieurs avantages :
- Isolation : Chaque outil possède son propre environnement, évitant les conflits de versions de dépendances.
- Usage CLI : Contrairement aux bibliothèques Python classiques, ces outils disposent généralement d’une fonction d’entrée “main” qui permet leur exécution directe dans un terminal.
- Simplicité d’utilisation des environnements virtuels.
Ainsi, si l’on tente d’installer une bibliothèque qui ne dispose pas de point d’entrée pour le terminal (fonction “main“), pipx n’y parviendra pas :
Ce message d’erreur souligne une différence importante entre ces deux outils : pipx est conçu pour faciliter le déploiement d’outils Python autonomes dans des environnements cloisonnés en termes de dépendances, tandis que pip est utilisé pour installer des bibliothèques et dépendances.
Avant pipx, pour déployer un projet Python dans son ensemble, il fallait le télécharger, le décompresser, installer ses dépendances (“python3 setup.py install” ou “pip install -r requirements“), etc. Avec pipx, c’est fini ! L’outil fait tout cela pour nous et prend en plus en charge la gestion des venv.
III. Utilisation de pipx
Nous allons à présent voir les basiques pour utiliser pipx sur un OS Linux, en commençant par l’installer :
Après exécution de ces commandes, pipx se trouvera installé dans “/usr/bin“, comme n’importe quelle commande Linux :

Pour installer un projet Python à l’aide de pipx, il faut utiliser l’option “install“, comme pour pip ! Utilisons-le pour installer “httpie“, une alternative à la commande “curl” pour faire des requêtes HTTP en ligne de commande :
Voici le retour terminal que vous aurez alors :

Pipx nous informe que trois commandes sont à présent disponibles : “http“, “httpie” et “https“. Dans les faits, vos commandes ainsi que leurs documentations et dépendances ont été installées dans le répertoire “~/.local/share/pipx/venvs/<nom>” :

Pipx se charge également de créer un lien symbolique entre les commandes du répertoire “bin/” de chaque projet installé et le répertoire “~/.local/bin” de l’utilisateur. Ce qui permet une exécution rapide et simple depuis n’importe quel dossier du système :

Voilà ! Nous venons grâce à pipx d’installer un projet Python ainsi que ses dépendances très simplement et rapidement.
Il est important de vous assurer que le répertoire “~/.local/bin” est bien dans votre variable “$PATH” pour pouvoir exécuter les commandes que pipx positionne dans ce répertoire.
Si vous avez installé d’autres projets Python via pipx, vous pourrez d’ailleurs constater que les bibliothèques de chaque projet sont bien présentes dans leur venv dédiés, parfois avec des versions différentes :
Nous voyons ici que “netexec” et “httpie” sont deux outils gérés via pipx, et qu’ils ont une version de la bibliothèque “request” légèrement différente. Ce qui est parfaitement invisible pour l’utilisateur tant au niveau de l’installation que de l’utilisation. Aucun problème si un projet utilise une version plutôt qu’une autre, chacun a ses propres dépendances dans son répertoire.
Vous pouvez lister tous les projets installés via pipx avec l’option “list” et désinstaller avec l’option “uninstall <nom>” :
Pipx présente également l’avantage de permettre d’exécuter des applications sans les installer de façon permanente grâce à l’option “run” suivi de l’outil à utiliser et de ses options :

Dans les faits, pipx crée un environnement virtuel temporaire pour télécharger et exécuter le paquet demandé, puis le supprime une fois l’exécution terminée.
Également, il est possible d’installer des outils Python depuis d’autres sources que les serveurs pypi.org de manière très simple, ce qui est très pratique pour accélérer leur déploiement. Voici différents exemples avec un projet Python situé sur GitHub, nous pouvons même spécifier une branche ou un commit précis !
Pour qu’un projet Python sur Github puisse être installé depuis pipx, il doit respecter une certaine structure permettant son déploiement automatisé, notamment un fichier “setup.py” ou “pyproject.toml” et une point d’entrée console.
IV. Conclusion
Nous avons donc vu que pip est utilisé pour installer des bibliothèques Python dans des projets, celles-ci sont alors disponibles pour tous les outils Python sur le système. Pipx sert lui à installer et à exécuter des outils Python en ligne de commande de manière isolée et indépendante. Ces outils peuvent alors utiliser des versions différentes d’une même bibliothèque sans que cela soit gênant au quotidien.
Il existe encore plein de cas d’usage, options et subtilités d’utilisation de pipx. Il ne s’agit là que d’un article d’introduction, n’hésitez pas à nous faire savoir si vous souhaitez des articles pour aller plus loin sur ces sujets via les commentaires !