将 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 时出现的一些常见问题。

参考资料