La bonne pratique pour tester la version de Python
Par Darko Stankovski, 05/10/2021 (Mise à jour 27/03/2026) — Débutant
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 subissait une panne de Facebook.
Comme toute version de Python, celle-ci apporte son lot de nouveautés. Il y a de quoi en faire des publis, mais elle se caractérise aussi par un besoin de remise en cause 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 namedtuple et non la chaine de caractères.
Cela semble évident mais il est courant d'avoir des tests du type sys.version > '3.6'. Ça passait mais avec un numéro de version mineur à deux chiffres, ce ne sera 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 namedtuple (qui doit se traduire par N-uplet nommé… On va garder namedtuple), 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.
Pour comparer le numéro de version de l'interpréteur au runtime, la bonne pratique a toujours été 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.