如何将Django升级到更新版本

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

  • 新增功能和改进。

  • 错误是固定的。

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

  • 由于每个新的django版本都可用,所以通过保持代码库的最新状态,将来的升级就不那么麻烦了。

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

必读

如果这是您第一次进行升级,那么阅读 guide on the different release processes .

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

  • 阅读 release notes 对于当前django版本之后的每个“最终”版本,包括计划升级到的版本。

  • 看看 deprecation timeline 对于相关版本。

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

如果您要通过多个功能版本(例如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,请考虑提出问题或发送请求。

安装

一旦你准备好了,是时候 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提供的缓存,则应考虑在升级后清除缓存。否则,您可能会遇到问题,例如,如果您缓存的是pickle对象,因为这些对象不能保证在django版本之间是pickle兼容的。以前的不兼容实例正在缓存pickle HttpResponse 对象,直接或间接通过 cache_page() 装饰符。