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嗎
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/280886.html
標籤:其他
下一篇:Git實用技巧31招
