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 :
sudo pip install requests
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 :
$ pipx install requests
Note: Dependent package 'charset-normalizer' contains 1 apps
- normalizer
No apps associated with package requests. Try again with '--include-deps' to include apps of dependent packages,which are listed above. If you are attempting to install a library, pipx should not be used. Consider using pip ora similar tool instead.
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 :
sudo apt update
sudo apt install pipx
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 :
pipx install httpie
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 :
$ find ~/.local/share/pipx/venvs -type d -name "requests-*"
~/.local/share/pipx/venvs/netexec/lib/python3.11/site-packages/requests-2.31.0.dist-info
~/.local/share/pipx/venvs/httpie/lib/python3.12/site-packages/requests-2.32.3.dist-info
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 list
venvs are in /home/mickael/.local/share/pipx/venvs
apps are exposed on your $PATH at /home/mickael/.local/bin
manual pages are exposed at /home/mickael/.local/share/man
package httpie 3.2.4, installed using Python 3.12.8
- http
- httpie
- https
- man1/http.1
- man1/httpie.1
- man1/https.1
package man-spider 1.0.4, installed using Python 3.11.8
- manspider
package netexec 1.1.0+a194fda, installed using Python 3.11.8
- NetExec
- netexec
- nxc
- nxcdb
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 !
pipx install git+https://github.com/psf/black.git
pipx install git+https://github.com/psf/black.git@branch
pipx install git+https://github.com/psf/black.git@ce14fa8b497bae2b50ec48b3bd7022573a59cdb1
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 !