我们应该更新到最新的 Python 错误修复版本吗?2025年3月17日 | 阅读 10 分钟 如果您在 Python 社区活跃了一段时间,您可能还记得关于 Python 2 vs. Python 3 的讨论,或者您可能注意到 Python 3.10 和 Python 3.11 等版本在相当大的兴奋中发布。您可能已经注意到,三个数字,如 3.10.8,表示 Python 版本。在本课程中,您将重点关注 Python 错误修复版本以及第三个数字的重要性。 为开发人员创建版本控制方案并解读相关的版本号本身就是一种艺术。语义化版本控制和日历版本控制是两种最受欢迎的方法。尽管存在一些重大差异,Python 的版本控制策略与语义化版本控制类似。 版本号通常是三个整数的元组,通常缩写为 MAJOR.MINOR.PATCH。您的版本控制方法决定了这三个数字应如何解释。
这些整数遵循 Python 中严格的时间表。Python 功能在每个 MINOR 版本中都经历相同的生命周期。 ![]() Python 功能生命周期发布。
问题:您应该升级到 Python 的最新错误修复版本吗? 回答:是的,尤其是在易受攻击的生产系统上,简而言之。 理由:最好保持您正在使用的 Python 功能版本的最新维护版本! 与所有复杂的软件系统一样,Python 也有错误。其中大多数不会影响您,但偶尔会发现并纠正一个弱点。如果您处理敏感数据或容易受到恶意攻击的用户的影响,维护最新的错误修复版本对于确保您和您的用户安全至关重要。在某些情况和使用场景下,这甚至更重要。 请注意:Python 的最新功能版本对于您的安全不是必需的。Python 已获得五年支持,在此期间所有版本都会获得安全更新。如果您更新到最新的维护版本,您将只获得新的 Python 功能。其中每个功能都已包含在功能版本中。因此,您的系统暴露和脆弱性应该是您的首要考虑因素。如果您的系统容易受到可能具有严重后果的攻击,那么您需要一个程序来确保您的环境尽可能具有弹性。 应该使用自动化的持续集成系统来测试您的更改以管理您的项目。您可以关注 Python Discourse 上的发布文章或订阅 Python announce 电子邮件列表,以便在新的 Python 错误修复版本可用时收到通知。 两个功能版本之间不会有任何差异。错误修复版本仅包含错误和安全修复。如果您没有遇到隐藏的 Python 错误,并且在运行代码时没有与外界交互,那么始终使用最新的维护版本的重要性就降低了。 但是,尽管您的侧边项目中的安全漏洞风险和后果较少,但使用相对较新且安全版本的 Python 仍然是一个好习惯。找到一种使运行多个 Python 版本和更新到新版本变得简单的流程是理想的。 您如何方便地跟上新版本?您的设置将决定您如何将生产系统升级到最新的错误修复版本。您可以编辑配置文件中的版本号,然后重复您的测试。 发布错误修复和安全修复几乎是等效的。错误修复版本是在功能发布后的前 18 个月内发布的维护版本。这些版本包含针对每个操作系统量身定制的安装程序,大约每两个月发布一次。安全修复版本是在前 18 个月之后发布的版本。这些版本仅在必要时提供,并且仅以源代码形式提供。 在本节中,您将检查一种管理本地机器上不同 Python 版本的潜在方法。您的工作流程中应该管理您的编程设置的两个不同组件。
总的来说,您的系统可以支持多个 Python 版本。Python 版本管理可以手动完成,也可以使用 conda 或 pyenv 等程序完成。 无论您当前的 Python 版本是什么,都可以随时安装最新的错误修复版本。无需提前安装中间版本。但是,如果您跳过版本,那么由于您的更新中有更多更改,您应该更加仔细地进行测试。 您应该使用虚拟环境来管理您依赖的 Python 包。创建虚拟环境时,它会绑定到特定的 Python 版本。因此,您必须有一个实际的方法来创建新的虚拟环境以更新 Python 解释器。 您可以使用包含所有依赖项及其特定版本列表的锁定文件,以确保您的虚拟环境可以被复制。虽然使用程序通常比手动创建此类锁定文件更可取,但这是可行的。再次,有几种选择可用,包括 pip-tools、Poetry、conda-lock 和 Pipenv。 虽然 pip tools 可以使用 pip 或 pipe 安装,但 pyenv 必须单独安装。您可以选择并混合最适合您的工具。这是使用 pip-tools 和 pyenv 的工作流程示例。 您应该为开始的每个新项目创建一个独特的项目目录。以下所有命令都必须在此项目目录中输入。首先,将您的依赖项放在一个名为 requirements.in 的纯文本文件中。例如: 您从本教程中学到,您应该更新到最新的 Python 错误修复版本。您现在了解了错误修复版本和功能版本之间的区别,并了解了几种更新项目的方法。 当运行 pip-tools 时,requirements.txt 中会包含您所有依赖项(包括间接依赖项)的列表。 pip tools 会将每个依赖项与特定版本关联起来。它还包含有用的注释,解释了添加每个依赖项的原因。当您在 requirements.in 中添加新依赖项时,您可以重新运行 pip-compile。运行 pip-compile -upgrade 来将您的依赖项更新到最新版本。 您的 requirements 文件将在您开始一个项目时包含进来,并且您将持续更新它,无论您何时更新 Python 版本。当您安装新的错误修复版本时,您的依赖项不需要更新。依赖项将安装在新的虚拟环境中。 您必须先使用 pyenv 安装并激活新的 Python 版本,才能更新到最新的维护版本。 输入 pyenv install -list 查看众多可用 Python 版本的列表。 然后创建或重新创建您的虚拟环境,然后激活它。
即使您已经使用旧版本的 Python 构建了虚拟环境,也要使用 -clear 来确保它被清除。 在新的虚拟环境中安装锁定的需求,以完成此过程。 如果您始终通过需求文件添加需求,您可以确保您的环境可以被重新创建。虽然这看起来很耗时,但这种纪律将使您受益匪浅,并使您更容易更新 Python 解释器。 如果您使用不同的工具,具体细节会有所不同。但是,您应该能够遵循相同的基本程序。 如果您更新到最新的 Python 错误修复版本,可能会出现什么问题?
虽然这样做在短期内会有效,但还有其他可行的选择。有时,尽管很少见,但安全修复可能会影响您的代码。Python 引入了此修复程序以阻止某种形式的攻击。然而,这也意味着某些在早期 Python 版本中有效的代码不再有效。例如,对于大整数,Python 3.10.7 禁止在字符串和整数类型之间进行转换。 在错误修复版本中进行如此重大的更改是值得商榷的,而且很少见。如果此类更改影响您的项目,可能会更麻烦。建议的操作是升级您的代码以继续使用最新的错误修复版本。 不同版本的 Python 之间是否兼容?如前所述,错误修复版本不引入或删除任何新功能。因此,您的代码在 Python 版本的任何维护版本中都应一致运行。 CPython 用于与 C 扩展进行通信的应用程序二进制接口 (ABI) 在所有错误修复版本之间是一致的。由于这种可靠性,您可以使用来自第三方库的相同 wheel 来更新您的错误修复版本。换句话说,您的需求文件可以更新。 您是否也需要更新到最新的功能版本?将 Python 更新到最新的功能版本与将 Python 更新到最新的维护版本有很大不同。您可以分别选择它们。即使您坚持使用较早的功能版本,也应该使用该版本的最新错误修复版本。 新功能版本添加了新功能,同时弃用并删除了旧功能。因此,升级导致代码发生故障的可能性更大。在切换之前,应仔细评估系统。 注意:新功能教程系列包含关于 Python 每个版本新功能的信息。Python 的功能版本之间的应用程序二进制接口可能不如错误修复版本那样一致,这可能会阻止您更新到最新、最新的 Python 版本。实际含义是,C 扩展的库必须为新版本重新编译。在您所有的依赖项都提供与最新版本兼容的 wheel 之前,可能需要一段时间。 即使您没有使用最新的功能版本,您也是安全的,请放心。正如您已经观察到的,Python 功能版本在 18 个月内获得每月的错误修复更新,并在需要时获得长达五年的安全更新。 您仍然应该有一个策略来定期更新您的功能版本。特别是要确保您的版本不会过期。 例如,如果一个功能版本获得频繁的错误修复更新,您可以继续使用它。当它停止接收除安全补丁以外的更新时,您将升级到下一个版本。这意味着您将在其发布大约六个月后切换到新的 Python 功能版本,因为错误修复版本仅提供十八个月。 结论Python 的错误修复版本很少能获得广泛关注。虽然功能版本往往最令人兴奋,但关注常规的、低调的更新也是个好主意。如果您跟上 Python 的发布,您就会知道您的解释器拥有所有最新的错误和安全更新。您从本教程中学到,您应该更新到最新的 Python 错误修复版本。您现在了解了错误修复版本和功能版本之间的区别,并了解了几种更新项目的方法。 下一个主题如何在 Python 中添加延迟 |
我们请求您订阅我们的新闻通讯以获取最新更新。