And*_*omb 10 python backwards-compatibility forward-compatibility python-3.x
我正在研究一些想要引入 Python 3.6 以便在以 3.5 为标准的环境中使用的软件。阅读Python的文档我找不到任何关于是否:
事实上,这个关于移植到 3.7 的页面的存在让我强烈认为不,但我看不到关于版本号含义的官方文档(如果有的话,ala Linux 内核版本控制)
从更一般的意义上来说 - 3.X 版本流中是否存在围绕兼容性标准的 PEP?
Sha*_*ger 13
简短的答案是“不”,详细的答案是“他们追求接近它的东西”。
一般来说,微版本符合语义版本控制规则;他们不应该破坏任何东西或添加功能,而只是修复错误。情况并非总是如此(例如3.5.1在 a 上中断,因为它导致了一个比出现时中断更严重的错误vars()namedtuple),但对于代码来说这是非常罕见的(尤其是 Python 级别的东西,而不是 C 扩展) )突破微观边界。
次要版本主要是“添加功能”,但它们也会做出与先前警告不向后兼容的更改。例如,asyncandawait成为 Python 3.7 中的关键字,这意味着使用它们作为变量名的代码会损坏,但启用警告后,您会DeprecationWarning在 3.6 中看到 a 。许多语法更改最初是作为特殊__future__模块的可选导入引入的,并记录了成为默认行为的时间表。
次要版本中所做的更改都不是广泛的更改;我怀疑任何单独的弃用或语法更改是否会影响现有源代码的 1%,但它确实发生了。如果您有一百个第三方依赖项,并且要跳转一两个次要版本,那么其中一个版本很有可能会因更改而被破坏(例如:pika在0.12用作async变量名之前,并在 Python 3.7 上崩溃;他们发布了修复该错误的新版本,但是当然,从0.11更低版本到0.12更高版本改变了他们自己的 API,这可能会破坏你的代码)。
主要版本大致如您所期望的那样;向后不兼容的更改是预期/允许的(尽管它们通常不会轻率地进行;更改越大,好处就越大)。
要点是,它接近语义版本控制,但为了不每隔几年发布一次主要版本,同时也不让语言由于严格的兼容性限制而停滞不前,只要存在,就允许次要版本破坏少量现有代码是警告(通常以使用已弃用行为的代码的实际警告、新增功能文档的注释以及有时__future__支持简化迁移路径的形式)。
这一切都在其开发周期文档中正式记录(细节稍少) :
为了澄清术语,Python 使用了
major.minor.micro生产就绪版本的术语。因此,对于 Python 3.1.2 Final,即主要版本3、次要版本1 和微型版本2。
- 新的主要版本是例外;只有当强烈不兼容的变化被认为是必要的并且提前很长时间计划时,它们才会出现;
- 新的次要版本是功能版本;它们每年都会从当前正在开发的分支中发布;
- 新的微型版本是错误修复版本;他们大约每两个月被释放一次;它们是在维护部门准备的。
| 归档时间: |
|
| 查看次数: |
4182 次 |
| 最近记录: |