2020 年 1 月 1 日是 Python2 的壽命終止日,這個日期在兩年前經"Python之父" Guido van Rossum 宣佈,此後一直成爲開發者社區翹首以盼的一天。網站
昨天就是這個大快人心的日子,各類變了花樣的喜慶報道不絕於目。調侃的玩笑也很多,好比這個:ui
還有這個(別信!):翻譯
然而,我今天偶然看到一位大佬的疑問,大意以下:官網發佈的 Python2 退休日期說是 4 月,那個倒計時網站是否是冒充的官方消息?3d
他所說的官網消息是這篇——blog
怎麼回事呢?傳了那麼久的元旦退休消息,居然會不許確?那麼多人在熱熱鬧鬧地慶祝着,居然是在慶祝一個假消息麼?開發
我搜索那篇文章,仔細讀了一遍,而後才注意到發佈日期是 2019 年 12 月 20 日,也就是兩週前。文中沒有提到 1 月 1 日,也沒提 4 月的具體日子。get
文章屬實,但日期明顯矛盾,這是怎麼回事呢?官方應該會有所解釋吧?帶着疑問,我去翻看官方和幾個核心開發者的推特。社區
通過一番資料查閱,我終於搞清楚了怎麼回事,也找到了所謂的"官方解釋"。進階
簡單說明結論:2020-01-01 是板上釘釘的 Python2 的 EOL (end of life,壽命終止)日子,可是在這個日子前的版本發佈週期還在進行,最後一個版本按計劃是在今年 4 月的 Pycon US 大會上發佈。互聯網
Python2.7 在 2019 年的最後一個版本是 10 月 19 日發佈的 2.7.17 版本,在它以後直到2020-01-01 之間產生的全部問題,開發者們是接受的,而計劃合入的版本將是 4 月 17 日的 2.7.18 版本。
以籃球比賽中的壓哨球來類比,你就明白怎麼回事了:球離手在空中飛了三分之一路程,這時終止的哨聲吹響,最後這球中袋了固然仍是有效的。
進行了三分之一的 2.7.18 版本,就像離手之球,離弦之箭,潑出之水,負責任的 Python 官方仍是要承認它的。
其實,這個決定並非最近肯定的,早在 2019 年 9 月,Python2 的版本經理 Benjamin Peterson 就公佈了這個計劃,這裏是當時的郵件組截圖:
有很多開發者表示了疑義:爲何不能把 4 月的發佈計劃提早呢?若是是 4 月發佈最後版本,爲何不說 4 月纔是 EOL 呢?爲何允許出現兩個不一致的日期?
根據我對討論內容的理解,主要有以下緣由:
有很多開發者也表示附議,承認這個安排。詳細的討論過程在:https://dwz.cn/ECmB3cZo
若是 PSF 在發佈那篇「4 月退休」的文章時,對此安排做出解釋,也許你們就不會有那麼多困惑了,更不至於懷疑本身在傳播假消息……
看到這,你也應該理解了前因後果吧?不過,我相信仍是有讀者有疑問:既然早就知道會有這個尾巴要處理,爲何不能加快進度,多投精力,爭取一分不差地在 2019-12-31 發佈最後一個版本呢?
追進度、趕 deadline、加班加點,這種事情在國內互聯網領域是司空見慣了。然而,Python 核心開發者們幾乎都是志願者,花的是業餘興趣時間,他們的主業可能都不至於 996,怎麼能期望在副業上 996 呢?!不要強人所難!
最後,無論怎麼說,Python2 確實是在 2020-01-01 就 EOL 了,此後自生自滅。
它的最後一個版本會在 4 月份發佈(只包含 1 月 1 日前的問題),咱們不用着急,就讓這隻球飛一會吧,等到球落袋的時候,咱們再一塊兒,舉杯相慶!
公衆號【Python貓】, 本號連載優質的系列文章,有喵星哲學貓系列、Python進階系列、好書推薦系列、技術寫做、優質英文推薦與翻譯等等,歡迎關注哦。