将 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.1、Python 3.2、Python 3.3 和 Python 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 规范
Heat:添加 Python 3.4 支持,作者:Sirushti Murugesan
Neutron:移植到 Python 3 规范,作者:Cyril Roelandt,Ihar Hrachyshka 提供支持。
历史¶
发布名称 |
描述 |
|---|---|
Liberty |
引入 |