如何将 Django 升级到较新版本

虽然有时这是一个复杂的过程,但升级到最新 Django 版本有很多好处

  • 添加了新功能和改进。

  • 修复了错误。

  • 旧版本的 Django 最终将不再接收安全更新。(参见 受支持的版本)。

  • 在每个新的 Django 版本发布时进行升级,可以通过保持代码库最新来使将来的升级不那么痛苦。

以下是一些可以帮助您使升级过程尽可能顺利的注意事项。

必读

如果这是您第一次进行升级,建议阅读 不同发布流程指南

之后,您应该熟悉在新 Django 版本中所做的更改

  • 阅读从您当前 Django 版本后的第一个版本到您计划升级到的版本(包括该版本)每个“最终”版本的 发行说明

  • 查看相关版本的 弃用时间表

特别注意向后不兼容的更改,以便清楚地了解成功升级需要什么。

如果您要升级多个功能版本(例如,从 2.0 升级到 2.2),通常更容易逐步升级每个功能版本(从 2.0 升级到 2.1,再升级到 2.2),而不是一次性进行所有功能版本的更改。对于每个功能版本,请使用最新的补丁版本(例如,对于 2.1,请使用 2.1.15)。

从一个 LTS 版本升级到下一个 LTS 版本时,也建议采用这种增量升级方法。

依赖项

在大多数情况下,还需要升级到最新版本的 Django 相关依赖项。如果 Django 版本最近发布,或者您的某些依赖项维护不佳,则某些依赖项可能还不支持新的 Django 版本。在这种情况下,您可能需要等到发布新版本的依赖项。

解决弃用警告

在升级之前,最好解决使用当前 Django 版本时项目引发的任何弃用警告。在升级之前修复这些警告可以确保您了解需要更改的代码区域。

在 Python 中,弃用警告默认情况下会被静默处理。您必须使用 -Wa Python 命令行选项或 PYTHONWARNINGS 环境变量来启用它们。例如,要在运行测试时显示警告

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

如果您不使用 Django 测试运行器,您可能还需要确保没有捕获任何控制台输出,否则会隐藏弃用警告。例如,如果您使用 pytest

$ PYTHONWARNINGS=always pytest tests --capture=no

在继续升级过程之前,请解决当前 Django 版本中的所有弃用警告。

第三方应用程序可能会使用已弃用的 API 来支持多个版本的 Django,因此您安装的软件包中的弃用警告并不一定表示存在问题。如果某个软件包不支持最新版本的 Django,请考虑提出问题或发送拉取请求。

安装

准备好后,就可以 安装新的 Django 版本 了。如果您使用的是 虚拟环境 并且这是一个主要升级,您可能需要先创建一个包含所有依赖项的新环境。

如果您使用 pip 安装了 Django,您可以使用 --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 提供的缓存,则应考虑在升级后清除缓存。否则,您可能会遇到问题,例如,如果您正在缓存腌制对象,因为这些对象不能保证在 Django 版本之间兼容腌制。过去的一个不兼容实例是缓存腌制的 HttpResponse 对象,无论是直接还是通过 cache_page() 装饰器间接缓存。

返回顶部