Python34 支持¶
https://blueprints.launchpad.net/heat/+spec/heat-python34-support
本规范旨在为 Heat 带来 Python 3.4 的支持。
问题描述¶
Heat 目前与 Python3.x 不兼容。Heat 迁移的障碍是 eventlet,现在 eventlet 完全支持 python3,因此我们可以在 Python 3.4 环境中运行 Heat 单元测试。一旦 Heat 的所有依赖项都具备 Python3 的功能兼容性,我们应该能够在 devstack 环境中运行 Heat 集成测试。
提议的变更¶
Heat 实现 Python 3.4 兼容性的第一步是让单元测试在 py34 环境中成功运行。我们需要在 tox 中添加一个新的 py34 环境,并开始测试单个测试文件。为了避免对旧测试文件造成影响,我们应该添加一个单独的文件,其中包含所有已在 Python3 环境中验证过的测试文件。
所有这些更改不应破坏现有的单元测试,也不应以任何方式更改功能。现有的 gate 测试应该负责这一点。
备选方案¶
无
实现¶
负责人¶
- 主要负责人
sirushtim
里程碑¶
- 完成目标里程碑
liberty-1,根据运行测试时存在的兼容性问题数量,可能会扩展到 liberty-2。
工作项¶
部分使用 2to6 自动修复一些不兼容性并满足 flake8 的要求。
创建一个 tox py34 环境,该环境将基于一个 meta-testfile 运行,该文件将包含已经验证可以与 py34 配合使用的测试文件名。该环境还将使用不同的 requirements 文件,因为有两个依赖项 qpid-python 和 MySQL-python 目前与 Python3 不兼容。
添加一个 voting python34-partial gate 作业,该作业将运行上述环境。
将所有单元测试迁移为与 Python 3.4 兼容,无论是逐个迁移还是按字母顺序迁移测试,只要规模合理且易于审查即可。这也意味着我们将修复每个测试用例导入的模块/文件,使其与 python34 兼容。在迁移测试时,对于 mox 的策略是尽可能使用 mox3 而不是将其转换为 mock。
完成所有测试的迁移后,删除 meta-testfile 并将 gate 作业重命名为 gate-heat-python34。
删除对 qpid-python 和 MySQL-python 的依赖,并合并 python-2.7 和 python-3.4 的 requirements.txt。
一旦 Heat 的依赖项在功能上与 Python 3.4 兼容,创建一个 DevStack gate 作业,该作业将运行 Heat 的 Python 3.4 版本。
依赖项¶
Heat 当前的依赖项,这些依赖项与 Python 3.4 不兼容或曾经不兼容
requirements.txt - qpid-python:用于 install.sh。可以删除。 - PasteDeploy:需要进行功能测试。测试在 Python 3.4 上通过,并且已添加了分类器。[1] - oslo.messaging:一些驱动程序/执行器目前不起作用,但 Victor Stinner 正在处理。 - oslo.db:MySQL-python 方言与 Python 3.4 不兼容。但是,MySQL-python 有一个 Python 3.4 端口。 - sqlalchemy-migrate:sqlalchemy-migrate 的每个补丁都在运行 PY34 测试,并且将添加分类器。[2]
test-requirements.txt - MySQL-python:同上 - oslo.db^。可以删除。 - mox:需要替换为 mox3,直到我们完全迁移到 mock。
[1] https://bitbucket.org/ianb/pastedeploy/commits/f30a7d518c6a79fcddfbe3f622337f81e41cb6a5 [2] https://review.openstack.org/#/c/174738/