Following system colour scheme - Python 增强提案 Selected dark colour scheme - Python 增强提案 Selected light colour scheme - Python 增强提案

Python 增强提案

PEP 411 – Python 标准库中的临时包

作者:
Alyssa Coghlan <ncoghlan at gmail.com>, Eli Bendersky <eliben at gmail.com>
状态:
已取代
类型:
信息性
创建日期:
2012年2月10日
Python 版本:
3.3
发布历史:
2012年2月10日,2012年3月24日

目录

注意

本 PEP 已被标记为 已废弃。在本 PEP 编写十年后,经验表明,这在标准库管理中是一个很少使用的功能。它也未能阻止人们过于依赖临时模块,以至于更改仍然可能在社区中造成重大破坏。

摘要

将新包包含到 Python 标准库中的过程,因包作为 Python 正式部分所隐含的 API 锁定和向后兼容性承诺而受阻。本 PEP 描述了一种方法,用于在单个功能发布期间将标准库包标记为“临时”。临时包的 API 可以在“毕业”为“稳定”状态之前进行修改。一方面,这种状态为包提供了作为 Python 发行版正式部分的好处。另一方面,核心开发团队明确声明,不就包 API 的稳定性作出任何承诺,该 API 可能会在下一次发布中发生变化。虽然这种情况被认为不太可能发生,但如果对其 API 或维护的担忧被证明是合理的,此类包甚至可能在没有废弃期的情况下从标准库中移除。

提案 - 一个有文档记录的临时状态

每当 Python 核心开发团队决定将新包包含到标准库中,但不完全确定包的 API 是否最佳时,可以将包包含并标记为“临时”。

在下一个功能发布中,该包可能会“毕业”为标准库中的正常“稳定”状态,保持临时状态,或被拒绝并完全从 Python 源代码树中移除。如果该包在临时状态后最终毕业为稳定状态,其 API 可能会根据积累的反馈进行更改。核心开发团队明确不保证临时包的 API 稳定性和向后兼容性。

将包标记为临时

包将通过其文档页面和文档字符串中的通知标记为临时。以下段落将作为注释添加到文档页面的顶部:

<X> 包已暂时包含在标准库中。如果核心开发人员认为有必要,可能会发生不向后兼容的更改(包括移除包)。

短语“临时基础”将是词汇表术语“临时包”的链接,定义为:

临时包是指已明确排除在标准库向后兼容性保证之外的包。虽然预计此类包不会发生重大更改,但只要它们被标记为临时,如果核心开发人员认为有必要,就可能会发生不向后兼容的更改(包括移除包)。此类更改不会无故进行——只有在发现包含包之前遗漏的严重缺陷时才会发生。

此过程允许标准库随着时间的推移不断发展,而不会将有问题的设计错误锁定很长一段时间。有关更多详细信息,请参阅 PEP 411

以下内容将添加到包文档字符串的开头:

此包的 API 目前是临时的。有关详细信息,请参阅文档。

将包从临时状态移动到稳定状态,仅仅意味着从其文档页面和文档字符串中删除这些注释。

哪些包应该经历临时状态

我们期望大多数提议添加到 Python 标准库中的包,都会经历一个临时状态的功能发布。然而,可能存在一些例外,例如使用预定义 API 的包(例如 lzma,它通常遵循现有 bz2 包的 API),或者其 API 在 Python 开发社区中被广泛接受的包。

无论如何,提议添加到标准库中的包,无论是通过临时状态还是直接添加,都必须满足 PEP 2 设定的接受条件。

“毕业”标准

原则上,大多数临时包最终都应该毕业为稳定的标准库。不毕业的一些原因是:

  • 该包可能被证明不稳定或脆弱,没有足够的开发人员支持来维护它。
  • 在预览发布期间,可能会找到更好的替代包。

本质上,核心开发人员将根据具体情况做出决定。这里要强调的一点是,在某个发布中将包作为“临时”包含在标准库中,并不保证它在下一个发布中仍然是 Python 的一部分。同时,在临时包中进行更改的门槛相当高。我们预计大多数临时包的大部分 API 在毕业时将保持不变。预计撤回会很少见。

基本原理

对核心开发团队的好处

目前,核心开发人员非常不愿向标准库添加新接口。这是因为一旦它们在发布中发布,由于向后兼容性问题,API 设计错误就会被锁定。

通过在整个发布期间,通过某种临时机制来管理所有主要的 API 添加,我们可以在将 API 与我们的标准向后兼容性保证锁定之前,获得一个完整的发布周期内的社区反馈。

我们还可以及早开始将临时包与标准库的其余部分集成,只要我们向打包者明确指出,临时包不应被视为可选的。临时 API 与标准库其余部分之间的唯一区别是,临时 API 明确不受通常的向后兼容性保证的约束。

对最终用户的好处

对于未来的最终用户而言,最广泛的好处在于更好的“开箱即用”体验——而不是被告知“哦,用于任务 X 的标准库工具很糟糕,请改用此第三方库”,这些更优秀的工具更有可能只需一个 import 即可使用。

对于开发人员需要对其上游依赖项进行尽职调查的环境(严重损害 PyPI 上大部分材料的成本效益,甚至完全排除),主要好处在于确保临时状态下的所有包至少从以下几个方面明确受 python-dev 的监管:

建议临时包含到标准库中的候选包

对于 Python 3.3,目前有几个明确的候选包:

其他可能的未来用例包括:

  • 改进的 HTTP 模块(例如 requests
  • HTML 5 解析支持(例如 html5lib
  • 改进的 URL/URI/IRI 解析
  • 标准图像 API (PEP 368)
  • 改进的导入状态封装 (PEP 406)
  • 标准事件循环 API (PEP 3153)
  • 适用于 Python 3 的 WSGI 二进制版本(例如 PEP 444
  • 泛型函数支持(例如 simplegeneric

被拒绝的替代方案和变体

请参阅 PEP 408

参考资料


来源:https://github.com/python/peps/blob/main/peps/pep-0411.rst

最后修改:2025-02-01 08:59:27 GMT