如何過渡至 Python 3

garfielder007發表於2016-05-05

原文地址: http://www.aaronsw.com/weblog/python3

譯者: yudun1989

作為一個普通的 Python 開發者,不免會碰到 Python 2 到 3 轉換不成功的問題。我經常會得到一些請求說要讓我寫的庫能夠在 Python 3 中執行,但是對於如何升級這個問題,在我嘗試了各種各樣解決衝突的建議之後,並沒有發現有多少個可行的方案。

確實,當你看到新的 3.x 匆匆釋出,卻沒有多少人來使用,難免會去猜測 Python 是否會在這次艱難的轉型中倒下。那麼我們應該如何來幫助它越過這道坎?

我似乎看到很多關於 Python 3 徹底的,未來的,嶄新的版本特性的討論,但我們卻忽視了升級的方法。在 Python 2 時代,我們有非常清楚的方法來應對版本更新。

  • 在 Python 2.a 版本中, 加入了 from __future__ import new_feature 語句,你就可以明確宣告你想要使用的新特性來使用新功能。
  • 在 Python 2.b 版本中, 預設加入了新功能,你不需要在使用之前去宣告 future。
  • 在 Python 2.c 版本中,當你在使用舊的方法時,將會產生警告,來通知你改變你的既有程式碼,或者是停止執行。
  • 在 Python 2.d 版本中,它就真的停止工作了。

這種方法可能確實蠻有效,但是我卻不清楚為什麼在向 Python 3 轉換的過程中,卻沒有什麼效果。它可能只是想表達:

  • Python 2.x 版本將會支援 from __future__ import python3

將這個加在檔案的首部將會宣告這是一個 Python 3 檔案,編譯器將會正確的解析它 (我意識到這樣做可能會為 Python 2 和 3 的編譯器帶來許多繁重的工作,但是坦誠地說,維護一個統一的程式碼庫永遠都是件好事)。

如果我想讓我基於 Python 2 的程式去使用一些屬於 Python 3 的模組,我只需要確認這些模組在頭部都有呼叫 import 。如果我想給我的模組釋出一個可以在 Python 3 上執行的新版本,我只需要宣告這個程式只在 Python 2.x 或更高版本中執行(使用新的 import 語句)。如果專案比較大,我甚至可以一次性地將版本升級到 3,留下舊程式碼,直到一些人來修正這些瑣碎。最重要的,我可以升級到 Python 3 而不必等到所有的依賴都滿足、直到有一個完整的方案時才來解決。

使用者只有知道在不改變既有程式碼的情況下他們才會升級到 2.x 版本。開發者知道大家最終會升級到 2.x 所以他們放棄對之前版本的支援。但是既然 2.x 的程式碼在 3 下也相容,那麼他們就會開始編寫和釋出可以和未來相容的程式碼,最終大部分的程式碼都將會在 Python 3 下工作,使用者也會升級到 3 (2.x 將會對一些殘餘的程式碼給以警告)。最後我們可以丟掉對 2.x 的支援,然後讓所有的程式碼都能得到更好的相容。

這不是一個激進的點子,這是 Python 升級既有的方式。除非我們再次這樣做,否則我不知道我們如何才能渡過這個艱難的階段。


from: http://pycoders-weekly-chinese.readthedocs.io/en/latest/issue4/how-python3-should-have-worked.html

相關文章