適合開發(fā)者的十大優(yōu)秀Python編譯器
譯文【51CTO.com快譯】由Guido van Rossum于1991年創(chuàng)建的Python,如今已是發(fā)展最快、使用最廣的編程語言之一。它可以在諸如:Web應用、桌面開發(fā)、機器學習、人工智能、數(shù)據(jù)分析、以及數(shù)據(jù)可視化等領域,得到廣泛的使用。
值得注意的是,近年來,隨著Python生態(tài)系統(tǒng)的不斷發(fā)展壯大,業(yè)界出現(xiàn)了許多代碼庫、框架、以及編譯器,可用來加速Python,克服其應用限制,甚至能夠將Python與其他編程語言(如:Java、C、C++、JavaScript 等)協(xié)同使用。本文將向您介紹十種可用于將Python代碼,按需編譯為指定輸出格式,以充分釋放Python代碼潛能的優(yōu)秀編譯器。
總的說來,目前由官方提供的、使用最廣泛的當屬CPython。當我們從官網(wǎng)處下載并使用Python時,CPython就是默認的編譯處理器。當然,在不同的領域和需求場景中,開發(fā)人員還會用到Jython、Brython、PyPy、Skulpt、IronPython、PyJs、Nuitka、WinPython等編譯器。
CPython
作為Python的原配編譯器,CPython是Python語言規(guī)范的參考實現(xiàn)。因此,它往往能夠最先獲得Python語言的所有最新、最強的功能。顧名思義,它是由純粹的C語言編寫而成。當然,您不但可以從Python代碼中調用C源代碼的函數(shù),還可以直接在Python中使用大量現(xiàn)有的C代碼庫。
值得注意的是,由于CPython在運行時解釋的是字節(jié)碼(bytecode),因此它在每個進程上都會使用全局解釋器鎖 (global interpreter lock,GIL),以確保在同一時刻,只有一個線程正在解釋字節(jié)碼。
當我們調用CPython時,那些在.py文件中編寫好的源代碼,首先會被自動編譯成包含了Python字節(jié)碼的.pyc文件,然后在經(jīng)由PVM(Python虛擬機)進行解釋??梢?,CPython其實是編譯器和解釋器的結合,而不像C語言那樣,可以直接將源代碼,編譯成為帶有CPU指令的二進制機器碼。
對于所有學生和初學者而言,CPython可以作為您開始Python編程之旅的第一步。當然,他們也可以使用其他編譯器,讓不同的編程語言與Python混合使用,去實現(xiàn)更多的特定開發(fā)需求。例如,下文將提到的Jython,會混合Java和Python代碼,利用現(xiàn)有的Java和Python庫,將代碼轉換為Java字節(jié)碼,以實現(xiàn)在JVM上運行Python。
Brython
作為JavaScript的“替代品”,Brython可用于在瀏覽器中運行包含了Python 3腳本的Web應用。也就是說,開發(fā)者只需要在那些運行著Python腳本的網(wǎng)頁上,包含brython.js即可。此處的brython.js是一種能夠在頁面上查找Python腳本,并通過Python代碼,以執(zhí)行JavaScript各項操作的引擎。
Python
- <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/brython@3.8.10/brython.min.js"> </script> <script type="text/python">Pythoncode here</script>
上面的代碼段展示了,在包含了brython.js之后,您可以使用腳本類型text/python,來添加Python腳本,并通過Python代碼,像JavaScript那樣去操作 DOM。
同時,您還可以進行Ajax的各種調用,并訪問本地的文件系統(tǒng)。當然,您也可以在基于Brython的Python腳本中,包含各種現(xiàn)有的JavaScript庫和框架,其中包括: Highcharts、vue.js、以及three.js等。
PyPy Python
雖然CPython是在Python中使用最廣泛的編譯器,但它并不是最快的一種。能夠支持Python 2和Python 3核心語言規(guī)范的PyPy,可以替代默認的Python實現(xiàn)。
在CPython中,字節(jié)碼在運行時被解釋,因此性能有所下降。而PyPy采用的是即時(just-in-time,JIT)的編譯概念。它在代碼執(zhí)行之前,就直接編譯為機器代碼,因此其執(zhí)行速度提高了接近4倍。
值得注意的是,Python代碼需要執(zhí)行大量耗時處理的進程時,PyPy的速度優(yōu)勢會比較明顯。而對于耗時較短的進程,JIT編譯器本身則可能消耗更多的時間,并抵消整體的速度優(yōu)勢。
Jython或JPython
作為使用率第二高的一種Python實現(xiàn),Jython最初被稱為JPython。它是通過Python語言來實現(xiàn)Java虛擬機的。
開發(fā)者既可以將現(xiàn)有的Java包和代碼庫,導入自己的Python程序中,又可以在Java程序中嵌入Python腳本。無論是哪種方式,Jython編譯器都會將帶有Java和Python的整體代碼組合,并編譯成為可以在JVM上運行的字節(jié)碼。
正是由于運行在JVM上,因此您可以在諸如:Windows、Linux、macOS、FreeBSD、以及Solaris等,幾乎所有的平臺上創(chuàng)建Jython項目。
Cython
Cython與CPython不同,它更像是一個超集,允許開發(fā)者在代碼中結合C和Python,從而生成C語言代碼類型的輸出,以供任何一種C/C++編譯器進行后續(xù)編譯。
可以說,Cython兼顧了C語言的速度、Python的靈活性,并且可以作為用Python編寫C擴展的強大工具。下面是有關Cython的重要說明:
- 開發(fā)者可以在Python代碼中使用靜態(tài)類型的聲明
- 可以調試使用由Cython、Python和C編寫的混合源代碼
- 可以使用現(xiàn)有庫(如:NumPy、SciPy、以及CPython生態(tài)系統(tǒng)中的其他庫),去構建高性能的應用
如果說使用CPython可以為您提供解釋字節(jié)碼的速度,那么使用Cython則能夠為您提供預編譯為機器原生代碼的速度。
Skulpt
Skulpt是由Graham Scott創(chuàng)建的一個實驗項目,其流行的速度非??臁W鳛镻ython在瀏覽器內的一種實現(xiàn),Skulpt的主要目的是提供一種良好的在線式Python編譯器。當然它也可以通過讓Web應用引擎包含Skulpt,以方便開發(fā)者編寫出被用于前端的Python腳本。
值得一提的是,Skulpt會先將Python代碼轉換為JavaScript,然后在瀏覽器中執(zhí)行相應的代碼。
Nuitka
由Kay Hayen開發(fā)和維護的Nuitka,是另一個用Python編寫的編譯器。雖然仍處于反復迭代之中,但它已經(jīng)對默認的CPython實現(xiàn)進行了運行時(run-time)上的改進。
目前,Nuitka的工作原理是將Python代碼編譯為C語言代碼,并利用libPython進行最終執(zhí)行。當然,Nuitka的最終計劃是將其替換為原始的純C語言的數(shù)據(jù)類型,而不必再去借用libpython。
注意,Nuitka可以在Apache的許可證下免費被使用,并且可以在Linux、Windows、macOS、以及其他平臺上被設置使用。
IronPython
于2006年首發(fā)的IronPython,是.NET框架的Python實現(xiàn)。它支持.NET core和.NET Standard,可以運行在Windows、macOS和Linux平臺上。IronPython之于.NET Framework,就像Jython之于Java。
借助IronPython,開發(fā)者可以使用所有的Python庫、.NET Framework、以及.NET支持的所有語言(如C#)。正是由于IronPython是用C #編寫的,因此如果您具有.NET的背景,則可以使用Python擴展工具,輕松地為Python設置VS代碼。當然,您可以根據(jù)Apache許可證,免費使用該編譯器。
PyJS
PyJS是另一款完全用Python,而非JavaScript或HTML去開發(fā)Web應用的編譯工具。在后臺,PyJS會在使用內置的Ajax框架之前,將Python代碼編譯為JavaScript。
同時,PyJS帶有一個桌面版本,以便您能夠在桌面上運行被開發(fā)應用的,功能相對應的Web版本。
WinPython
WinPython是Python的“即用型”發(fā)行版。也就是說,用戶無需任何安裝,即可在Windows PC上運行。作為另一種Python的實現(xiàn),WinPython編譯器不僅帶來了Python執(zhí)行環(huán)境,而且還包含了諸如:Scipy、Numpy、以及Pandas等各種Python庫。
WinPython的特點在于,它既是面向數(shù)據(jù)科學家的全功能性科學環(huán)境,又是面向學生和初學者的便捷工具。
Transcrypt
Transcrypt更像是一個從Python到JavaScript的轉換器。也就是說,您可以使用Transcrypt將自己的Python代碼轉換為JavaScript。據(jù)此,您可以在Web應用或Node.js服務器中,使用已編譯的代碼,作為服務器端的應用程序。
通常,Transcrypt會生成可讀的JavaScript,您可以使用源映射(source maps)和Python源代碼,對其進行調試。同時,您還可以從該工具中獲得minifier、靜態(tài)類型驗證器、以及帶有Typescript的linter。
小結
上述介紹的十種編譯器,大多能夠使開發(fā)人員在自己的項目中混合、或匹配多種語言。當然,您也可以從如下方面,去選擇恰當?shù)腜ython編譯器:
- 需要利用其他編程語言的現(xiàn)有代碼庫。
- 缺乏Java、JavaScript、C、甚至Python中某一方面的技能。
- 需加速執(zhí)行Python的運行時。
原文標題:The 10 Best Python Compilers for Developers ,作者: Sophia Rodriguez
【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】