将 Django 升级到新版本 — Django 文档

来自菜鸟教程
Django/docs/3.2.x/howto/upgrade-version
跳转至:导航、​搜索

将 Django 升级到新版本

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

  • 添加了新功能和改进。
  • 错误是固定的。
  • 旧版本的 Django 最终将不再接收安全更新。 (请参阅 支持的版本 )。
  • 在每个新的 Django 版本可用时进行升级,通过保持您的代码库最新,可以减少未来升级的痛苦。

以下是一些需要考虑的事项,以帮助您的升级过程尽可能顺利。

必读

如果这是您第一次进行升级,阅读有关不同发布过程 指南会很有用。

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

  • 阅读 发行说明 ,了解当前 Django 版本之后的每个“最终”版本,直到并包括您计划升级到的版本。
  • 相关版本查看【X12X】弃用时间线【X36X】。

特别注意向后不兼容的更改,以清楚了解成功升级所需的内容。

如果您要升级多个功能版本(例如 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 环境变量打开它们。 例如,要在运行测试时显示警告:

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

$ PYTHONWARNINGS=always pytest tests --capture=no

在继续升级过程之前,使用当前版本的 Django 解决任何弃用警告。

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


安装

准备就绪后,就可以 安装新的 Django 版本 。 如果您使用的是 virtual environment 并且这是一次重大升级,您可能需要先设置一个包含所有依赖项的新环境。

如果您使用 pip 安装 Django,则可以使用 --upgrade-U 标志:


测试

设置新环境后, 为您的应用程序运行完整的测试套件 。 同样,打开弃用警告很有用,以便它们显示在测试输出中(如果您使用 manage.py runserver 手动测试您的应用程序,您也可以使用该标志):

运行测试后,修复所有故障。 虽然您对发行说明记忆犹新,但现在也可能是通过重构代码来消除任何弃用警告来利用 Django 中的新功能的好时机。


部署

当您有足够的信心您的应用程序可以与新版本的 Django 配合使用时,您就可以继续并 部署 升级后的 Django 项目。

如果您使用的是 Django 提供的缓存,则应考虑在升级后清除缓存。 否则你可能会遇到问题,例如,如果你正在缓存 pickle 对象,因为这些对象不能保证在 Django 版本中兼容 pickle。 过去的不兼容实例是通过 cache_page() 装饰器直接或间接缓存腌制的 HttpResponse 对象。