• en
  • Langue : fr

Mise à jour de Django à une version plus récente

Même si le processus peut être parfois un peu complexe, la mise à jour de Django à sa dernière version présente plusieurs avantages :

  • De nouvelles fonctionnalités et améliorations ont été ajoutées.

  • Des bogues ont été corrigés.

  • Les versions plus anciennes de Django ne reçoivent plus de mises à jour de sécurité après un certain temps (voir Supported versions).

  • En mettant à jour Django lors de chaque nouvelle publication, vous vous facilitez le travail sur les mises à jour suivantes car votre code reste toujours à jour.

Voici quelques éléments à considérer pour rendre le processus de migration aussi agréable que possible.

Lecture conseillée

S’il s’agit de votre première mise à jour, il est utile de lire le guide sur les différents processus de publication.

Après cela, nous vous suggérons de vous familiariser avec les modifications qui ont été apportées dans la nouvelle version de Django :

  • Lisez les notes de publication de chaque version « finale » suivant votre version actuelle de Django, jusqu’à la version vers laquelle vous pensez effectuer la mise à jour.

  • Examinez la planification d’obsolescence pour les versions concernées.

Prêtez une attention particulière aux modifications non rétrocompatibles pour avoir une bonne vision de ce qui sera nécessaire pour une mise à jour réussie.

Dépendances

Dans la plupart des cas, il sera aussi nécessaire de mettre à jour à la dernière version des dépendances Django. Si la version de Django a été publiée récemment ou si certaines de vos dépendances ne sont pas bien maintenues, il est possible que certaines dépendances ne prennent pas encore en charge la nouvelle version de Django. Dans ce cas, il se peut que vous deviez patienter jusqu’à ce que de nouvelles versions de vos dépendances aient été publiées.

Installation

Quand vous êtes prêt, c’est le moment d’installer la nouvelle version de Django. Si vous utilisez virtualenv et qu’il s’agit d’une mise à jour majeure, il peut être souhaitable de créer d’abord un nouvel environnement contenant toutes les dépendances.

Les étapes précises à suivre dépendent du processus d’installation. La façon la plus pratique est d’utiliser pip avec l’option --upgrade ou -U:

$ pip install -U Django

pip désinstalle aussi automatiquement la version précédente de Django.

Si vous utilisez un autre processus d’installation, vous devrez certainement désinstaller manuellement l’ancienne version de Django ; consultez alors les instructions d’installations complètes.

Tests

Lorsque le nouvel environnement est installé, lancez la suite de tests complète de votre application. Avec Python 2.7+, les avertissements d’obsolescence sont silencieux par défaut. Il est utile d’activer ces avertissements pour qu’ils apparaissent dans les résultats des tests (vous pouvez aussi utiliser le drapeau si vous testez votre application manuellement avec manage.py runserver) :

$ python -Wall manage.py test

Après avoir exécuté les tests, corrigez les éventuelles erreurs. Un conseil : profitez du fait que les notes de publication sont encore fraîches dans votre mémoire pour mettre à jour votre code en tirant avantage des nouvelles fonctionnalités de Django et en éliminant ainsi d’éventuels avertissements d’obsolescence.

Déploiement

Si vous êtes suffisamment confiant dans le bon fonctionnement de votre application avec la nouvelle version de Django, vous êtes prêt à aller de l’avant et à déployer votre projet Django mis à jour.

Si vous utilisez de la mémoire tampon (cache) fournie par Django, il est conseillé de vider cette mémoire après la mise à jour. Sinon, des problèmes peuvent apparaître. Par exemple, si des objets bruts (« pickled ») sont en mémoire tampon, il n’est pas garanti que ces objets puissent être reconstruits, car ce format brut n’est pas toujours compatible d’une version de Django à une autre. Un problème d’incompatibilité connu du passé concernait les objets bruts HttpResponse en mémoire tampon, directement ou indirectement via le décorateur cache_page().

Back to Top