• 3.1
  • 3.2
  • 5.0
  • Версия документации: 6.1

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

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

  • Добавление новой функциональности и различных улучшений

  • Закрытие старых багов

  • Наконец, устаревающие версии Django со временем перестают получать обновления безопасности. (см. backwards-compatibility-policy).

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

Tools to help with version upgrades

Django has a vibrant ecosystem. There are automated upgrade helpers highlighted on the Community Ecosystem page.

Ниже изложено несколько вещей, призванных сделать обновление настолько мягким, насколько это вообще возможно.

Обязательно к прочтению

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

Впоследствии вы можете ознакомиться с изменениями, которые были сделаны в новых версиях(версии) Django:

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

  • Взгляните на срок поддержки интересующей вас версии.

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

Если вы обновляетесь более чем на несколько версий (например с A.B до A.B+2), обычно проще обновлять версию за версией (с A.B до A.B+1, затем A.B+2), чем до последней версии сразу. Для каждой версии используйте последнюю минорную версию (A.B.C).

Аналогичный подход рекомендуется при обновлении с одной LTS версии до следующей.

Зависимости

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

Исправление предупреждений об устаревании(deprecation warning)

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

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

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

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

$ PYTHONWARNINGS=always pytest tests --capture=no

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

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

Установка

Теперь пора перейти к установке новой версии Django. Если вы работаете с virtualenv_ и предстоит крупное обновление, можете сначала установить новое окружение со всеми связанными с Django пакетами.

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

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

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

После настройки нового виртуального окружения запустите набор тестов, чтобы проверить ваши приложения. Полезно включить вывод предупреждений, чтобы отображать такие сообщения при тестировании (также можно протестировать приложение вручную при запуске manage.py runserver):

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

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

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

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

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

Back to Top