Upgrading Django to a newer version

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

  • 添加了新功能和改进。
  • Bug是固定的。
  • 旧版本的Django最终将不再接收安全更新。 (请参阅Supported versions)。
  • 升级为每个新的Django版本可用,通过保持代码库更新,使未来的升级不那么痛苦。

这里有一些事情需要考虑,以帮助使您的升级过程尽可能顺利。

Required Reading

如果这是您首次升级,请阅读不同发布流程上的guide on the different release processes

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

  • 阅读每个“最终”版本的release notes,从当前的Django版本开始,直到并包括计划升级到的版本。
  • 查看相关版本的deprecation timeline

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

如果您通过多个功能版本(例如AB到A.B + 2)进行升级,通常可以轻松地将每个功能版本逐级升级(AB到A.B + 1到A.B + 2),而不是立即对每个功能部件进行所有更改。 对于每个功能版本,请使用最新的修补程序(A.B.C)。

在从一个LTS升级到下一个LTS时,建议使用相同的增量升级方法。

Dependencies

在大多数情况下,还需要升级到与Django相关的依赖项的最新版本。 如果Django版本是最近发布的,或者如果你的一些依赖项没有得到很好的维护,你的一些依赖项可能还不支持新的Django版本。 在这些情况下,您可能必须等到新版本的依赖项释放。

解决废弃警告

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

在Python中,默认情况下,弃用警告将被静默。 您必须使用-Wall Python命令行选项或 PYTHONWARNINGS环境变量来打开它们。 例如,在运行测试时显示警告:

$ python -Wall manage.py test

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

$ PYTHONWARNINGS=all py.test tests --capture=no

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

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

Installation

准备好后,即可install the new Django version 如果您使用virtualenv并且是主要升级,您可能需要首先设置一个包含所有依赖项的新环境。

您需要执行哪些步骤取决于您的安装过程。 最方便的方法是使用pip-U--upgrade标志:

$ pip install -U Django

pip也会自动卸载先前版本的Django。

如果您使用其他安装过程,则可能需要手动uninstall the old Django version,并应查看完整的安装说明。

Testing

当新环境设置完成后,run the full test suite 再次,打开废弃警告是有用的,因此它们显示在测试输出中(如果您使用manage.py runserver手动测试应用程序,也可以使用该标志 T2> T0>):

$ python -Wall manage.py test

运行测试后,修复任何故障。 虽然您的发布说明是新鲜的,但也可以通过重构代码来消除任何弃用警告,从而充分利用Django中的新功能。

Deployment

当您充分确信自己的应用与新版本的Django配合使用后,即可开始使用deploy您升级的Django项目。

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