Makina Blog

Le blog Makina-corpus

Migrer une application de Python 2 à Python 3


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.

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.

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 !

Formations associées

Formations Python

Formation Python

À distance (FOAD) Du 29 janvier au 2 février 2024

Voir la formation

Formations Python

Formation Python avancé

Nantes Du 8 au 12 avril 2024

Voir la formation

Formations SIG / Cartographie

Formation Python pour l'analyse géospatiale

À distance (FOAD) 2, 4 et 5 avril 2024

Voir la formation

Actualités en lien

13/03/2019

Bien configurer ses tests Python avec tox et Travis

Le plus difficile dans le développement des tests unitaires c'est souvent de se motiver à écrire les premières lignes… Alors qu'une fois que c'est initié, ça devient très simple d'en ajouter. Nous verrons dans cet article de blog comment le faire rapidement avec tox et Travis !

Voir l'article
27/11/2015

Python : Bien configurer son environnement de développement

Comment utiliser les bonnes pratiques de développement Python.

Voir l'article
01/06/2015

Mythes et réalités des tests automatisés

Petit bestiaire des mythes autour des tests automatisés et des réalités correspondantes

Voir l'article

Inscription à la newsletter

Nous vous avons convaincus