升级到新的python版本是一种工作,但这种工作不一定会让你的软件用户受益, 因为用户关心的是功能和错误修复,而不是你的更新程度。

所以,仍有许多人使用 Python 3.7 并不奇怪, 截至 2022 年 12 月,从 PyPI 下载的包中有近 30% 是针对 Python 3.7 的, 这包括作为 CI 运行一部分的自动下载,所以这并不意味着 30% 的应用程序使用 3.7,但这仍然是很多人使用旧版本 Python 的原因。

不过,你可以延迟升级的时间有限,对于 Python 3.7,升级时间是在接下来的几个月内, Python 3.7 将于 2023 年 6 月到期,到期后不再修复错误,也没有安全修复。

Python 3.7 于 2018 年 6 月发布。正如你在 PEP 537 中所见:

  • 错误修复和安全修复子版本在前两年每 3 个月发布一次。
  • 之后,仅根据需要发布安全修复程序。
  • 3.7 发布后 5 年将停止发布。

也就是说,2023 年 6 月是发布 Python 3.7 的最后一个月, 从 2023 年 7 月开始,如果存在安全漏洞,Python 开发团队将不再修复。

对安全修复的需求是真实的:3.7.9 之后的所有版本都是由于安全修复。撰写本文时的最新版本 Python 3.7.16 已于 2022 年 12 月 6 日发布,其中包含 5 个不同的安全修复程序,从潜在的拒绝服务攻击到缓冲区溢出。

一些 Linux 发行版保证在已知时间段内提供长期支持,包括安全错误修复, 如果你使用的是这些发行版之一,并且它包含 Python 3.7,那么你可以依赖该发行版来提供安全修复,即使 Python 开发团队不会这样做。

所以理论上,你还不需要升级, 但在实践中,有一些警告。

大多数发行版中不包含 Python 3.7

  • RedHat 和克隆版不在任何版本中包含 Python 3.7。
  • Ubuntu 18.04 确实有 Python 3.7 作为附加组件,但它是 universe 附加组件包的一部分,因此尚不清楚安全支持会有多好;据推测,universe 包安全更新依赖于社区更新, 最后一次安全更新是在 2021 年 12 月,较新的 LTS Ubuntu 版本(20.04、22.04)不包括 Python 3.7。
  • Debian 10(“Buster”)包括 Python 3.7,但 Debian 11 不包括。

Linux 发行版不会向后移植所有安全修复程序,只会向后移植那些最重要的:

  • 即使是现在,当 Python 维护者自己提供错误修复时,Python 3.7.16 也有许多安全修复没有包含在 Debian 维护的版本中。
  • Ubuntu 上一次针对 Python 3.7 的安全更新是在 2021 年 12 月,尽管此后已经进行了多次安全更新。

当然,长期支持只会持续有限的时间:

  • Debian Buster 将于 2024 年 6 月结束其自身的安全更新,因此这只会让你多花一年时间。
  • Ubuntu 18.04 将于 2023 年 4 月结束标准安全更新;之后,你需要付费才能获得安全更新。

你的依赖项将停止获取更新

一旦 6 月到来,第三方 Python 库和框架将开始放弃对 Python 3.7 的支持, 这意味着如果这些库有一个严重的错误,修复程序可能无法在 Python 3.7 上使用,并且你的 Linux 发行版不会为每个现有的 Python 库做反向移植。

事实上,一些库和框架已经开始放弃对 Python 3.7 的支持:

Package

Latest version supports 3.7?

Last release supporting 3.7

NumPy

No

April 2022

Pandas

No

December 2021

Django 4.x

No

Never supported

Django 3.2 LTS 仍然支持 Python 3.7,并将在 2024 年 4 月结束自己的安全更新。

现在是从 3.7 升级的时候了在短期内,你的最低目标是切换到一个 Python 版本,该版本维护了可用的依赖项版本。例如,如果你依赖 Pandas,正如我们所见,最后一个与 3.7 兼容的版本是在 2021 年 12 月发布的。因此,你至少希望使用 Python 3.8。

幸运的是,Python 3 版本相当向后兼容, 所以可以做的是:

  • 升级到 3.8。
  • 修复你发现的任何错误。
  • 升级到 3.9,修复所有错误。
  • 重复直到你使用 Python 3.10 或从 2023 年 1 月左右开始使用 Python 3.11。