Accueil / Blog / Métier / 2020 / Migrer une application de Python 2 à Python 3

Migrer une application de Python 2 à Python 3

Par Yann Fouillat — publié 21/07/2020
Le support de Python 2 est officiellement terminé, c'est le moment de passer vos applications à Python 3 ! Voici quelques conseils pour réussir cette migration.
Migrer une application de Python 2 à Python 3

Le moyen le plus simple de migrer votre projet de Python 2 à Python 3 est d'utiliser le script 2to3.

Attention, veillez à ce que l’exécution de votre programme ne soit pas modifiée.

À faire avant la migration 2to3

Dans un premier temps la mise en place des tests unitaires est importante afin de s'assurer que l'intégralité de son application fonctionne une fois la migration effectuée.

Ensuite, mettez à jour vos dépendances pour n'avoir que des dépendances compatibles avec Python 3. La plupart du temps, des versions compatibles à la fois Python 2 et Python 3 existent.

Pour simplifier la migration, l'utilisation du module __future__ est recommandée pour avoir un comportement le plus proche possible de Python 3 (à placer dans chaque fichier .py du projet).

from __future__ import division, absolute_import, unicode_literals

2to3

L'utilisation du script est simple. Ainsi, pour convertir un fichier de Python 2 à Python 3, il suffit de faire :

2to3 -w example.py

Il est également possible de passer directement un dossier :

2to3 -w src

Depuis Python 3.2.3, une nouvelle option permet de convertir le code dans un nouveau dossier, ce qui permet de facilement comparer les deux versions du code :

2to3 --output-dir=python3-version/src -W -n python2-version/src

À faire après la migration 2to3

Tout d'abord, passer sur tous les changements réalisés et les comprendre ! Certains changements ne sont pas toujours nécessaires pour le bon fonctionnement de l'application mais ceux-ci ont pu être réalisés pour garder le même comportement entre Python 2 et Python 3.

Par exemple, en Python 2 la plupart des méthodes de dictionnaire -dict.values, dict.items, etc. - retournent une liste. Cela n'est plus le cas en Python 3, ces méthodes deviennent des générateurs et retournent donc des itérateurs. Ainsi, 2to3 convertit le code suivant :

# Python 2
for value in my_dict.values():
    pass

En :

# Python 3
for value in list(my_dict.values()):
    pass

Cela correspond strictement à la même chose. Mais le fait de convertir en liste n'est absolument pas nécessaire dans ce cas de figure. Donc list() peut sans souci être enlevée, cela rend le code moins lourd et plus maintenable.

Une fois le code relu, n'hésitez pas à mettre à jour les dépendances vers une version compatible uniquement Python 3, tant que cela ne demande pas de modifier trop le code existant de l'application. Il est toujours préférable d'avoir des dépendances le plus à jour possible. Cependant, le temps nécessaire pour les mettre à jour en cas de changement d'API de la dépendance n'est pas forcément facile à estimer ainsi cela se fait souvent au cas par cas.

Bien sûr, n'oubliez pas de faire passer les tests unitaires à chaque étape. Certains changements de comportements pourront poser un problème, les tests permettent de détecter ce dernier. Voici des exemples de changements de comportements :

  • le passage de toutes les chaînes en unicode par défaut.
  • open qui ouvre désormais les fichiers en mode texte et non en mode binaire par défaut.
  • la méthode __unicode__ remplacée par la méthode __str__
  • Etc.

Vous avez désormais toutes les clés en main pour réussir votre migration de Python 2 vers Python 3 !

Article en lien

ABONNEZ-VOUS À LA NEWSLETTER !
Voir aussi
Machine Learning : classer automatiquement vos données à l'import Machine Learning : classer automatiquement vos données à l'import 20/03/2018

Comment utiliser des algorithmes de machine learning pour importer correctement des données dans ...

Utilisation de la vision par ordinateur pour redresser des images Utilisation de la vision par ordinateur pour redresser des images 14/05/2019

Dans un module de comparaison d'images, lorsque deux photographies ne sont pas cadrées de la même ...

Bien configurer ses tests Python avec tox et Travis Bien configurer ses tests Python avec tox et Travis 18/03/2019

Le plus difficile dans le développement des tests unitaires c'est souvent de se motiver à écrire ...

Découvrez la formation initiation au Python Scientifique Découvrez la formation initiation au Python Scientifique 24/11/2017

La formation initiation au Python scientifique vous permettra de vous initiez à la programmation ...

Formation Python à Nantes du 10 au 12 décembre Formation Python à Nantes du 10 au 12 décembre 13/11/2018

Vous êtes développeur et maîtrisez déjà un langage de programmation ? Python vous tente et ...