Votre navigateur n'est pas à jour !

Merci de mettre à jour votre navigateur pour utiliser mon blog. Mettre à jour mon navigateur maintenant

×

Python - Comment mieux gérer ses dépendances en python

Date de publication 21 oct. 2020
Lorsque l'on utilise beaucoup de librairies on peut rapidement être confronté à conserver des dépendances non utilisées.
Cela n'est pas utile, la maintenance de votre application devient plus complexe et le poids de votre application est inutilement grossi.
Nous allons voir plusieurs techniques pour résoudre ces problématiques.

La solution graphique avec pipdeptree


Il faut installer la librairie python pipdeptree et lancer la génération de l'arbre de vos dépendances

pipdeptree --graph-output dot > dependencies.dot

Ce fichier respecte le formalisme de description des graphes sous un format texte. De cette manière il pourra être fourni au second outil graphviz pour créer la représentation graphique.

Pour exploiter le fichier dot il faut installer graphviz sur l'OS et pas depuis pypi.

Pour générer l'image png des dépendances on utilise cette commande
dot dependencies.dot -Tpng -o out.png

On peut éviter l'installation du binaire graphviz si on veut générer l'image depuis pipdeptree. Pour cela on installe graphviz depuis pypi

pipenv install graphviz --dev

Et on génère l'image du graphe
pipenv run pipdeptree --graph-output png > dependencies.png

Ainsi on obtient dans les 2 cas une image PNG représentant la hiérarchie entre les différentes librairies de votre projet.
On visualise rapidement les dépendances n'ayant pas de liens et donc ce sont des librairies potentiellement à désinstaller.
Création d'un utilisateur avec le modèle surchargé de Django

La solution avec un linter


Pour faire le lint de mes projets j'utilise flake8, comme évoqué dans cet article sur le lint. Ce dernier possède un plugin pour vérifier la présence d'une librairie dans les dépendances (setup.py ou requirements.txt)

Après installation, il suffit de lancer votre flake8 pour retrouver dans la console les modules sous le tag I900 (Package is not listed as a requirement) et I901 (Package is require but not used)

./build/lib/models/seo_page.py:1:1: I900 'wagtail.core.models' not listed as a requirement

Ainsi on connait les dépendances non inscrites dans le setup.py ou requirements.txt

La solution avec une liste


J'ai découvert récemment cette librairie qui permet de lister les packages installés dans un espace de virtualisation et non utilisé dans votre application.
pipenv run pip-autoremove -L

Ainsi on peut nettoyer notre fichier de dépendances en enlevant les librairies souhaitées. L'avantage de cette solution est qu'elle ne dépend pas uniquement de pip, elle fonctionne très bien avec pipenv (que j'utilise)

On peut aussi lister les librairies avec leur version de manière plus lisible pour analyser plus facilement
pipenv run pip-autoremove -L | cut -d' ' -f1,2 | sed 's/ /==/'
blog comments powered by Disqus