Python 2 EOL: Comment survivre à la fin de Python 2

Depuis le 1er janvier 2020, la branche 2.x du langage de programmation Python n'est plus prise en charge par ses créateurs, la Python Software Foundation. Cette date marque le point culminant d'un drame qui dure depuis des années: la transition d'une version plus ancienne, moins performante et largement utilisée de Python à une version plus récente et plus puissante qui traîne toujours son prédécesseur dans l'adoption.

Il est grand temps. Python 3, avec d'innombrables améliorations techniques et destinées aux utilisateurs finaux par rapport à Python 2, n'a jamais été en meilleure position pour déplacer définitivement Python 2. La grande majorité des packages populaires hébergés dans le référentiel PyPI, le premier guichet pour le code Python réutilisable, supporte Python 3. Python 3 est devenu l'interpréteur Python par défaut pour de nombreuses distributions Linux. Et la plupart des livres, académies de codage et didacticiels en ligne récents recommandent Python 3 pour les débutants.

Maintenant les mauvaises nouvelles. Python 2, comme Windows 7 (ou Windows XP!), Sera avec nous pour les années à venir. Beaucoup d'entre nous continueront à s'appuyer sur des applications écrites en Python 2. Certains d'entre nous continueront même à utiliser Python 2 pour les nouvelles applications, en raison de restrictions internes. Que devez-vous faire si vous êtes coincé avec Python 2 dans ce qui est en train de devenir un monde Python 3? Regardons les options. 

Fin de vie de Python 2: ce que cela signifie

La première et la plus importante chose à comprendre à propos de Python 2 en fin de vie (fin de vie): les applications Python 2 continueront de fonctionner. Ne considérez pas cela comme un problème de bogue du millénaire, où les applications Python 2 s'arrêtent toutes comme par magie le 1er janvier 2020. Il n'y aura tout simplement plus de support officiel  pour Python 2 de la part de l'équipe de développement Python principale.

Voici ce que signifie Python 2 EOL en termes pratiques:

  • Les correctifs de bogues officiels et les correctifs de sécurité pour Python 2 cesseront.  Aucun problème nouvellement découvert dans l'interpréteur Python 2 ou la bibliothèque standard Python 2 ne sera corrigé par l'équipe de développement principale. Cependant, les fournisseurs commerciaux pourraient maintenir Python 2 par eux-mêmes, et d'autres tiers pourraient bifurquer la base de code Python 2 et continuer là où l'équipe principale s'est arrêtée. (Plus à ce sujet plus tard.)
  • Les projets Python tiers abandonneront Python 2. Les bibliothèques qui ont pris en charge à la fois Python 2 et Python 3 commenceront à consacrer leurs ressources exclusivement à Python 3. Beaucoup de ces projets sont gérés par des bénévoles, et il est beaucoup moins difficile de prendre en charge une seule version de la langue. Chaque projet décidera de la prise en charge de Python 2 pour lui-même, mais de nombreux grands projets Python s'engagent à abandonner entièrement le support de Python 2 d'ici 2020.
  • La prise en charge de la plate-forme pour Python 2 diminuera. Les distributions Linux et les fournisseurs de services cloud peuvent continuer à inclure le runtime Python 2. Mais attendez-vous à ce que la prise en charge de Python 2 devienne moins robuste avec le temps. Il sera presque certainement toujours possible d'exécuter une version conteneurisée de Python 2 sur une plate-forme cloud, mais il n'y a aucune garantie que les fournisseurs de services cloud continueront à gérer leurs propres conteneurs Python 2.

Si vous êtes coincé avec les applications Python 2, comment devez-vous gérer l'absence de support Python 2? La meilleure chose à faire à long terme est de trouver une stratégie pour supprimer toutes vos dépendances sur Python 2. Mais ce n'est que la première des nombreuses options. 

Transition loin de Python 2

Laisser Python 2 pour Python 3 peut être plus facile que prévu, en fonction de la taille de la base de code et des dépendances externes. La documentation officielle de Python contient des étapes simples que vous pouvez suivre pour déterminer si votre projet est «à l'épreuve du temps», c'est-à-dire qu'il peut être utilisé dans Python 3 avec peu ou pas d'ajustement. L'une des meilleures premières étapes à suivre consiste à utiliser le  caniusepython3package pour déterminer quels composants ou dépendances, le cas échéant, bloqueraient une migration.

Si vous êtes bloqué avec Python 2 parce qu'un composant particulier d'une application ne fonctionne que sur Python 2, commencez par vous éloigner de ce composant. Vérifiez s'il existe une alternative compatible avec Python 3, puis reconstruisez l'application à partir de ce point. L'idée est de rechercher les plus petits endroits où se trouvent ses dépendances sur Python 2 et de les résoudre.

Le  moins que vous puissiez faire, si vous devez rester sur Python 2 sous une forme ou une autre, est de commencer par migrer vers la dernière version de Python 2 - Python 2.7.16 à ce jour - et de l'utiliser comme point de départ pour Python 3 De cette façon, vous bénéficierez des corrections de bogues qui seront disponibles pour Python 2.7 avant sa fin de vie officielle.

Utilisez un autre runtime Python 2

Si la modification de la base de code Python 2 n'est pas une proposition viable, une autre alternative consiste à utiliser un autre runtime Python 2, développé par un tiers. Les environnements d'exécution alternatifs de Python 2 peuvent avoir une fenêtre de support plus longue que Python 2 lui-même.

Tauthon

Tauthon est un fork de Python 2.7.18 «avec une nouvelle syntaxe, des fonctions intégrées et des bibliothèques rétroportées à partir de Python 3.x», selon le README du projet. Tauthon inclut également, chaque fois que les responsables peuvent les fournir, des correctifs et des correctifs pour le langage. En théorie, Tauthon devrait fonctionner comme un remplacement de Python 2.7. La version la plus récente au moment de la rédaction de cet article, Tauthon 2.8.2, comprend des annotations de fonction, des arguments de mots clés uniquement, de la async/awaitsyntaxe et d'autres fonctionnalités auparavant disponibles uniquement dans Python 3.

PyPy

PyPy, le runtime accéléré juste à temps pour Python, utilise Python 2 comme un élément clé de sa propre infrastructure interne et prend depuis longtemps en charge Python 2 comme version principale. La documentation du projet affirme que «puisque RPython [la fondation de PyPy] est construit sur Python 2 et qu'il est extrêmement improbable de changer, la version Python 2 de PyPy existera pour toujours, c'est-à-dire tant que PyPy lui-même est autour." PyPy peut poser des problèmes de compatibilité ou de performances avec certains packages Python qui reposent sur des extensions C, bien que l'équipe de développement de PyPy travaille constamment pour résoudre ces problèmes.

IronPython

IronPython, une implémentation Python pour le runtime .Net, a une version Python 2 toujours prise en charge active. Sa liste actuelle de développeurs a déclaré qu'ils ne prendraient probablement pas en charge Python 2 après 2020, pour mieux se concentrer sur IronPython3. Cependant, cela ne signifie pas que quelqu'un d'autre ne peut pas continuer à bénéficier d'un tel soutien par lui-même.

Cython

Une autre possibilité, bien qu'avec une fenêtre de support limitée également, est Cython. Cython compile Python en C avec un typage facultatif pour améliorer les performances et prend en charge Python 2 depuis sa création. Il est possible d'utiliser Cython pour convertir du code Python 2 en C pour une utilisation continue en tant que binaire «figé». Vous pouvez même augmenter vos performances en procédant ainsi, en fonction de la nature de l'application. (Les programmes qui sont principalement liés aux E / S ne verront pas beaucoup d'amélioration.)

Cependant, Cython prévoit d'abandonner le support de Python 2 d'ici la fin de l'année. Cela ne signifie pas que les programmes Python 2 ne se compileront plus en Cython, seulement que le code Cython utilisant la syntaxe Python 2 devra être compilé à l' aide de Python 3

Acheter une prise en charge étendue de Python 2 auprès d'un fournisseur

Une solution à long terme consiste à obtenir le soutien d'un fournisseur de solutions Python. ActiveState, créateur de la distribution ActivePython et de l'IDE Komodo, offre un support commercial aux clients qui souhaitent rester avec Python 2, ou qui souhaitent migrer vers Python 3 en identifiant les parties de leur pile Python qui doivent être réécrites en Python 3.

Certains fournisseurs fournissent un support pour Python 2 dans le cadre de sa présence dans un autre produit pris en charge. Les versions 6 et 7 de Red Hat Enterprise Linux incluent Python 2, de sorte que tout contrat de support acheté auprès de Red Hat pour ces versions du système d'exploitation inclura une prise en charge continue de Python 2 pendant toute la durée de vie du produit.

Si vous utilisez Python 2 via un service cloud, il est possible que le service continue à prendre en charge Python 2 à sa manière. AWS, par exemple, a déclaré qu'il fournirait des correctifs de sécurité pour son environnement d'exécution Python 2.7 jusqu'au 31 décembre 2020, bien que cela ne s'applique à aucun package Python 2.7 tiers.

Une troisième option consiste à acheter le soutien d'un cabinet de conseil ou d'un entrepreneur. Le niveau de soutien qu'ils vous apportent varie en fonction de vos besoins et de vos ambitions. Cela pourrait consister à proposer un plan de transition pour s'éloigner de Python 2 et à réécrire tout logiciel dépendant (probablement la meilleure stratégie à long terme), ou à fusionner manuellement les correctifs pour Python 2 dans une version personnalisée du runtime (ambitieux et complexe ).

Entretenez vous-même Python 2

Python est un projet open source. Rien ne vous empêche de mettre en œuvre vous-même les correctifs nécessaires. Si le correctif est une modification de la bibliothèque standard de Python, ce n'est généralement pas trop difficile, car la plupart de la bibliothèque standard Python est elle-même écrite en Python. Mais si vous devez apporter des modifications à un module C utilisé par Python dans la bibliothèque standard, ou à l'interpréteur CPython, ce serait plus difficile. Vous aurez besoin de connaître C et de vous familiariser avec les composants internes de CPython pour y parvenir.

Ne fais rien

Si ce n'est pas cassé, ne le réparez pas. C'est la stratégie utilisée par de nombreuses entreprises avec Windows NT et Windows 2000 lorsque ces systèmes d'exploitation sont arrivés en fin de vie. Les applications Python destinées à un usage interne uniquement et qui ne sont pas exposées à l'Internet public pourraient en théorie être exécutées indéfiniment.

Les machines virtuelles et la conteneurisation offrent des moyens de maintenir ces types d'applications bien en vie dans un environnement contrôlé. Vous pouvez «figer» une édition donnée du runtime Python 2 dans une image de conteneur ou une VM, ainsi que sa bibliothèque standard, les modules nécessaires à votre application et l'application elle-même.

Cela dit, toute application héritée, même celle qui n'a pas d'exposition externe, doit être réévaluée régulièrement. Dans tous les cas, la meilleure stratégie à long terme pour les utilisateurs de Python 2 est de migrer vers Python 3. Python 2, aussi formidable soit-il, est quelque chose à dépasser.

En savoir plus sur Python

  • Qu'est-ce que Python? Programmation puissante et intuitive
  • Qu'est-ce que PyPy? Python plus rapide sans douleur
  • Qu'est-ce que Cython? Python à la vitesse de C
  • Tutoriel Cython: Comment accélérer Python
  • Comment installer Python de manière intelligente
  • Les meilleures nouvelles fonctionnalités de Python 3.8
  • Meilleure gestion de projet Python avec Poetry
  • Virtualenv et venv: les environnements virtuels Python expliqués
  • Python Virtualenv et Venv à faire et à ne pas faire
  • Explication des threads et sous-processus Python
  • Comment utiliser le débogueur Python
  • Comment utiliser timeit pour profiler le code Python
  • Comment utiliser cProfile pour profiler le code Python
  • Démarrez avec async en Python
  • Comment utiliser asyncio en Python
  • Comment convertir Python en JavaScript (et inversement)
  • Python 2 EOL: Comment survivre à la fin de Python 2
  • 12 pythons pour chaque besoin de programmation
  • 24 bibliothèques Python pour chaque développeur Python
  • 7 IDE Python que vous avez peut-être manqués
  • 3 lacunes majeures de Python et leurs solutions
  • 13 frameworks Web Python comparés
  • 4 frameworks de test Python pour écraser vos bugs
  • 6 nouvelles fonctionnalités Python à ne pas manquer
  • 5 distributions Python pour maîtriser l'apprentissage automatique
  • 8 grandes bibliothèques Python pour le traitement du langage naturel