原标题:OpenStackUssuri只支持Python3,你该怎么办? 在Ussuri的发布周期中,OpenStack放弃了对Python2的所有支持。所有的项目都已经完成了CI作业的更新,使它们能在Python3下工作。这一成果使软件能够删除所有Python2测试以及随之进行的配置。 Python2->Python3 Python2.0于2000年正式发布,OpenStack于2010年成立,此后一直使用Python2.0作为基础语言。Python基金会意识到,为了防止用户不得不以落后或困难的方式执行任务,需要对软件进行大的改进。 “我们在2000年发布了Python2.0。几年后,我们意识到需要做出重大改变来改进Python。所以在2006年,我们启动了Python3.0。很多人没有升级,我们也不想伤害他们。因此,多年来,我们一直在改进和发布Python2和Python3。” 2015年,Python基金会在多个平台上非常明确地宣布,将迁移到Python3并停止使用Python2。最后期限是2020年。 OpenStack启动对Python3的支持 很明显,OpenStack也不能支持Python2太久了。因为不可能修复Python2上的安全漏洞,OpenStack最好完全放弃,转而专注于Python3。 OpenStack对Python3的支持始于2013年,许多开发人员做出了贡献。在社区付出了这么多努力之后,在Stein发布周期(2018年9月)中,社区达成共识要在Python3下运行OpenStack。这意味着许多开发人员的大量艰苦工作。 OpenStackTrain(2019年10月):默认Python3 在OpenStackTrain发行版(2019年10月)中,OpenStack默认在Python3上测试。这意味着你可以满怀信心地将云升级到Python3环境。OpenStackTrain发布时支持经过测试的Python3,但仍然支持Python2.7。同时,继续测试最新的Python3版本,OpenStack技术委员会(TC)开始为每个发布周期定义测试运行时。OpenStack将在即将开始的下一个发布周期中瞄准Python3.8。 OpenStackUssuri(2020年5月):仅支持Python3,放弃Python2 在Ussuri发布周期中,OpenStack放弃了对Python2的所有支持。所有的项目都已经完成了CI作业的更新,使它们能够在Python3下工作。这一成果使软件能够删除所有的Python2测试以及随之而来的配置。 在Ussuri发布周期中,我们首先开始计划放弃对Python2.7的支持。当许多项目相互依赖并集成CI/CD时,删除Python2.7并不是一件容易的事情。例如,如果Nova放弃了对Python2.7的支持,只支持Python3,它就会打破Cinder和许多其他项目的CI/CD。我们准备了一个时间表,并将工作分为三个阶段,首先放弃服务的支持,然后放弃库或测试工具。 第一阶段:Ussuri开始->Ussuri-1里程碑:要启动的OpenStack服务放弃py2.7支持。第二阶段:里程碑1->里程碑2:通用库和测试工具 第三阶段:里程碑2:最终审计。 尽管如此,在最初的工作中还是有一些东西搞砸了。因此,我们默认DevStackasPython3,这确实有帮助。在第二阶段,当我们开始将Tempest和其他测试工具变成仅支持Python3时,很多原本稳定的分支测试开始崩溃。这是显而易见的,因为Tempest和许多其他测试工具都是无分支的,这意味着master版本将用于测试OpenStack的当前版本和旧版本。所以所有的Python2.7测试工作都在使用Tempestmaster版本。最后,在py3env上安装的Tempest进行capping和fixing,使所有稳定的分支和master测试通过。 就在Ussuri发布的前几周,我们完成了这项工作,让OpenStack只支持Python3,并更新了wiki页面。Swift和Storlet这两个项目将继续支持Python2.7一到两个周期。 “OpenStack仅支持Python3”对用户/升级意味着什么? 如果你现在的云位于Python3env上,那么根本不需要担心。如果它在Python2.7上,并且你正在升级到Ussuri,那么你需要检查env是否有Python3.6或更高版本可用。从Ussuri版本开始,OpenStack将只在Python3.6或更高版本上工作。例如,如果你想安装NovaUssuri版本,那么如果Python3.6或更高版本不可用,它将报错。这是通过安装配置文件中的元数据(“pythonrequires=>=3.6”)完成的。以下是Ussuri版本中安装配置文件的截图: python-requires=>=3.6 classifier= Environment::OpenStack IntendedAudience::InformationTechnology IntendedAudience::SystemAdministrators License::OSIApproved::ApacheSoftwareLicense OperatingSystem::POSIX::Linux ProgrammingLanguage::Python ProgrammingLanguage::Python::3 ProgrammingLanguage::Python::3.6 ProgrammingLanguage::Python::3.7 ProgrammingLanguage::Python::3::Only ProgrammingLanguage::Python::Implementation::CPython 如果你使用的发行版没有Python3.6或更高版本,则需要先升级。在Python2.7上没有解决方法或任何兼容的方法来继续运行OpenStack。唯一的方法就是升级Python版本。下面的FAQ部分将介绍一些关于Python升级的问题。 FAQ Q:Python2到Python3的升级是否在上游CI/CD中测试过? A:不是直接的,但正在间接地测试。我们没有进行py2setup到py3setup的上游升级测试。然而,以前的OpenStack版本,如Stein和Train,都在这两个python版本上进行了测试。如果你要将OpenStack从Stein或Train升级到Ussuri,那么应该没有任何问题。 Q:从Ussuri到旧稳定分支的backport变化将如何与Python2.7兼容? A:我们仍然运行Python2.7作业,直到进行稳定的Train测试,这样来自Ussuri或更高版本(仅在Python3上测试)的任何backport都将在Train或更早的稳定分支上进行,同时也在Python2.7上测试。如果Python2.7上有任何中断,将在backport之前修复。这样我们就可以使Python2.7支持所有的稳定分支。 Q:像Tempest这样的无分支测试框架(使用master版本进行旧版本的测试)是否也能在Python2.7中继续工作? 答:不能。我们已经发布了最新的兼容版本Python2.7,用于Tempest和其他无分支的交付。无分支意味着工具master版本正被用来测试当前或较旧的OpenStack版本。例如,Tempest23.0.0可以用作Python2.7支持的版本,Tempest24.0.0或master只能用作Python3的。但是有一种方法可以继续测试旧的Python2.7版本(直到你升级云并希望Tempestmaster测试云)。你可以在Python3节点或虚拟env上运行Tempest,并继续使用主版本测试Python2.7云。只要API可以从单独的测试节点访问,或者虚拟envTempest正在运行,Tempest不需要与其他OpenStack服务安装在同一个系统上。 https://superuser.openstack.org/articles/openstack-ussuri-is-python3-only-upgrade-impact/ |