PEP 291 – Python 2 标准库的后向兼容性
- 作者:
- Neal Norwitz <nnorwitz at gmail.com>
- 状态:
- 最终版
- 类型:
- 信息性
- 创建:
- 2002年6月6日
- Python 版本:
- 2.3
- 更新历史:
摘要
本 PEP 描述了 Python 2 标准库中应该保持与之前 Python 版本后向兼容的包和模块。如果某个包未在此列出,则它只需与它所发布的 Python 版本兼容即可。
本 PEP 不影响 Python 3 标准库。
基本原理
作者有各种原因需要使包和模块继续与之前版本的 Python 兼容。为了在向前推进标准库其余部分的同时保持这些模块的后向兼容性,有必要知道哪些模块可以修改,哪些模块应该使用旧的(可能已弃用)的功能。
通常,作者应尝试使更改与之前发布的 Python 版本后向兼容,以便更容易地将 bug 修复移植回旧版本。
除了将包或模块列入本 PEP 中之外,作者还必须在每个文件的顶部添加一条注释,记录兼容性要求。
当发布 Python 的主要版本时,会为持续维护和 bug 修复版本创建 Subversion 分支。分支上的包版本可能具有与主干(即当前最新开发版本)上的相同包不同的兼容性要求。在适当的情况下,这些分支兼容性将在下面列出。
避免的功能
以下列表包含为了保持与每个 Python 版本的后向兼容性而应避免的常见功能。此列表并不完整!它仅作为一般指南。
请注意,以下功能是在列出的版本之后的版本中实现的。例如,在 1.5.2 旁边列出的功能是在 2.0 中实现的。
版本 | 避免的功能 |
---|---|
1.5.2 | 字符串方法、Unicode、列表推导式、增强赋值(例如,+=)、zip()、import x as y、dict.setdefault()、print >> f、调用 f(*args, **kw),以及所有以下功能 |
2.0 | 嵌套作用域、丰富比较、函数属性,以及所有以下功能 |
2.1 | 使用 object 或新式类、迭代器、使用生成器、嵌套作用域或 // 而不使用 from __future__ import … 语句、isinstance(X, TYP) 其中 TYP 是类型元组,以及所有以下功能 |
2.2 | bool、True、False、basestring、enumerate()、{}.pop()、PendingDeprecationWarning、通用换行符,以及所有以下功能,以及所有以下功能 |
2.3 | 生成器表达式、多行导入、装饰器、int/long 统一、set/frozenset、reversed()、sorted()、”“.rsplit(),以及所有以下功能 |
2.4 | with 语句、条件表达式、组合 try/except/finally、相对导入、yield 表达式或 generator.throw/send/close(),以及所有以下功能 |
2.5 | 没有 from __future__ import 的 with 语句、io 模块、str.format()、except as、bytes、b'' 字面量、property.setter/deleter |
后向兼容的包、模块和工具
包/模块 | 维护者 | Python 版本 | 备注 |
---|---|---|---|
2to3 | Benjamin Peterson | 2.5 | |
bsddb |
|
2.1 | |
compiler | Jeremy Hylton | 2.1 | |
decimal | Raymond Hettinger | 2.3 | [2] |
distutils | Tarek Ziade | 2.3 | |
Barry Warsaw | 2.1 / 2.3 | [1] | |
pkgutil | Phillip Eby | 2.3 | |
platform | Marc-Andre Lemburg | 1.5.2 | |
pybench | Marc-Andre Lemburg | 1.5.2 | [3] |
sre | Fredrik Lundh | 2.1 | |
subprocess | Peter Astrand | 2.2 | |
wsgiref | Phillip J. Eby | 2.1 | |
xml (PyXML) | Martin v. Loewis | 2.0 | |
xmlrpclib | Fredrik Lundh | 2.1 |
工具 | 维护者 | Python 版本 |
---|---|---|
无 |
备注
- email 包版本 2 与 Python 2.3 之前的 Python 版本一起发布,并且必须保持与 Python 2.1 的兼容性。email 包版本 3 将与 Python 2.4 一起发布,并且只需要与 Python 2.3 兼容。
- 规范更新将被视为 bug 修复并进行移植。将至少为 Python 2.4 保持 Python 2.3 兼容性。将在 Python 2.5 中重新审视此决定,除非出现令人信服的优势才会更改。
- pybench 位于 Tools/ 目录下。需要与旧版 Python 版本兼容,以便能够比较不同 Python 版本之间的性能。新功能仍然可以在新测试中使用,然后可以通过工具在旧版 Python 版本中配置这些测试以在导入时优雅地失败。
版权
本文件已置于公有领域。
来源: https://github.com/python/peps/blob/main/peps/pep-0291.rst
上次修改: 2023-09-09 17:39:29 GMT