Pyinstaller原理詳解


Pyinstaller原理詳解

什么是Pyinstaller

Pyinstaller可以把Python程序打包成exe文件,可以在沒有Python的電腦上運行,主要用於生產用。

Python.h!

在講原理之前,我們講一下python.h這個東東。
眾所周知,Python是用C語言編寫的,內部各種復雜的API需要python.h這個東西來協調,來封裝,這樣可以提高代碼的可讀性。
python.h主要用於編寫擴展模塊,所以你可以把任意一個Python程序轉換成使用python.h的C程序。
C/C++調用Python也正是基於python.h。
當然

主原理

首先我們看了上面的鋪墊,知道想轉成exe,得先轉c。
但對於Python代碼的分析是非常復雜的,轉成C?!這不得開發個幾年才怪呢。
幸好我們不用造輪子,已經有一個名叫Cython的東西出現了。
知道.pyd的原理的都知道,其實pyd=dll≈exe,根據這個表達式可以推出,想編譯.pyd,必須先轉換Python到C。
所以我們可以直接利用Cython把Python轉換成C語言,然后編譯。
但是,像是加icon之類的還是要靠自己,所以Pyinstaller也不是完全封裝。對exe的跨平台metadata解析是十分復雜的,所以請敬畏作者的勞動成果。

另一種思路:字節碼?

除了Pyinstaller,在轉exe領域還有一條已經累死的黑馬:py2exe。
py2exe采用了和Pyinstaller完全不一樣的思路,雖然復雜,但是曾經是唯一的選擇,也算是經典。
Python是一種動態編譯語言,在執行過程中解釋器一邊運行一邊編譯下面的代碼。(這只是概括,真正的原理賊復雜,別杠,這點足夠了)
py2exe背后就是一個被hook了的Python解釋器,在執行時,不是運行而是把字節碼提供給py2exe,py2exe再把匯編字節碼整合在一起,編譯輸出exe。
這不就是PyPy嗎


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM