Come aggiornare Django ad una nuova versione

Mentre può essere a volte un processo complesso, aggiornare all’ultima versione di Django ha alcuni benefici:

  • Nuove features e miglioramenti sono aggiunti

  • Bugs e fix.

  • La versione precedente di Django potrebbe non ricevere più aggiornamenti di sicurezza. (vedi Supported versions).

  • Aggiornando ogni qualvolta un nuovo rilascio di Django è disponibile rende i futuri aggiornamenti meno doloroso mantenendo aggiornato il tuo codice.

Qui ci sono alcune cose da considera per aiutarti a completare il processo di upgrade nel modo più facile possibile.

Letture richieste

Se è la prima volta che fai un aggiornamento, è utile leggere la guida sui diversi processi di rilascio.

Successivamente, dovresti familiarizzare con le modifiche apportate alla/e nuova/e versione/i di Django:

  • Leggi le note di rilascio per ogni rilascio “final” da quella corrente di Django, fino ad includere la versione alla quale pianifichi di fare l’upgrade.

  • Guarda la deprecation timeline per le versioni più rilevanti.

Presta particolare attenzione ai cambiamenti che introducono incompatibilità all’indietro per avere un’idea chiara di cosa sarà necessario per un aggiornamento di successo.

Se stai aggiornando tra più di una versione (per es. da 2.0 a 2.2), generalmente è più facile fare upgrade incrementalmente di release in release (dalla 2.0 alla 2.1, alla 2.2…) piuttosto che fare tutti i cambiamenti per ogni release assieme. Per ogni release futura, usa l’ultima patch di rilascio (per es. per 2.1, usa 2.1.15).

Lo stesso approccio di aggiornamenti incrementali è raccomandato quando si aggiorna da una LTS alla successiva.

Dipendenze

Il molti casi sarà necessario aggiornare all’ultima versione delle tue dipendenze collegate a Django. Se la versione di Django è stata rilasciata recentemente o alcune delle tue dipendenze non sono ben manutenute, alcune delle tue dipendenze potrebbero non supportarla. In questi casi devi aspettare che siano rilasciate nuove versioni delle tue dipendenze.

Risolvere i warning delle deprecation

Prima dell’upgrade, è una buona idea risolvere ogni segnalazione di errore per parti deprecate nel tuo progetto mentre stai utilizzando la versione corrente di Django Sistemare questi errori prima dell’aggiornamento ti assicura la conoscenza delle aree del codice che hanno bisogno di essere modificate.

In Python, i warning di deprecazione sono silenziati di default. Devi abilitarli con l’opzione -Wa in command line o la variabile d’ambiente PYTHONWARNINGS. Per esempio, per mostrare i warning mentre si lanciano i test:

$ python -Wa manage.py test
...\> py -Wa manage.py test

Se non stai usando il test runner di Django, potresti aver bisogno di assicurare che l’output della console non sia catturato per evitare di nascondere i warning di deprecazione. Per esempio, se usi pytest:

$ PYTHONWARNINGS=always pytest tests --capture=no

Risolvi eventuali avvisi di deprecazione con la versione corrente di Django prima di continuare il processo di aggiornamento.

Applicazioni di terze parti potrebbero usare APi deprecate per supportare più versioni di Django, quindi i warning di deprecazione in package che hai installato non indicano necessariamente un problema. Se un package non supporta l’ultima versione di Django, considera di sollevare una issue o di mandare una pull request.

Installazione

Una volta che sei pronto, è tempo di installare la nuova versione di Django. Se stai usando un virtual environment ed è un aggiornamento major, potresti volere prima approntare un nuovo ambiente con tutte le dipendenze.

Se hai installato Django con pip, puoi usare il flag --upgrade o -U:

$ python -m pip install -U Django
...\> py -m pip install -U Django

Testing

Quando il nuovo ambiente è pronto, lancia l’intera suite di test per la tua applicazione. Di nuovo, è utile abilitare i warning di deprecazione così che siano mostrati negli output dei test (puoi anche usare il flag se testi la tua app manualmente con manage.py runserver):

$ python -Wa manage.py test
...\> py -Wa manage.py test

Dopo aver lanciato i test, fai le correzioni. Mentre hai le note di rilascio fresche nella mente, può essere un buon momento per avvantaggiarsi delle nuove feature in Django rifattorizzando il codice per eliminare ogni warning di deprecazione.

Deployment

Quando sei sufficientemente sicuro che la tua app funzioni con la nuova versione di Django, sei pronto per andare avanti e deploy il tuo progetto Django aggiornato.

Se stai utilizzando il caching offerto da Django, dovresti considerare di pulire la cache dopo l’upgrade. Altrimenti potresti incappare in probblemi, per esempio, se stai mettendo in cache oggetti pickled perchè questi oggetti non sono garantiti essere pickle-compatibili tra versioni di Django. Un caso passato di incompatibilità era la memorizzazione nella cache degli oggetti HttpResponse, sia direttamente che indirettamente tramite il decoratore cache_page().

Back to Top