R.I.P Python 2 - longue vie à Python 3 !

Grâce à Docker et à l'apport du langage GO, notre voyage de Python 2.7 vers Python 3 aura été somme toute aussi paisible que passionnant.

par Jordi Riera - 12 septembre 2019

NUMIGI a commencé son activité en mars 2018 et, à cette époque, deux versions du langage de programmation Python cohabitaient — Python 2.7 et Python 3. Notre expérience était principalement sur la version 2. Mais le chevalier Monthy (alias la Python Software Foundation) annonçait récemment que Python 2.7 ne serait plus supporté au début 2020. Alors, que faire?

En 2018, il nous fallait les deux versions car nous supportions des installations Odoo 10 (Python 2.x), et des systèmes Odoo 11 (Python 3) étaient en cours d'implémentation. Nos machines virtuelles (VM) étaient des systèmes CentOS avec du Python 2.7. Nous n'avions pas le choix,  mais nous voyions déjà notre ami "dette technique" pointer le bout de son nez. Nous devions être prévoyants.

Cette situation nous a mené à un second choix* qui allait nous aider pour la suite de notre voyage. David et moi étions d'accord — tout (ou presque) devrait dorénavant tourner dans des conteneurs d'applications. De cette façon, nous isolons nos services et pouvons évoluer de façon modulaire.

* Nous aurions pu faire tourner des python3 dans des Virtualenv, mais la complexité que cela créé nous a refroidi, à l'époque.

Tout ceci se passait durant les premiers mois de NUMIGI. Peu à peu, nous avons ensuite migré nos clients vers des Odoo 11 ou 12. Python 2.7 n'étant plus une obligation, la traversée vers Python 3 pouvait commencer.

De Python 2 à Python 3: quelles solutions ?

 

Nous connaissions nos services sous Python 2. Quelles solutions pour les faire évoluer ?

Nous aurions pu les faire passer à Python 3 uniquement — mais où aurait été le fun dans ça?!? De plus, nous avions revu notre pipeline pour que tout ce qui tourne sur les VM soit porté dans des conteneurs Docker, ce qui permet d'en contrôler facilement l'environnement. Le choix s'offrait donc à nous.

Python 3 et Javascript étant déjà dans la place, nous avons introduit Go dans notre code base. Ce langage de programmation développé par Google permet de créer des binaires autonomes qui demandent rien de plus que de copier le fichier sur le serveur pour fonctionner. Nous l'avons donc testé.

Les migrations sont plus faciles quand un ange gardien valide ton travail. Ainsi, toutes nos librairies sont soumises à un grand nombre de tests nous permettant de les maintenir. Nous en avions effectué plus 230,000 en mars 2019, soit après 12 mois d'activité. Six mois plus tard, le cap des 600,000 tests roulés est dépassé, ce qui représente 370,000 tests supplémentaires en 6 mois!

Récemment, David a donné le coup fatal. Python 2.7 est désormais rayé de la carte chez NUMIGI. Le voyage s'est effectué par étape et a été vraiment passionnant. Une première dans mes 13 ans d'expérience, en fait. Merci pour tout, py27!

Conseils et commentaires

Avec le recul, si j'osais donner un conseil à ceux qui pensent effectuer cette migration, je recommanderais de commencer par la mise en place de tests et d'un pipeline d'intégration continue. Les tests permettent d'être serein et nous parlerons bientôt de comment vendre le réusinage de code au business.

Et vous, comment se passe votre migration de Python 2 vers Python 3? Avez-vous des recettes à partager? Pour en parler, signalez-vous sur Linkedin ou Twitter. 😃