2020 年 1 月 1 日是 Python2 的壽命終止日,這個日期在兩年前經"Python之父" Guido van Rossum 宣布,此后一直成為開發者社區翹首以盼的一天。
昨天就是這個大快人心的日子,各種變了花樣的喜慶報道不絕於目。調侃的玩笑也不少,比如這個:
還有這個(別信!):
然而,我今天偶然看到一位大佬的疑問,大意如下:官網發布的 Python2 退休日期說是 4 月,那個倒計時網站是不是冒充的官方消息?
他所說的官網消息是這篇——
怎么回事呢?傳了那么久的元旦退休消息,竟然會不准確?那么多人在熱熱鬧鬧地慶祝着,竟然是在慶祝一個假消息么?
我搜索那篇文章,仔細讀了一遍,然后才注意到發布日期是 2019 年 12 月 20 日,也就是兩周前。文中沒有提到 1 月 1 日,也沒提 4 月的具體日子。
文章屬實,但日期明顯矛盾,這是怎么回事呢?官方應該會有所解釋吧?帶着疑問,我去翻看官方和幾個核心開發者的推特。
經過一番資料查閱,我終於搞清楚了怎么回事,也找到了所謂的"官方解釋"。
簡單說明結論: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 呢?為什么容許出現兩個不一致的日期?
根據我對討論內容的理解,主要有如下原因:
- 12 月末不是一個方便的“工作”時間(因為感恩節放假!)
- 4 月有一年一度的社區大會,屆時大家可以集體宣泄
- Python 1 的最后版本(1.6.1)已經有此先例
有不少開發者也表示附議,認可這個安排。詳細的討論過程在:https://dwz.cn/ECmB3cZo
如果 PSF 在發布那篇“4 月退休”的文章時,對此安排作出解釋,也許大家就不會有那么多困惑了,更不至於懷疑自己在傳播假消息……
看到這,你也應該理解了來龍去脈吧?不過,我相信還是有讀者有疑問:既然早就知道會有這個尾巴要處理,為什么不能加快進度,多投精力,爭取一分不差地在 2019-12-31 發布最后一個版本呢?
追進度、趕 deadline、加班加點,這種事情在國內互聯網領域是司空見慣了。然而,Python 核心開發者們幾乎都是志願者,花的是業余興趣時間,他們的主業可能都不至於 996,怎么能指望在副業上 996 呢?!不要強人所難!
最后,不管怎么說,Python2 確實是在 2010-01-01 就 EOL 了,此后自生自滅。
它的最后一個版本會在 4 月份發布(只包含 1 月 1 日前的問題),我們不用着急,就讓這只球飛一會吧,等到球落袋的時候,我們再一起,舉杯相慶!
公眾號【Python貓】, 本號連載優質的系列文章,有喵星哲學貓系列、Python進階系列、好書推薦系列、技術寫作、優質英文推薦與翻譯等等,歡迎關注哦。