packmon - Analyse des paquets installés

Bonjour,

Pour le nom :
package-monitor ou package-manager (selon jusqu’où tu vas dans les fonctionnalités ensuite) et tout ce qui peut se baser là dessus :

packmon
pypackmon
pipackmon
etc.

3 « J'aime »

Merci beaucoup !
Après un peu de délire (non, je ne dirai rien), j’étais arrivé à un truc un peu semblable :
checkreq
check-req
check-requirements

Comme dit dans le message juste au-dessus du tiens, il existe déjà django-package-monitor (app django pour surveiller), et même aa-package-monitor qui sert aussi mais a priori dédié à une application (AllianceAuth).

packmon me plait bien :heart:

1 « J'aime »

Boom ! J’ai pris le temps de commencer un truc pour qu’au moins vous puisiez voir le code (moche hein, je préviens).

2 « J'aime »

J’aurai bien essayé ton packmon mais je suis coincé dès l’install par :

$ pip install packmon
ERROR: Could not find a version that satisfies the requirement packmon (from versions: none)
ERROR: No matching distribution found for packmon

J’ai raté un truc mais quoi ?

En bon boulet, je m’auto-réponds (des fois que cela serve à d’autres :wink: )
Une fois que le paquet est téléchargé et décompressé, le repertoire destination étant packmon-main, il a fallu lancer la commande (au lieu de $ pip install packmon) :

pip3 install packmon-main
1 « J'aime »

Arf ! Oui non, alors en fait il est pas publié sur pypi encore… C’est pour ça que tu peux pas l’installer depuis pip (ou pip3) directement !

J’ai commencé à préparer le dépôt et je prépare une première version pour pypi, mais là c’est week-end :wink:

1 « J'aime »

Bon, ben voilà, j’ai fait le petit frère qui s’occupe des paquets npm… Faut que je remette tout ça en ordre et que je le publie…

La première version (très alpha) de packmon est désormais disponible sur pypi.org !
Tout retour constructif est plus que bienvenu :wink:

3 « J'aime »

La version 0.1.0 de packmon est désormais disponible !

Le code a été fortement revu et un système de cache (non obligatoire) est en place pour ne pas sursolliciter pypi.org. De plus les colonnes ont maintenant un titre et leur largeur s’adapte à celle du terminal :

Ah, et il est possible de l’utiliser ainsi :
packmon requirements.txt

Mais également ainsi :
curl https://raw.githubusercontent.com/AFPy/Potodo/master/requirements.txt |packmon

ce qui donne ça :

3 « J'aime »

Rah curl et sa progress bar.

echo silent > ~/.curlrc

(bon ou curl -s, aussi)

1 « J'aime »

Roh, oui j’ai fait au plus vite. Je peux éditer si tu préfères. C’était simplement pour montrer qu’on peut faire ça ou même plus simplement :
pip freeze |packmon

Je ne me plains pas de ton exemple, je me plains de curl :smiley:

Et j’apprécie tout à fait la philosophie unix bien appliquée ici : ne faire qu’une chose mais bien :+1:, accepter un flux de texte :+1:.

1 « J'aime »

Et zou !
Une nouvelle mise à jour car pas mal de choses étaient bancales :
curl -s https://raw.githubusercontent.com/AFPy/Potodo/master/requirements.txt |packmon

J’ai donc ajouté :

  • l’avancement de l’analyse (le 8/8 en haut à gauche)
  • la mise en place du cache
    • Celui-ci met à jour les paquets qui ont des infos vieilles de plus de 20 jours (sauf si --no-update)
    • Il peut ne pas être utilisé : --no-cache
    • ou carrément supprimé : --clear-cache (qui ne fait rien d’autre dans ce cas-là)
  • j’ai amélioré l’affichage grâce aux f-string que j’apprécie de plus en plus
  • Et l’algo d’affichage des colonnes plus ou moins réduites pour tenir sur l’écran ne devrait plus planter !
1 « J'aime »

Je suis passé à coté de ce sujet alors qu’au boulot on a une grosse problèmatique de suivi des dépendances.

Du coup une question:
Le script se base sur Pipy, comment réagit t’il si la dépendance du requirements est une lib absente de Pypi ? (en gros si c’est un paquet développé en interne par l’équipe).

C’est une très bonne question. A priori il ne trouve pas les informations et passe au paquet suivant… Je vais tester ça pour voir.
Il utilise l’API de pypi pour retrouver les informations des paquets, donc logiquement, et à moins que votre paquet soit équivalent à un paquet existant (même nom), il tombera sur une 404.

C’est bien ça :

2 choses ici :

  1. Il signale l’erreur 404 sur un paquet en particulier (ici, “totor” en version “2000r”)
  2. On voit qu’on peut avoir 2 paquets avec des versions différentes (oui, ça ne ressortirait pas d’un pip freeze, mais ça peut faire partie d’un “requirements.txt”)

Je n’avais pas poussé la nouvelle version sur pypi… Je viens de le faire à l’instant…

1 « J'aime »

Du coup, @Jeffd vous l’installez comment votre composnat interne ? Et comment packmon pourrait trouver des infos sur celui-ci ?

Cette fois j’ai poussé la nouvelle version à l’heure :slight_smile:

Nous sommes donc en v0.3.0 et voici les nouveautés :

  • Pouvoir visualiser l’état du cache
  • Pouvoir rafraichir le cache dans son ensemble
  • N’afficher que les packages qui ont potentiellement un souci
  • Pouvoir silencier la sortie
  • Pouvoir utiliser packmon dnas une CI en le faisant retourner un code différent de 0 en cas de paquet avec un souci

Je pense que cette dernière option sera à revoir car n’avoir aucun paquet avec souci peut être impossible à atteindre. Il fuat que je travaille encore sur ce point-là.

2 « J'aime »