首先,pyc和pyo都是由.py檔案生成的位元組碼檔案。pyo相比pyc,少了斷言和debug資訊,在體積上小一些。還有,在python3.5之後已經不是.pyo檔案,而是.opt-1.pyc形式。
編譯過程只是把python原始碼編譯轉化為位元組碼,位元組碼需透過直譯器連線轉化為機器碼執行。這也是python為什麼可以跨平臺的原因。
關於為什麼不能編譯為平臺可執行檔案,對著這個問題找了些資料,發現還真的可以。
安裝pyinstaller,如下:
安裝成功後,用經典的Hello World程式碼測試下。index.py檔案內容如下:
使用pyinstaller將.py檔案編譯成二進位制檔案,然後執行下,如下:
順利打印出了 Hello World,一切正常。
那效能如何呢?接下來分別測試下.py、.pyc、opt-1.pyc和二進位制四種執行方式的執行時間。
.py檔案
耗時0.030s
.pyc檔案
耗時0.029s
opt-1.pyc
二進位制檔案
耗時0.020s。
總結
四種執行方式,前三種的時間差異很小,可見原始碼到位元組碼的轉化時間很短。當編譯成二進位制可檔案執行時間縮小了很多,效能提升還是挺明顯的。
測試的比較粗糙,pyinstaller第一次使用,你可以自己再仔細研究研究它的文件。
首先,pyc和pyo都是由.py檔案生成的位元組碼檔案。pyo相比pyc,少了斷言和debug資訊,在體積上小一些。還有,在python3.5之後已經不是.pyo檔案,而是.opt-1.pyc形式。
編譯過程只是把python原始碼編譯轉化為位元組碼,位元組碼需透過直譯器連線轉化為機器碼執行。這也是python為什麼可以跨平臺的原因。
關於為什麼不能編譯為平臺可執行檔案,對著這個問題找了些資料,發現還真的可以。
安裝pyinstaller,如下:
安裝成功後,用經典的Hello World程式碼測試下。index.py檔案內容如下:
使用pyinstaller將.py檔案編譯成二進位制檔案,然後執行下,如下:
順利打印出了 Hello World,一切正常。
那效能如何呢?接下來分別測試下.py、.pyc、opt-1.pyc和二進位制四種執行方式的執行時間。
.py檔案
耗時0.030s
.pyc檔案
耗時0.029s
opt-1.pyc
耗時0.029s
二進位制檔案
耗時0.020s。
總結
四種執行方式,前三種的時間差異很小,可見原始碼到位元組碼的轉化時間很短。當編譯成二進位制可檔案執行時間縮小了很多,效能提升還是挺明顯的。
測試的比較粗糙,pyinstaller第一次使用,你可以自己再仔細研究研究它的文件。
PyInstaller Manual