停止使用 Python 3.8,避免安全风险

Python 3.8即将于2024年10月退役,停止安全与错误修复,建议尽快升级至更高版本以确保安全与稳定。

原文标题:Python3.8退役在即,你准备好了吗?

原文作者:机器学习算法与Python学习

冷月清谈:

Python 3.8 的正式支持将于 2024 年 10 月结束,届时将停止一切错误和安全修复。虽然目前有约 14% 的软件包仍在使用该版本,但由于第三方库逐渐放弃对 3.8 的支持,如果依赖于这些库,那么不更新将带来潜在风险。Linux 发行版虽可提供一定的支持,但能否获得全方位的安全补丁是个未知数。建议用户考虑逐步升级到更高版本,如 Python 3.9,以保障安全性和稳定性,并避免未来的兼容性问题。定期更新流程已成为必要之举,以确保依赖包的更新和系统的安全。通过主动进行版本升级,可以避免未来可能发生的安全风险和兼容性障碍。

怜星夜思:

1、为什么还要继续使用Python 3.8?
2、升级到哪个版本的Python合适呢?
3、如何处理升级后的兼容性问题?

原文内容


https://pythonspeed.com/articles/stop-using-python-3.8

发布将在3.8 发布5 年后停止。 也就是说,2024 年10 月是Python 3.8 版本发布的最后一个月,从2024 年10 月开始,如果存在安全错误,Python 开发团队将不会修复该错误。

截至 2024 年 9 月,从 PyPI 下载的软件包中约有 14% 适用于 Python 3.8,这包括作为 CI 运行一部分的自动下载,因此这并不意味着 14% 的应用程序使用了 3.8,但这仍然是一天内安装了 2.5 亿个软件包!
虽然如此,但我们可以延迟升级的时间有限,对于 Python 3.8,升级的时间是越快越好,因为Python 3.8 将于 2024 年 10 月底结束其生命周期,到期后会将:
  • 没有更多的错误修复。

  • 不再有安全修复程序。

我们为什么要升级?

Python 3.8 于 2019 年 10 月发布,距今已有五年时间。正如你在 PEP 569 中看到的:
  • 在前两年,错误修复和安全修复子版本每 2 个月发布一次
  • 在此之后,仅根据需要进行安全修复
  • 发布将在 3.8 发布 5 年后停止
也就是说,2024 年 10 月是 Python 3.8 版本发布的最后一个月,从 2024 年 10 月开始,如果存在安全错误,Python 开发团队将不会修复该错误。
现在对安全修复的需求是比较强烈的,因为3.8.10 之后的所有版本都是由于安全修复而产生的,在撰写本文时,最新版本 Python 3.8.20 于 2024 年 9 月 6 日发布,其中包含 14 个不同的安全修复程序。
某些 Linux 发行版保证在已知时间段内提供长期支持,包括安全错误修复,如果你使用的是其中一个发行版,并且它包含 Python 3.8,那么即使 Python 开发团队不提供,你也可以依赖该发行版来提供安全修复程序。所以从理论上讲,你还不需要升级,但在实践中,有一些注意事项。
第一是Linux 发行版只会做这么多,而且也不是永远支持
Linux 发行版不会向后移植所有安全修复程序,只向后移植那些最重要的安全修复程序,例如,Python 3.8.19 中的一些安全修复程序从未进入 Ubuntu 软件包中。
当然,长期支持仅在有限的时间内持续,例如,Ubuntu 20.04(包含 Python 3.8 的版本)将于 2025 年 4 月结束常规安全更新,之后,将能够获得个人使用的安全更新,但对于大规模商业用途,就需要向 Ubuntu 付费。
第二个问题是你的依赖包将停止获取更新
第三方 Python 库和框架已经开始放弃对 Python 3.8 的支持,这意味着,如果这些库存在严重错误,则修复程序可能在 Python 3.8 上不可用,并且你的 Linux 发行版在很大程度上不会为每个存在的 Python 库进行向后移植。
软件包 最新版本支持3.8?
支持3.8的最新版本 
NumPy 2022 年 12 月
Pandas 2023 年 6 月
Django 5.x 版本 从不支持

是时候从 3.8 升级了

在短期内,最低目标是切换到维护可用依赖项版本的Python版本,例如,如果你依赖 Pandas,正如我们所看到的,上一个兼容 3.9 的版本是在 2023 年 6 月,所以你至少要使用 Python 3.9。
比较好的是,Python 3 版本相当向后兼容,所以你可以这么做:
  • 升级到 3.9。
  • 修复发现的任何错误。
  • 升级到 3.10,修复所有错误。
  • 重复直到 Python 3.12 甚至 3.13。

潜在问题

升级需求不是一次性事件,而是持续需求:
  • Ubuntu 20.04 将于 2025 年 4 月停止获取免费安全更新。
  • Python 3.9 将于 2025 年 10 月停止获取安全更新。
  • Django 5.2 将于 2026 年 4 月停止获取安全更新。
从新版本的相反角度来看:
  • Python 3.9 于 2020 年 10 月发布。
  • Python 3.10 于 2021 年 10 月发布。
  • Python 3.11 于 2022 年 10 月发布。
  • Python 3.12 于 2023 年 10 月发布。
如果你在2024 年仍在使用 Python 3.8,说明你们可能因为有其他更重要的升级或是遇到组织问题,所以一直在推迟,下一步建议应该设置一个持续的流程来定期更新版本和依赖了。
往期推荐






商务合作 | 交流学习 | 送书活动

添加vx:yuliang-bj(备注姓名-单位)


图片觉得不错,请点个在看

取决于你的具体情况。如果你的应用程序依赖于不太可能停止支持 Python 3.8 的库,并且你愿意接受 Linux 发行版提供的安全支持的限制,那么可以推迟升级。但如果是任何其他情况,则推荐尽快升级。

这取决于你的应用程序的复杂性。一般来说,升级过程比较简单,但如果你的应用程序使用较旧的代码或依赖项,可能需要进行一些修改。逐步升级到多个版本可以减轻迁移负担。

有!新版本的 Python 通常包含性能改进、新特性以及错误修复。升级后可以提高应用程序效率,引入新的功能。

理论上不需要升级,因为发行版会提供安全修复。但实际上,Linux 发行版不会向后移植所有安全修复程序,并且长期支持也有时间限制。

使用虚拟环境可以帮助处理不同项目的依赖问题,如果有依赖库冲突,可以分开管理。

依赖库的支持情况也是个因素。如果还有其他库仍支持3.8,那就可以拖一段时间再考虑升级了。

推荐先升级到Python 3.9,因为它仍然可以保证一定的包兼容性,同时下一步可以逐渐迁移到3.10或更高版本。

可以先在本地环境中进行测试,确保代码在新版本下没有问题再上线,这样可以降低风险。

3.10是个不错的选择,新增了一些功能,如果你的代码与之兼容,那么尽早升级能事半功倍。

其实采纳最新版本总是好的,像3.11和3.12都已经发布了,支持的库更多,而且性能更优。

有些老旧系统可能依赖3.8的特性,升级需要时间和资源。而且,有些Linux发行版会提供一定的安全更新。

开源探讨小组的协作也很重要,社区常常更新一些的包包,参与这样的交流有助于解决兼容性问题。

虽然3.8即将退休,但某些项目可能不容易迁移,特别是大型商业项目,要评估升级的成本与收益。