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 标准库的过程受到 API 锁定和包正式成为 Python 一部分所隐含的向后兼容性承诺的阻碍。此 PEP 描述了一种方法,用于在单个功能发布期间将标准库包标记为“临时”。临时包的 API 可以在“毕业”到“稳定”状态之前进行修改。一方面,这种状态为该包提供了正式成为 Python 发行版一部分的好处。另一方面,核心开发团队明确表示,他们不会对该包 API 的稳定性做出任何承诺,该 API 可能会在下次发布时发生变化。虽然这是一个不太可能的结果,但如果对它们的 API 或维护方面的担忧得到证实,这些包甚至可能在没有弃用期间的情况下从标准库中删除。
提案 - 有记录的临时状态
每当 Python 核心开发团队决定将一个新包纳入标准库时,但对该包的 API 是否最佳还不太确定,就可以将该包纳入并标记为“临时”。
在下一个功能发布中,该包可以“毕业”到标准库中的正常“稳定”状态,也可以保持临时状态,或者被拒绝并完全从 Python 源代码树中删除。如果该包最终在成为临时包后升级到稳定状态,它的 API 可以根据积累的反馈进行更改。核心开发团队明确表示,他们不会对临时包的 API 稳定性和向后兼容性做出任何保证。
标记一个包为临时
将一个包标记为临时可以通过在其文档页面和文档字符串中添加通知来实现。以下段落将作为注释添加到文档页面顶部:
<X> 包已以临时方式纳入标准库。如果核心开发人员认为有必要,可能会发生向后不兼容的更改(包括删除该包)。
然后,“临时方式”短语将链接到词汇表术语“临时包”,定义为
临时包是指那些故意从标准库的向后兼容性保证中排除的包。虽然预计对这类包不会进行重大更改,但只要它们被标记为临时,如果核心开发人员认为有必要,可能会发生向后不兼容的更改(包括删除该包)。这些更改不会随意进行 - 它们只会发生在发现包含该包之前未发现的严重缺陷时才会发生。此过程允许标准库随着时间的推移不断发展,而不必长时间锁定有问题的设计错误。有关更多详细信息,请参见 PEP 411。
以下内容将添加到包的文档字符串开头
此包的 API 目前处于临时状态。有关详细信息,请参阅文档。
将一个包从临时状态移到稳定状态,只需从其文档页面和文档字符串中删除这些注释即可。
哪些包应该经历临时状态
我们预计,大多数被提议添加到 Python 标准库的包将经历一个处于临时状态的功能发布。但是,也可能有一些例外,例如使用预定义 API 的包(例如 lzma
,它通常遵循现有 bz2
包的 API),或者在 Python 开发社区中 API 广为接受的包。
在任何情况下,无论通过临时状态还是直接方式被提议添加到标准库的包,都必须满足 PEP 2 中规定的接受条件。
“毕业”的标准
原则上,大多数临时包最终都应该升级到稳定的标准库。一些不升级的原因是
- 该包可能被证明是不稳定或脆弱的,没有足够的开发人员支持来维护它。
- 在预览发布期间可能会找到一个更好的替代包。
从本质上讲,这个决定将由核心开发人员根据具体情况做出。这里要强调的是,某个包在某个版本中被纳入标准库作为“临时”,并不保证它在下一个版本中将继续成为 Python 的一部分。同时,对临时包进行更改的门槛相当高。我们预计,大多数临时包的大多数 API 在升级时将保持不变。撤回预计将很少见。
理由
核心开发团队的益处
目前,核心开发人员非常不愿意向标准库中添加新的接口。这是因为一旦它们在某个版本中发布,API 设计错误就会由于向后兼容性问题而被锁定。
通过将所有主要 API 添加通过某种临时机制进行一整个版本的闸门,我们可以在锁定 API 与我们的标准向后兼容性保证之前,获得一个完整的版本周期的社区反馈。
我们也可以尽早开始将临时包与标准库的其余部分集成,只要我们向打包人员明确表示,临时包不应被视为可选。临时 API 与标准库其余部分的唯一区别是,临时 API 明确免除通常的向后兼容性保证。
最终用户的益处
对于未来的最终用户来说,最大的好处在于更好的“开箱即用”体验 - 与其被告知“哦,标准库中用于 X 任务的工具很糟糕,请下载这个第三方库”,这些更优秀的工具更有可能只需导入即可使用。
对于需要对上游依赖项进行尽职调查的环境(严重损害或甚至完全排除 PyPI 上大部分资料的成本效益),关键的好处在于确保处于临时状态的所有包至少从以下方面都处于 python-dev 的保护之下:
- 许可:由 PSF 根据贡献者许可协议重新分发。
- 文档:该包的文档通过标准的 Python 文档工具(即 ReST 源代码,使用 Sphinx 生成的输出,并在 https://docs.pythonlang.cn 上发布)发布和整理。
- 测试:该包的测试套件在 python.org buildbot 集群中运行,结果通过 https://pythonlang.cn/dev/buildbot 发布。
- 问题管理:错误和功能请求在 http://bugs.python.org 上处理。
- 源代码控制:该软件的主存储库发布在 http://hg.python.org 上。
纳入标准库的临时候选包
对于 Python 3.3,有许多明确的当前候选者
regex
(http://pypi.python.org/pypi/regex) - 由 Guido 批准 [1]。daemon
(PEP 3143)ipaddr
(PEP 3144)
其他可能的未来用例包括
被拒绝的替代方案和变体
请参见 PEP 408。
参考资料
版权
本文件已置于公有领域。
来源:https://github.com/python/peps/blob/main/peps/pep-0411.rst