Makina Blog

Le blog Makina-corpus

Comment migrer vers une version récente de Django ?


Que ce soit pour avoir les dernières fonctionnalités ou les correctifs de sécurité, rester sur une version récente de Django est important pour la pérennité de son projet.

Les versions de Django ne sont pas supportées éternellement. Les versions LTS (Long Term Support) sont maintenues pendant 3 ans, tandis que les autres versions sont maintenues un peu plus d'un an à peine. On peut également avoir besoin d'une nouvelle fonctionnalité, ou alors les modules que l'on utilise ne fonctionnent plus avec une version de Django plus ancienne.

Dans tous les cas, il est important de prévoir dès le début de pouvoir migrer son code vers une version plus récente de Django.

Les bases

Django explique très bien dans sa documentation comment faire.

Je rajouterai juste une étape : s'assurer que son application a des tests unitaires couvrant la majorité du code.

Pour résumer, les étapes sont les suivantes :

  • Mettre à jour les dépendances de son projet hors Django

Cela inclut la version de Python, de la base de données, des modules Django… Si certains modules ne sont pas encore compatibles, alors il faut vérifier si la migration de version est possible à faire soi-même ou s'il est nécessaire de changer complètement de dépendance (certains projets ne sont plus suivis et prendre le temps d'en prendre un maintenu régulièrement sera beaucoup plus rentable sur le long terme).

  • Faire tourner les tests unitaires en activant les warnings :
python -Wa manage.py test
  • Corriger tous les warnings d'obsolescence
  • Bien regarder les changements incompatibles entre les versions

Ceux-ci peuvent être trouvés dans les notes de la version, en bas. Par exemple les changements incompatibles dans la 1.8.

  • Mettre à jour Django :
python -m pip install -U Django
  • Le format de certains settings peut changer. Pour vérifier la syntaxe de la nouvelle version, on peut instancier un nouveau site Django avec cette version pour voir le fichier de settings par défaut
  • Refaire tourner ses tests et corriger les erreurs

Les fonctionnalités obsolètes sont indiquées dans les notes de mises à jour. Par exemple pour la 1.8. On trouvera également les fonctionnalités obsolètes supprimées dans cette version.

Tout cela fonctionne bien lorsque l'on a seulement quelques versions de retard. On préférera quand même mettre régulièrement à jour notre projet pour éviter d'avoir trop de travail d'un coup, même si ce n'est pas toujours possible, comme on le verra dans la suite.

La liste complète des notes de mise à jour est disponible sur le site de Django.

Dans la pratique

En pratique, il faudra déjà faire un choix. L'application va-t-elle être maintenue régulièrement et peut-on donc installer toutes les versions de Django (LTS et versions intermédiaires) ? Ou au contraire faut-il mieux viser les LTS uniquement pour avoir une base plus stable et moins de montées de versions à faire ?

Ensuite, tout dépend de la version de Django actuelle de notre projet. Les versions en dessous de la 1.11 sont en général plus complexes, car de nombreuses fonctionnalités ont été développées sur ces versions.

De manière générale, il est conseillé de faire les mises à jours par palier, de LTS en LTS. Le passage à la 2.0 est un peu spécial car c'est la première version à ne plus supporter Python 2. Les montées de version seraient donc à faire dans l'ordre suivant :

  • Django < 1.8 => Django 1.8
  • Django 1.8 => Django 1.11
  • Python 2 => Python 3
  • Django 1.11 => Django 2.0
  • Django 2.0 => Django 2.2
  • Django 2.2 => Django 3.2
  • Django 3.2 => Django 4.2
  • ...

Cela sans oublier de faire suivre les dépendances à chaque étape. Il faudra parfois prendre une version plus ancienne de la dépendance, la dernière version n'étant pas compatible avec la version cible de Django.

Il est parfois compliqué de trouver la bonne version, dans ce cas, il faudra penser à regarder les notes de version ou les dates de sorties des versions de la dépendance en question. Une nouvelle version de Django étant souvent rapidement suivie par la sortie de dépendances compatibles, pour les modules qui sont maintenus convenablement.

En cas de difficulté, il ne faut pas hésiter à passer par des versions de Django intermédiaire.

Désormais vous n'avez désormais plus d'excuse pour garder votre vielle version de Django !

Retrouvez nos Formation Django ainsi que nos Réalisations Django.

Formations associées

Django

Django initiation

Toulouse Du 17 au 19 octobre 2022

Voir la formation

Django

Django avancé

A distance (foad) Du 7 au 9 novembre 2022

Voir la formation

Django

Django intégration

A distance (foad) Le jeudi 3 novembre 2022

Voir la formation

Actualités en lien

Image
DjangoCon Europe 2022
12/09/2022 - 13:54

DjangoCon Porto 2022 : Mise en œuvre du Domain-driven design (DDD) dans Django

Dans le cadre de la conférence DjangoCon Europe 2022 à Porto, du 21 au 25 septembre, nous présenterons notre retour d'expérience sur l'intégration de quelques concepts DDD dans OSIS, un projet open-source chez notre partenaire l'UCLouvain.

Voir l'article
Image
Randonnée
06/09/2022 - 09:43

Créer des vues SQL dans Django et les afficher dans un SIG

Nous allons décrire un processus via la mise en place de vues SQL qui permettent à l'utilisateur de lire de la donnée formatée, sans possibilité d'influer sur le contenu d'une base et tout en se connectant directement à celle-ci.

Voir l'article
Image
Django logo
20/06/2022 - 09:46

Cas d'utilisation : développer des packages Django réutilisables pour l'UCLouvain

Pour prester dans la philosophie du libre et répondre à la demande de l'UCLouvain, nos équipes ont développé des packages Django réutilisables

Voir l'article

Inscription à la newsletter

Nous vous avons convaincus