Python 直譯器(3 vs 2)究竟該如何抉擇
Python的狀態(版本 3 和版本 2)
選擇 Python 直譯器時,總會出現一個令人窘迫的問題:
“我應該選擇Python 2 還是 Python 3”? 答案比人們想象的要複雜的多。
大致的基本情況如下:
- 今天大多數生產應用程式都在使用 Python 2.7。
- Python 3 已經可以在今天的應用程式上生產部署。
- Python 2.7 只會在 2020 年之前獲得必要的安全更新。
- Python 包含了 Python 3 和 Python 2。
建議
注意:使用 Python 3 比 Python 2 更
受青睞。如果直到現在你仍然在產品中使用 Python 2 的話,可以考慮一下升級你的產品和基礎設施。如果你使用的是 Python 3,那麼,恭喜 —— 你是個有優秀品位的人。 —— Kenneth Reitz
我開門見山:
- 在新的 Python 應用中使用 Python 3。
- 如果你第一次學習 Python,熟悉下 Python 2.7 會很有幫助,但還是沒有學 Python 3 的幫助大。
- 兩個都學。它們都是 "Python" 。
- 現存的軟體大多數都依賴於 Python 2.7。
- 如果你在寫一個新的 Python 庫,最好同時支援 Python 2 和 3 。 對於一個你希望被廣泛支援的新庫,只支援 Python 3 其實是一個政治宣告,它會挑撥許多你的使用者。這其實也不是什麼問題 —— 因為慢慢的,在接下來的三年裡,情況會變得沒那麼糟糕。
那麼考慮使用 3 麼?
如果你正在選擇一個 Python 直譯器使用,由於每個版本會帶來新特性和改進的標準庫模組,還有安全和漏洞修復,我推薦你使用最新的 Python 3.x。
舉一些只使用 Python 2 的理由,例如先前存在的程式碼庫,一個 Python 2 獨有的庫,簡單/熟悉,或者你對它喜愛有加並且深受它啟發。這些都沒有什麼壞處。
有時候有可能需要你 寫出能同時執行在 Python 2.6,Python 2.7,以及 Python 3 上的程式碼 。編寫軟體的種類決定了這一過程從繁瑣到困難;另外如果你是初學者可以把這點先放一邊,你有其他更重要的事情需要操心哈。還有注意 Python 2.6 即將走向盡頭,將會被開發者棄用,所以除非因為報酬,要不然你不用寫出相容 2.6 的程式碼。
機器程式碼語言鍵盤上的按鈕
實現
當人們談及 Python 時,他們通常指的是這門語言以及它的 CPython 實現。 Python 實質上是一種語言規範,它可以用不同的方式來實現。
CPython
CPython 是 Python 實現的標準,使用 C 語言編寫。它將 Python 程式碼編譯為中間位元組碼,然後使用一個虛擬機器去解釋該位元組碼。 CPython 提供了對 Python 包和 C 擴充套件模組的最高級別的相容性。
如果你正在寫開源的 Python 程式碼,並且希望覆蓋最廣泛的受眾,那麼 CPython 是最好的選擇。如果要使用依賴於 C 擴充套件的函式,那麼 CPython 是你唯一的選擇。
Python 語言的所有版本都是用 C 實現的,因為 CPython 是實現的標準。
PyPy
PyPy 是一個用 RPython 實現的 Python 直譯器, RPython 是 Python 語言的受限靜態型別子集。該直譯器的特性是擁有一個即時(JIT)編譯器以及支援多種後端(C,CLI,JVM)。
PyPy 的目標是在提高效能的同時,對 CPython 實現標準提供最大的相容性。
假如你正在搜尋提升你 Python 程式碼效能的法門,那麼 PyPy 值得一試。 在一套基準測試中,它目前 比 CPython 快 5 倍以上。
PyPy 支援 Python 2.7。PyPy3 beta 版的目標是 Python 3。
Jython
Jython 是 Python 的一種實現,它將 Python 程式碼編譯成 Java 位元組碼,然後在 JVM(Java 虛擬機器)中執行。此外,它還能像使用 Python 模組一樣引入並使用任何 Java 類。
如果你需要與現存的 Java 庫進行互動,或者有其他必要的理由來寫執行在 JVM 上的 Python 程式碼,那麼 Jython 是最佳選擇。
Jython 目前支援 Python 2.7。
IronPython
IronPython 是 Python 的 .NET 框架實現。它能同時使用 Python 和 .NET 框架的庫,還能把 Python 程式碼暴露給 .NET 框架裡的其他語言。
Visual Studio 的 Python 工具 直接把 IronPython 整合進了 Visual Studio 開發環境,使得其成為 Windows 開發者的理想選擇。
IronPython 支援 Python 2.7。
PythonNet
Python for .NET 是一個為 Python 本地安裝和 .NET 公共語言執行庫(CLR)提供無縫整合的軟體包。這與 IronPython(見上方)採用的方式恰恰相反,與其說是競爭,不如說是補充。
Pythonnet 在如 OS X 和 Linux 等非 Windows 作業系統上啟用本地 Python 安裝的時候,需要結合 Mono 才能在 .NET 框架裡使用。它能毫無衝突的執行在包括 IronPython 裡。
Pythonnet 支援從 Python 2.6 到 Python 3.5。