原標題:OpenStackUssuri只支持Python3,你該怎么辦?
在Ussuri的發(fā)布周期中,OpenStack放棄了對Python2的所有支持。所有的項目都已經(jīng)完成了CI作業(yè)的更新,使它們能在Python3下工作。這一成果使軟件能夠刪除所有Python2測試以及隨之進行的配置。
Python2->Python3
Python2.0于2000年正式發(fā)布,OpenStack于2010年成立,此后一直使用Python2.0作為基礎語言。Python基金會意識到,為了防止用戶不得不以落后或困難的方式執(zhí)行任務,需要對軟件進行大的改進。
“我們在2000年發(fā)布了Python2.0。幾年后,我們意識到需要做出重大改變來改進Python。所以在2006年,我們啟動了Python3.0。很多人沒有升級,我們也不想傷害他們。因此,多年來,我們一直在改進和發(fā)布Python2和Python3?!?/p>
2015年,Python基金會在多個平臺上非常明確地宣布,將遷移到Python3并停止使用Python2。最后期限是2020年。
OpenStack啟動對Python3的支持
很明顯,OpenStack也不能支持Python2太久了。因為不可能修復Python2上的安全漏洞,OpenStack最好完全放棄,轉(zhuǎn)而專注于Python3。
OpenStack對Python3的支持始于2013年,許多開發(fā)人員做出了貢獻。在社區(qū)付出了這么多努力之后,在Stein發(fā)布周期(2018年9月)中,社區(qū)達成共識要在Python3下運行OpenStack。這意味著許多開發(fā)人員的大量艱苦工作。
OpenStackTrain(2019年10月):默認Python3
在OpenStackTrain發(fā)行版(2019年10月)中,OpenStack默認在Python3上測試。這意味著你可以滿懷信心地將云升級到Python3環(huán)境。OpenStackTrain發(fā)布時支持經(jīng)過測試的Python3,但仍然支持Python2.7。同時,繼續(xù)測試最新的Python3版本,OpenStack技術(shù)委員會(TC)開始為每個發(fā)布周期定義測試運行時。OpenStack將在即將開始的下一個發(fā)布周期中瞄準Python3.8。
OpenStackUssuri(2020年5月):僅支持Python3,放棄Python2
在Ussuri發(fā)布周期中,OpenStack放棄了對Python2的所有支持。所有的項目都已經(jīng)完成了CI作業(yè)的更新,使它們能夠在Python3下工作。這一成果使軟件能夠刪除所有的Python2測試以及隨之而來的配置。
在Ussuri發(fā)布周期中,我們首先開始計劃放棄對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時,很多原本穩(wěn)定的分支測試開始崩潰。這是顯而易見的,因為Tempest和許多其他測試工具都是無分支的,這意味著master版本將用于測試OpenStack的當前版本和舊版本。所以所有的Python2.7測試工作都在使用Tempestmaster版本。最后,在py3env上安裝的Tempest進行capping和fixing,使所有穩(wěn)定的分支和master測試通過。
就在Ussuri發(fā)布的前幾周,我們完成了這項工作,讓OpenStack只支持Python3,并更新了wiki頁面。Swift和Storlet這兩個項目將繼續(xù)支持Python2.7一到兩個周期。
“OpenStack僅支持Python3”對用戶/升級意味著什么?
如果你現(xiàn)在的云位于Python3env上,那么根本不需要擔心。如果它在Python2.7上,并且你正在升級到Ussuri,那么你需要檢查env是否有Python3.6或更高版本可用。從Ussuri版本開始,OpenStack將只在Python3.6或更高版本上工作。例如,如果你想安裝NovaUssuri版本,那么如果Python3.6或更高版本不可用,它將報錯。這是通過安裝配置文件中的元數(shù)據(jù)(“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
如果你使用的發(fā)行版沒有Python3.6或更高版本,則需要先升級。在Python2.7上沒有解決方法或任何兼容的方法來繼續(xù)運行OpenStack。唯一的方法就是升級Python版本。下面的FAQ部分將介紹一些關于Python升級的問題。
FAQ
Q:Python2到Python3的升級是否在上游CI/CD中測試過?
A:不是直接的,但正在間接地測試。我們沒有進行py2setup到py3setup的上游升級測試。然而,以前的OpenStack版本,如Stein和Train,都在這兩個python版本上進行了測試。如果你要將OpenStack從Stein或Train升級到Ussuri,那么應該沒有任何問題。
Q:從Ussuri到舊穩(wěn)定分支的backport變化將如何與Python2.7兼容?
A:我們?nèi)匀贿\行Python2.7作業(yè),直到進行穩(wěn)定的Train測試,這樣來自Ussuri或更高版本(僅在Python3上測試)的任何backport都將在Train或更早的穩(wěn)定分支上進行,同時也在Python2.7上測試。如果Python2.7上有任何中斷,將在backport之前修復。這樣我們就可以使Python2.7支持所有的穩(wěn)定分支。
Q:像Tempest這樣的無分支測試框架(使用master版本進行舊版本的測試)是否也能在Python2.7中繼續(xù)工作?
答:不能。我們已經(jīng)發(fā)布了最新的兼容版本Python2.7,用于Tempest和其他無分支的交付。無分支意味著工具master版本正被用來測試當前或較舊的OpenStack版本。例如,Tempest23.0.0可以用作Python2.7支持的版本,Tempest24.0.0或master只能用作Python3的。但是有一種方法可以繼續(xù)測試舊的Python2.7版本(直到你升級云并希望Tempestmaster測試云)。你可以在Python3節(jié)點或虛擬env上運行Tempest,并繼續(xù)使用主版本測試Python2.7云。只要API可以從單獨的測試節(jié)點訪問,或者虛擬envTempest正在運行,Tempest不需要與其他OpenStack服務安裝在同一個系統(tǒng)上。
https://superuser.openstack.org/articles/openstack-ussuri-is-python3-only-upgrade-impact/