Diagnostics d’installation : module pydir

En termes d’installation de paquetages Python, le minimum est de connaître les répertoires d’installation pour la version Python courante, l’environnement utilisé et les paquetages proprement dits. Deux fonctions du module sys.pydir sont chargées de ces tâches basiques et sont simplement décrites dans cet article.

Positionnement du Python courant

La fonction pydir_getpythondirs renvoie une paire composée par la racine du Python et la localisation des répertoires /site-packages/, par exemple :

(python_root, site_packages) = pydir_getpythondirs()

Nous donnera :

-> pydir_getpythondirs
Python root directory [C:\Python3\]
Python Site-Packages directory [C:\Python3\envs\prod\Lib\site-packages\]

Au passage nous voyons que nous utilisons l’environnement prod, un jour je ferais peut être une fonction pydir_getpythonenv pour capter directement cette information via un split. La fonction est basée sur une utilisation de get_python_lib issue du module distutils.sysconfig.

Localisation probable d’un paquetage

La fonction pydir_getpythondirs_check permet de tester la localisation probable d’un paquetage dont le nom est donné en argument et nous retourne celle qu’elle préfère. En effet nous pouvons avoir plusieurs instances de Python incluant un paquetage donné. Par exemple, pour le paquetage buildez :

print("-> pydir_getpythondirs_check")
site_package_buildez = pydir_getpythondirs_check('/buildez/', '', verb=True)
if (len(site_package_buildez) <= 0):
     print("=> problem with Python site-packages directory")

Nous avons comme résultat :

-> pydir_getpythondirs_check
found {C:\Users\Utilx\AppData\Roaming\Python\Python312\site-packages\buildez} False
found {C:\Python3\envs\prod\Lib\site-packages\buildez} True
using {C:\Python3\envs\prod\Lib\site-packages\buildez}

La fonction a détecté des fichiers itinérants (roaming) liés au profil windows de Utilx, que nous évitons d’utiliser, mais la fonction détecte bien ce qui nous intéresse. La fonction est basée à la fois sur get_python_lib et sur getusersitepackages du module standard site.

Evolutions

Il va falloir reprogrammer ces fonctions vu que le module distutils(.sysconfig) est déprécié à partir de la version 3.10 de Python et remplacé par sysconfig, mais la fonction get_python_lib marche encore grâce à l’installation de setuptools.

Liens et lectures
Retour en haut