Mettre à jour les dépendances

Mettre à jour les dépendances Python

Dependabot, notre ami de github About alerts for vulnerable dependencies - GitHub Docs permet de surveiller les différentes dépendances de votre projet python, il analyse simplement le fichier requirements.txt et vous tiens informé des différentes mises à jour des dépendances.

Il prépare un merge automatique avec une description de la vulnérabilité concernée, il vous demande ensuite si vous souhaitez l’appliquer, si votre projet n’est simplement pas concerné ou si vous souhaitez l’ignorer.

Voyons un peu pourquoi ces choix.

Pourquoi cet article?

Déjà, j’ai vu qu’on développe ici un projet similaire, et c’est très bien, mais ce forum est aussi fréquenté par des débutants qui vont sauter sur la mise à jour continuelle des dépendances de leurs projets et… vont vite apprendre comme nous tous le revers de la médaille.

Mettre une librairie à jour n’est pas anodin!

Déjà, elle peut nécessiter une version différente de python, ce qui peut briser le code de votre applications, prenons par exemple, le changement d’une version 3.5 à 3.10, alors que dans la 3.5 vous pouviez tranquillement déclarer vos variables globales depuis un import et les utiliser dans une fonction d’un autre module (le scope était fonction, module). Votre code ne fonctionnera plus avec la version 3.10, pourquoi? Et bien parce que la vie est injuste et les programmeurs malveillants (je plaisante). Le scope à changé, maintenant on doit obligatoirement importer une variable avec le mot clé global.
Une librairie peut aussi dépendre d’autres librairies, et certaines de vos dépendances de librairies… incompatibles!

Recoder l’intégralité de votre programme pour la mise à jour d’une librairie qui ne contient aucune vulnérabilité applicable à votre projet est quelque peu contre-productif.

Suis-je concerné?

Oui, une mise à jour même d’une vulnérabilité majeur peut ne pas concerner votre projet pour plein de raisons, soit vous n’utilisiez simplement pas la fonction incriminée, soit vous aviez déjà appliqué de solutions correctives sur une ancienne librairie (surcharge de fonctions, réécriture partielle ou complète d’objets, logique programme différente… le choix est vaste).

Donc prudence avant d’appliquer tout et n’importe quoi.

Démarrer ses projets avec la dernière version stable de python est un bon réflexe, ainsi qu’avec les dernières librairies bien à jour et tout, mais ensuite on fige!

Le temps passera, il vous faudra mettre à jour votre projet de façon progressive, envisager le passage à une version plus récente de python par exemple sera une bonne chose, une fois que celle-ci sera significative ou que vous aurez avancé dans votre projet.

En revanche, le faire à chaque mise à jour de dépendance, là c’est une autre histoire qui peut coûter énormément de temps pour un gain inexistant.

Dans github, pour activer notre ami dependabot c’est dans l’onglet “security” >> “Enable Dependabot Alerts” il y a plein de bricoles sympa dans cette section, mais ça sort du cadre de ce post ;-).

1 « J'aime »

Merci pour ce post, et en effet, il n’est pas toujours souhaitable de “mettre à jour” ses dépendances. Typiquement, ce qui m’a conduit à créer packmon c’est le fait qu’une personne a mis à jour les dépendances d’un projet dont je m’occupe sans se préoccuper du résultat.

Au final ? Il reste des vulnérabilités critiques (paquet pas mis à jour) et les tests ne passent plus (python mis à jour directement de 3.6 à 3.9, dommage, la gestion de la couverture de code ne passe pas la 3.7).

De plus, tout ce travail de recomposition du fichier requirements.txt m’a permis de nettoyer celui-ci => j’avoue que coller pytest, et autre ipython dans une appli en prod me pose un vrai problème.

Mais ça m’a aussi permis de voir qu’un des composants utilisés est obsolète, plus mis à jour et on n’a même pas accès au code source. Enfin, celui-ci attends une version fixe de coverage obsolète. C’est donc un futur remplacement à prévoir, mais à fonctionnalités égales.

Donc oui : on ne met pas à jour les composants d’une application les yeux fermés !

1 « J'aime »