De nombreux modules Python tiers ont un attribut qui contient les informations de version du module (généralement quelque chose comme module.VERSION
ou module.__version__
), mais certains n'en ont pas.
Des exemples particuliers de tels modules sont libxslt et libxml2.
Je dois vérifier que la version correcte de ces modules est utilisée lors de l'exécution. Y a-t-il un moyen de faire cela?
Une solution potentielle serait de lire la source au moment de l'exécution, de la hacher, puis de la comparer au hachage de la version connue, mais c'est désagréable.
Existe-t-il de meilleures solutions?
pkg_resources
pouvez choisir une version différente de celle que vous utilisez réellement, car elle a une priorité plus élevée sur la vôtrePYTHONPATH
ou similaire.__version__
attribut: stackoverflow.com/q/17583443/562769pkg_resources
le lien est une erreur 404Quelques idées:
la source
Vous pouvez utiliser
pour voir les packages installés au format des exigences.
la source
Vous pouvez utiliser la
importlib_metadata
bibliothèque pour cela.Si vous êtes sur python <
3.8
, installez-le d'abord avec:Depuis python,
3.8
il est inclus dans la bibliothèque standard de python.Ensuite, pour vérifier la version d'un package (dans cet exemple
lxml
), exécutez:Gardez à l'esprit que cela ne fonctionne que pour les packages installés à partir de PyPI. En outre, vous devez passer un nom de package comme argument à la
version
méthode, plutôt qu'un nom de module fourni par ce package (bien qu'ils soient généralement identiques).la source
J'ai trouvé assez peu fiable d'utiliser les différents outils disponibles (y compris le meilleur
pkg_resources
mentionné par cette autre réponse ), car la plupart d'entre eux ne couvrent pas tous les cas. Par exempleComme nous avions besoin d'un moyen fiable pour obtenir la version de n'importe quel package, module ou sous-module, j'ai fini par écrire getversion . C'est assez simple à utiliser:
Consultez la documentation pour plus de détails.
la source
Pour les modules qui ne fournissent pas
__version__
ce qui suit est moche mais fonctionne:ou
la source