1.1挑選直譯器
1.1.1Python的現狀(2 vs 3)
當選擇python直譯器的時候,一個首先要面對的問題是:“我應該選擇Python 2還是Python 3?” 答案並不像人們想象的那麼明顯。
現狀的基本要點如下:
- Python 2.7 作為標準已經很長時間了
- Python 3 將重大變換引入到語言中,其中有不少開發者不滿意。
- 幾年內Python 2.7 將得到必要的安全更新。
- 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]