Обновление Django до более новой версии

Хотя иногда это может быть сложным процессом, обновление до последней версии Django имеет ряд преимуществ:

  • Добавляются новые функции и улучшения.
  • Ошибки исправлены.
  • Более старая версия Django со временем перестанет получать обновления безопасности. (см. Поддерживаемые версии).
  • Обновление по мере выхода каждого нового релиза Django делает будущие обновления менее болезненными, поддерживая вашу кодовую базу в актуальном состоянии.

Вот некоторые моменты, которые следует учитывать, чтобы сделать процесс обновления максимально гладким.

Обязательное чтение

Если вы впервые выполняете обновление, полезно прочитать guide on the different release processes.

После этого вы должны ознакомиться с изменениями, которые были внесены в новую версию (версии) Django:

  • Прочитайте release notes для каждого «финального» релиза, начиная с того, который идет после вашей текущей версии Django, до версии, до которой вы планируете перейти.
  • Посмотрите deprecation timeline для соответствующих версий.

Уделите особое внимание обратно несовместимым изменениям, чтобы получить четкое представление о том, что потребуется для успешного обновления.

Если вы обновляете более одной функциональной версии (например, с 2.0 до 2.2), обычно проще обновлять каждую функциональную версию постепенно (2.0 - 2.1 - 2.2), чем вносить все изменения для каждой функциональной версии сразу. Для каждого функционального выпуска используйте последний выпуск патча (например, для 2.1 используйте 2.1.15).

При переходе с одной LTS на другую рекомендуется использовать тот же подход постепенного обновления.

Зависимости

В большинстве случаев необходимо обновить до последней версии и ваши зависимости, связанные с Django. Если версия Django была выпущена недавно или если некоторые из ваших зависимостей не очень хорошо поддерживаются, некоторые из ваших зависимостей могут еще не поддерживать новую версию Django. В таких случаях вам, возможно, придется подождать, пока не выйдут новые версии ваших зависимостей.

Разрешение предупреждений об износе

Перед обновлением, хорошей идеей будет устранить все предупреждения об устаревании, выданные вашим проектом при использовании текущей версии Django. Исправление этих предупреждений перед обновлением гарантирует, что вы будете информированы о тех областях кода, которые нуждаются в изменении.

В Python предупреждения об износе по умолчанию не слышны. Вы должны включить их с помощью опции командной строки Python -Wa или переменной окружения PYTHONWARNINGS. Например, чтобы показать предупреждения во время выполнения тестов:

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

Если вы не используете бегунок тестирования Django, вам может понадобиться убедиться, что не перехватывается консольный вывод, который скрывает предупреждения об износе. Например, если вы используете pytest:

$ PYTHONWARNINGS=always pytest tests --capture=no

Устраните все предупреждения об устаревании в вашей текущей версии Django, прежде чем продолжить процесс обновления.

Сторонние приложения могут использовать устаревшие API для поддержки нескольких версий Django, поэтому предупреждения об устаревании в установленных вами пакетах не обязательно указывают на проблему. Если пакет не поддерживает последнюю версию Django, подумайте о том, чтобы поднять проблему или отправить запрос на исправление.

Установка

Как только вы будете готовы, настанет время install the new Django version. Если вы используете virtual environment и это серьезное обновление, возможно, вы захотите сначала установить новое окружение со всеми зависимостями.

Если вы установили Django с помощью pip, вы можете использовать флаг --upgrade или -U:

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

Тестирование

Когда новое окружение будет установлено, run the full test suite для вашего приложения. Опять же, полезно включить предупреждения об износе, чтобы они отображались в тестовом выводе (вы также можете использовать этот флаг, если вы тестируете свое приложение вручную, используя manage.py runserver):

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

После выполнения тестов исправьте все ошибки. Пока у вас в памяти свежи заметки о релизе, самое время воспользоваться преимуществами новых возможностей Django, рефакторингом кода, чтобы устранить предупреждения об устаревании.

Развертывание

Когда вы будете достаточно уверены в том, что ваше приложение работает с новой версией Django, вы будете готовы продолжить и deploy ваш обновленный проект Django.

Если вы используете кэширование, предоставляемое Django, вам следует подумать об очистке кэша после обновления. В противном случае вы можете столкнуться с проблемами, например, если вы кэшируете pickled объекты, так как эти объекты не гарантируют совместимость с pickle в разных версиях Django. В прошлом примером несовместимости было кэширование pickled объектов HttpResponse, прямо или косвенно через декоратор cache_page().

Вернуться на верх