Python 3.10 : tester la version de Python

Python 3.10 a été publié en version définitive ce lundi 4 octobre 2021 conformément à la PEP 619 qui définissait le calendrier de publication. En France, elle est apparue vers 22h alors que le monde connaissait une panne de Facebook.

Comme toutes versions de Python, celle-ci apporte son lot de nouveautés. Il y a de quoi en faire des publis, mais elle est aussi l’occasion de rappeler une bonne pratique autour du test au runtime de la version de Python.

Lorsque vous avez besoin de réaliser des actions spécifiques en fonction de la version de Python, il est d’usage… de tester la version de Python. Pour cela, il faut se tourner vers le module sys. Celui-ci propose deux constantes :

  • version : la version de l’interpréteur sous forme d’une chaine de caractères
  • version_info : les informations de version sous forme d’un named tuple.

Voici donc ce que j’obtiens dans le shell interactif (pour la 3.10.0):

>>> import sys
>>> sys.version
'3.10.0 (v3.10.0:b494f5935c, Oct  4 2021, 14:59:20) [Clang 12.0.5 (clang-1205.0.22.11)]'
>>> sys.version_info
sys.version_info(major=3, minor=10, micro=0, releaselevel='final', serial=0)

La bonne pratique pour tester le numéro de version est bien d’utiliser le named tuple et non la chaine de caractères. Si utiliser cette dernière avec des instructions type sys.version > '3.6' passait, avec un numéro de version mineur à deux chiffres, ce n’est plus le cas. Rappelez-vous en effet que la comparaison de chaines de caractères se fait de manière lexicographique. La chaine 3.10 sera donc inférieur à la chaine 3.6. Le test précédent sera donc faux.

Avec un named tuple (qui doit se traduire par N-uplet nommé… On va garder named tuple), on peut accéder aux champs avec, pour le numéro de version majeur, la syntaxe sys.version.major ou sys.version[0].

Les numéros de version majeur et mineur sont les deux premiers éléments. Avec un N-uplet, vous pouvez donc faire la comparaison sys.version_info > (3, 6). Ce sont donc les éléments qui seront comparés dans l’ordre et selon leur type. Avec Python 3.10, ce test retournera vrai.

La bonne pratique a toujours été, lorsque l’on souhaite comparer le numéro de version de l’interpréteur au runtime, d’utiliser le N-uplet sys.version_info. Avec le passage à la version 3.10, ce n’est plus qu’une bonne pratique, c’est aussi une obligation pour que ce test fonctionne correctement.

Si vous avez aimé ce post, n’hésitez pas à laisser un commentaire ci-dessous ou sur la page Facebook 😉

À propos de... Darko Stankovski

iT guy, photographe et papa 3.0, je vous fais partager mon expérience et découvertes dans ces domaines. Vous pouvez me suivre sur les liens ci-dessous.

Vous aimerez aussi...

Laisser un commentaire