如何将 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()
装饰器间接缓存。