Diagnostics : module pypkgs (mode paquetage)

3. Méthode pip

Dans ce cas, comme il n’y a pas de librairie Python (en tout cas je n’en ai pas trouvée en version 3.12) qui permette de faire la même chose qu’avec importlib, nous utilisons pip directement via une méthode subprocess, il s’agit de la fonction pypkgs_pkg_pip. Dans un premier temps nous lançons pip show et et nous récupérons la sortie standard dans la chaîne de caractères stdout_str :

L’option universal_newlines permet d’utiliser tous les caractères de fin de ligne quel que soit l’OS utilisé.

universal newlines – A manner of interpreting text streams in which all of the following are recognized as ending a line: the Unix end-of-line convention ‘\n’, the Windows convention ‘\r\n’, and the old Macintosh convention ‘\r’. See PEP 278 and PEP 3116, as well as bytes.splitlines() for an additional use.

Nous devons aussi passer la transformation de bytes en string pour utiliser la sortie standard, et que nous transformons en dictionnaire info:

Puis nous allons exploiter le dictionnaire info (qui est spécifique au information retournées par pip) pour renseigner le dictionnaire pdict dont les clés sont les mêmes pour toutes les méthodes. Avec pip nous avons accès aux clés ‘name’ (nom du paquetage), ‘loc’ (localisation), ‘ver’ (version), ‘summary’ (résumé de la fonction du paquetage), ‘req’ (dépendances du paquetage), ‘reqby’ (autres paquetages dépendants de celui ci) :

Une fois que c’est fini, un appel à la fonction pypkgs_scoring permet de compléter la valeur de pdict[score] en ajoutant la contribution de pip. Ce qui se fait par la commande pdict = pypkgs_scoring(pdict, what='pip') puis nous renvoyons à nouveau le dictionnaire  pdict.

Test drive

La fonction doit être utilisée en complément de la méthode importlib, donc après les fonctions pypkgs_init_pdict et pypkgs_importlib, par exemple (ou pkgname correspond à un nom de paquetage) :

Dans le cas de PIL nous n’avons rien de plus par rapport à importlib, le score (identique) est de 160, en fait la méthode refuse le scoring, considérant que toutes les conditions ne sont pas réunies pour faire basculer le bit dédié à PIL.
Dans le cas de pillow nous améliorons le score, de 64 à 80, nous obtenons la localisation, mais celle ci n’est pas très intéressante: 'loc': 'C:\\Python3\\envs\\prod\\Lib\\site-packages'. Notons que nous avons un répertoire pillow-11.3.0.dist-info dans C:\Python3\envs\prod\Lib\site-packages et dans C:\Python3\Lib\site-packages
Dans le cas de Pillow le résultat est identique à ‘pillow’.
Dans le cas de numpy, nous améliorons le score de 224 à 240, le champ 'reqby' apparait: 'reqby': ['biopandas', 'biopython', 'cftime', 'contourpy', 'matplotlib', ..., 'scikit-learn', 'scipy', 'seaborn', 'statsmodels'].

Retour en haut