Gestion des dépendances Python.
Il est fréquent de retrouver dans les projets python une liste impressionnante
de dépendances qui deviennent rapidement ingérables. Il est inutile de lister
toutes les dépendances de seconds, voir de troisièmes niveaux. J’imagine
parfaitement comment on arrive à ce genre de résultats : on lance la commande
pip freeze > requirements.txt
Je vous propose quelques outils qui vont permettre de nettoyer et gérer correctement vos dépendances.
Pipx, installer des programmes python dans des environnements isolés
Pour éviter d’installer des utilitaires de développement dans les environnements virtuels de vos projets, Pix propose de les installer dans des environnements isolés, mais disponibles tout le temps. Cela garantit l’absence de conflits de dépendances.
Installation de pipx
Installez pipx dans votre compte utilisateur :
Utilisation de pipx
Le premier moyen est d’utiliser les packages Pypi comme avec pip :
Pour installer un outil depuis son code source :
Pour utiliser un produit et l’installer, il suffit de lancer la commande suivante :
Pour lister vos outils installés avec pipx il suffit d’utiliser la commande suivante :
Pour désinstaller un package :
Pour injecter un outil à un autre :
Pipdeptree, nettoyer vos fichiers requirements.txt
Comme je le disais plus haut il est inutile de lister tous les packages dans
vos fichiers requirements.txt. Si trop tard pipdeptree
va vous aider à faire
le ménage.
Installation de pipdeptree
Il suffit de ‘linstaller dans votre environnement virtuel :
Lançons le sur l’environnement ansible :
On voit bien l’arborescence des dépendances. Si vous voulez n’afficher que le premier niveau.
Si vous utilisez pyenv, cela va obliger d’indiquer le chemin de l’environnement à analyser :
POur n’afficher que le premier niveau :
En virant les packages de dev vous avez une liste propre de dépendances.
pip-tools, pour construire des fichiers requirements cohérents’
pip-tools
est une bonne alternative poetry
et pipenv
Vous avez certainement rencontré des problèmes pour installer des packages avec pip, surtout qu’on utilise des librairies faisant appel à des librairies communes, mais pas forcément la même version.
On peut aussi avoir installé des packages pour tester un module, mais comment le désinstaller facilement avec toutes ses dépendances ?
Pip-tools propose des solutions à ces problèmes.
Installation de pip-tools
On va utiliser pipx
Utilisation de pip-compile
Le premier outil disponible avec pip-tools s’appelle pip-compile
. Cet
outil va prendre en entrée soit :
- des fichiers .in
- le fichier
setup.py
qui a ma préférence.
Lançons pip-compile
sur ce projet (je vous conseille d’utiliser toujours l’option
-v pour comprendre pourquoi elle échoue) :
Le contenu du fichier requirements.txt créé :
Pour installer les extra dev :
Pour mettre à jour tous les packages (mais vous êtes fou, je préfère utiliser renovate) il suffit d’ajouter l’option upgrade :
Une autre option se nommant --pip-args
permet de passer des paramètres pip
Nettoyer vos environnements
Un autre outil se nommant pip-sync
se propose de gérer vos environnements
virtuels à partir du fichier requirements.txt. Si des librairies ont été retirées
ou ajouté, pip-sync
va les installer ou les désinstaller pour que
l’environnement corresponde à ce qui se trouve dans le fichier requirements.txt