将 Neutron 核心移植到 Python 3¶
https://blueprints.launchpad.net/neutron/+spec/neutron-python3
问题描述¶
Neutron 目前仅支持 Python 2.x。由于一些 OpenStack 项目现在已经支持 Python 3(大多数 Python 客户端,一些 oslo 库…),并且 OpenStack 应该迁移到 Python 3 [1],因此 Neutron 应该被移植到 Python 3.4。
提议的变更¶
本规范详细介绍了将 Neutron 核心移植到 Python 3 所需的步骤。
这里的目标仅仅是能够使用 Python 3.4 运行所有单元测试。这可能不足以确保 Neutron 与 Python 3.4 完全兼容:我们还需要在使用的 Python 3.x 的 devstack 中运行 Neutron,但这又是另一个问题。
显然,这些更改不得破坏 Neutron 的任何反向依赖关系。
数据模型影响¶
无
REST API 影响¶
无
安全影响¶
无
通知影响¶
无
其他最终用户影响¶
无
性能影响¶
无
IPv6 影响¶
无
其他部署者影响¶
如果部署者希望在 Python 3 下运行服务,他们应该将 Python 3 与整个堆栈一起安装。对于那些希望坚持使用 Python 2 的人来说,不会有任何差异,我们将确保不破坏任何东西。
开发人员影响¶
一旦 Neutron 被移植到 Python 3,开发者将无法编写仅适用于 Python 2 的代码,因为 py34 门禁将进行投票。
社区影响¶
无
备选方案¶
无
实现¶
负责人¶
- 主要负责人
cyril-roelandt
工作项¶
修复与不兼容 Python 3 的依赖项相关的问题:请参阅“Dependencies”(依赖项)部分。
确保“tox -epy34”仅运行在 tox.ini 中明确列出的测试。
启用 Neutron 中的 py34 门禁并使其生效。现在我们应该能够避免回归问题。
修复最明显的问题(print 语句、导入失败等),这些问题可能可以通过 2to3 捕获。可能会将检查添加到 tools/misc-sanity-checks.sh 中以避免回归。一旦 py34 生效并且所有单元测试在 Python 3 上通过,我们将能够删除它们。
逐一修复所有测试。
一旦它们都工作正常,从 tox.ini 中删除在使用 Python 3 时要运行的测试的显式列表,并将 py34 添加到默认环境列表中。
依赖项¶
Neutron 依赖于当前不适用于 Python 3 的软件包
oslo.db:适用于 Python 3.4,尽管我们需要一个新版本。唯一的问题是 MySQL-Python,它目前不兼容 Python 3,但可以使用 mysqlclient 作为直接替代品(MySQL-Python + py3 支持 + 修复)。
olso.messaging:得益于 Victor Stinner 的工作,RabbitMQ 和 ZMQ 驱动程序以及所有执行器在 Python 3 上工作。只有 Qpid 和 AMQP 1.0 驱动程序不适用于 Python 3,但这不应该阻止将 Neutron 移植到 Python 3。目前,这项工作只能在 git 仓库中找到,但应该在不久的将来发布一个符合 Python3 的版本。
总而言之,依赖项可能没有重大问题。
测试¶
Tempest 测试¶
无
功能测试¶
无
API 测试¶
无
文档影响¶
用户文档¶
无
开发人员文档¶
开发者可能对阅读 Openstack wiki 上的官方 Python 3 页面 [2] 感兴趣。它显示了当前的进度并详细说明了将代码移植到 Python 3 时出现的一些常见问题。