127 votes

Vérification de version module python lors de l’exécution

De nombreux 3ème partie des modules python ont un attribut qui détient les informations de version du module (généralement quelque chose comme module.VERSION ou module.__version__), mais certains ne le font pas.

Des exemples particuliers de tels modules sont libxslt et libxml2.

J'ai besoin de vérifier que la bonne version de ces modules sont utilisés lors de l'exécution. Est-il un moyen de faire cela?

Une solution potentielle wold être à lire dans la source au moment de l'exécution, de hachage, puis à les comparer à la valeur de hachage de la version connue, mais c'est dégueulasse.

Quelqu'un a obtenu une des meilleures solutions?

256voto

EnigmaCurry Points 2311

Utiliser pkg_resources. Quoi que ce soit installé de PyPI devrait au moins avoir un numéro de version.

8voto

Mark Roddy Points 7568

Je voudrais rester à l'écart de hachage. La version de libxslt utilisé peut contenir un certain type de pièce qui n'a pas d'effet sur votre utilisation.

Comme une alternative, je voudrais suggérer que vous ne contrôlez pas au moment de l'exécution (ne sais pas si c'est dur d'exigence ou non). Pour le python trucs que j'ai écris qui dispose de dépendances externes (3e partie des bibliothèques), j'écris un script que les utilisateurs peuvent utiliser pour vérifier leurs python installer pour voir si les versions appropriées de modules sont installés.

Pour les modules qui ne sont pas de la définition d'une "version" de l'attribut, vous pouvez inspecter les interfaces qu'il contient (classes et méthodes) et voir si elles correspondent à l'interface qu'ils attendent. Ensuite, dans le code que vous travaillez sur, supposons que la 3ème partie des modules de l'interface que vous attendez.

6voto

Richard Levasseur Points 5428

Quelques idées :

  1. Essayez de vérifier pour les fonctions qui existent ou n’existent pas dans vos versions nécessaires.
  2. S’il n’y a aucune différence de fonction, inspecter les signatures et les arguments de la fonction.
  3. Si vous ne pouvez pas le comprendre des signatures de fonction, mis en place quelques appels de talon au moment de l’importation et vérifier leur comportement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X