Python指南(1.1):挑選直譯器

mtunique發表於2015-02-12

1.1挑選直譯器

1.1.1Python的現狀(2 vs 3)

當選擇python直譯器的時候,一個首先要面對的問題是:“我應該選擇Python 2還是Python 3?” 答案並不像人們想象的那麼明顯。

現狀的基本要點如下:

  1. Python 2.7 作為標準已經很長時間了
  2. Python 3 將重大變換引入到語言中,其中有不少開發者不滿意。
  3. 幾年內Python 2.7 將得到必要的安全更新。
  4. Python 3正在不斷髮展,就像Python 2在過去幾年一樣。

所以,你現在可以看到為什麼這不是一個簡單的決定了。

1.1.2 建議

那我直言不諱:

用Python 3,如果:

  • 你不在乎。
  • 你愛Python 3。
  • 你不漠不關心2 vs 3。
  • 你不知道用哪一個。
  • 你接受變化。

用Python 2,如果:

  • 你愛Python 2,對未來的Python 3感到悲傷
  • 你的軟體的穩定性對語言有要求,執行時永遠不會改變
  • 你依賴的軟體需要它

1.1.3 所以…. 3?

如果你選擇了一種Python的直譯器來用,你不是固執己見的人,我推薦你用最新的Python 3.x,因為每個版本都帶來了新的改進的標準庫模組,安全性和bug修復。

鑑於這樣,如果你有一個強有力的理由只用Python 2,比如Python 3 無法足夠替代的Python 2特有庫,或者你(像我)非常喜歡,受Python 2啟發。

檢視 Can I Use Python 3?來看看是否有你依賴的軟體阻止你用Python 3。

延伸閱讀

寫同時能夠相容Python 2.6,2.7,和3.3上工作的程式碼是可能的。這包括從簡單到困難的各種難度,這取決於你寫的軟體的型別;如果你是初學者,其實有更重要的東西要操心。

1.1.4 實現方式

當人們談論起Python,他們往往意味著的不僅是語言本身,還包括其CPython實現。Python實際上是一個語言規範,可以用許多不同的方式來實現語言。

CPython

CPython 是Python的參考實現,用C編寫的。它把Python程式碼編譯成中間態的位元組碼,然後由虛擬機器解釋。CPython為Python包和C擴充套件模組提供了最大限度的相容。

如果你正在寫開源的Python程式碼,並希望有儘可能廣泛的使用者,用CPython是最好的。用依賴於C擴充套件的包,CPython是你唯一的選擇。

所有版本的Python語言都用C實現,因為CPython是參考實現。

PyPy

PyPy是用RPython實現的直譯器,RPython是Python的子集,具有靜態型別這個直譯器的特點是即時編譯,支援多重後端(C, CLI, JVM)。

PyPy旨在最大相容性(參考CPython的實現),同時提高效能。

如果你正在尋找提高你的Python程式碼的效能方法,值得試一試PyPy。在一套的基準測試下,它比CPython的速度目前超過5倍。

PyPy支援Python 2.7。PyPy3,釋出的測試版,支援Python 3。

Jython

Jython是一個將Python程式碼編譯成Java位元組碼的實現,執行在JVM(Java Virtual Machine)上。另外,它可以匯入並用任何Java類就像Python模組一樣。

如果你需要與現有的Java程式碼庫對接或者其他原因需要為JVM編寫Python程式碼,那Jython是最好的選擇。

Jython現在支援到Python 2.5。[2]

IronPython

IronPython 是一個針對 .NET framework的Python實現。它可以用Python和.NET framework的庫,而且可以用.NET framework暴露Python程式碼給.NET框架中的其他語言。

Python Tools for Visual Studio 直接整合IronPython到Visual Studio開發環境中,使之成為Windows開發者的理想選擇。

IronPython支援Python 2.7。[3]

PythonNet

Python for .NET是一個包,它提供給本機已安裝的Python一個.NET公共語言執行時(CLR),接近無縫整合。這所採取是與IronPython(見上文)中相反的方式,比相互競爭要更互補些。

與Mono相結合,PythonNet能使非windows作業系統的原生的Python在.NET框架中操作,比如OS X和Linux。它可以在除外IronPython的環境中無衝突執行。

PythonNet支援Python 2.3到2.7.[4]

相關文章