将 Python 3.4 支持添加到 Nova

https://blueprints.launchpad.net/nova/+spec/nova-python3

问题描述

现在是时候通过推广 six 模块的使用,为 Nova 添加 Python 3 支持,同时保留 Python 2 支持。

用例

有关原因,请参阅文章 为什么 OpenStack 现在应该迁移到 Python 3?

项目优先级

提议的变更

本规范详细介绍了通过推广 six 模块的使用,为 Nova 添加 Python 3.4 支持所需的步骤。

几乎所有 Nova 依赖项都已移植到 Python 3。对于少数剩余的库,移植工作正在进行中,应该在几周内完成。现在就可以开始将 Nova 移植到 Python 3 了。有关更多信息,请参阅下面的依赖项部分。

这里的目标是使所有 Nova 测试都能通过 Python 3:Nova 单元测试和 Tempest 测试。

注意

保留 Python 2 支持。

备选方案

数据模型影响

无(更改不得影响数据模型)。

REST API 影响

无(更改不得影响 REST API)。

安全影响

通知影响

其他最终用户影响

性能影响

对性能没有影响。

2013 年 3 月,Brett Canon 运行了 官方 Python 基准测试套件,比较了 Python 2.7 和 3.3,用于他在 Pycon US 上的演讲:Python 3.3:相信我,它比 Python 2.7 更好。结果:“如果您对所有基准测试进行排序并查看中位数结果……Python 3 是一样的”。

有关完整优化列表,请参阅每个“Python 3.x 新增内容”文档的“优化”部分:Python 3.1Python 3.2Python 3.3Python 3.4

其他部署者影响

使用 python 2.7 的部署者将不会看到任何更改。

能够运行 python 3.4 的用户现在可以尝试一下。

开发人员影响

一旦 Python 3 检查作业变为投票,开发人员将必须编写与 Python 2 和 Python 3 兼容的代码。在过渡期间,只有通过 tox.ini 白名单测试的代码才需要 Python 3 支持。

借助 tox,在 Python 2.7 和 3.4 上本地运行 Nova 测试套件非常简单。

实现

负责人

主要负责人

victor-stinner

其他贡献者

工作项

  • 修复大多数明显的 Python 3 问题。一个修复大多数 Python 3 问题的补丁示例:将 Nova 移植到 Python 3。此更改只是一个草稿,用于测试移植 Nova 是否可行,应该将其拆分为更小的补丁,按相似的更改分组。另请参阅 Python 3 wiki 页面上的 将 Python 2 代码移植到 Python 3 部分。

  • 将 Python 3 测试环境添加到 tox.ini,以运行在 Python 3 上通过的测试子集。它将使用已知在 Python 3 上通过的测试白名单。

  • 为 Nova 添加一个非投票的 Python 3 检查作业

  • 当 Python 3 检查作业足够稳定时,使其成为投票作业。从那时起,我们现在应该能够避免 Python 3 回归,同时进行工作。

  • 逐一修复失败的测试,以扩大 tox.ini 中的测试白名单。

  • 一旦所有测试都通过,请从 tox.ini 中删除测试白名单。

Python 3 仅部分支持的过渡期应该尽可能短。

不会添加投票的 Python 3 gate 作业,以避免浪费 OpenStack 基础设施的资源,Python 2 gate 作业就足够了。我们认为,Python 3 检查作业和 Python 2 gate 作业之间的冲突引入 Python 3 特定问题的风险很低。

依赖项

尚未与 Python 3 兼容的剩余依赖项

  • oslo.messaging:开发版本在 Python 3 上工作,除了 Qpid 和 AMQP 1.0 驱动程序。为了开始 Nova 到 Python 3 的移植,我们可以从 RabbitMQ 驱动程序开始,直到 AMQP 也移植到 Python 3。将在几周内发布新版本的 oslo.messaging

  • mysql-python:分支 mysqlclient 在 Python 3 上工作,并包含错误修复。还有 PyMySQL,一个完全用 Python 实现的驱动程序,也适用于 Python 3,但性能较差。

  • python-memcached:请参阅 pull request 将 memcache 移植到 Python 3。它阻塞了 keystonemiddleware。它可以被 pymemcache 替换,后者已经与 Python 3 兼容。

  • websockify:websockify 0.6.0 缺少 Python 3 分类器,但存在于开发版本中。测试失败,但它们可能是测试问题,而不是 websockify 本身的问题。

总而言之,依赖项没有重大问题。

使用 oslo.messaging 的开发版本,现在就可以开始修复 Nova 在 Python 3 上的测试了。

测试

当前测试套件应该足以在 Python 3 上测试 Nova。

我们将通过此过程在 Python 3.4 下运行 Nova:Nova 单元测试和 Tempest 测试。

文档影响

开发人员可能感兴趣阅读 Openstack wiki 上的官方 Python 3 页面。它显示了 OpenStack Python 3 移植的当前进度,并详细介绍了将代码从 Python 2 移植到 Python 3 时出现的一些常见问题。

参考资料

历史

修订版

发布名称

描述

Liberty

引入