最近工作上要寫個工具,想說python跨平台的特性來編譯可直接執行的程式,沒想到這真是一個坑,雖然最後工具有做出來,但把中間的心路歷程分享一下,假設你只是預計要用pyinstaller+tkinter,我會建議「千萬不要!」,假設你還是非得用,那至少幫你「少走點冤枉路!」。
Python跨平台執行檔不是想像中美好…
Hsinken
不同於使用程式碼透過IDE或CLI執行py檔,如果想方便使用者「不用安裝各種依賴的module可直接執行」或「不想給原始碼」,那就會想透過pyinstaller+tkinter來編譯各平台(mac or win)透過UI操作的執行檔,那win目前只有一個win10 build2004的一個雷要避過,但mac可真是滿滿的雷,當然不是不能解決,只是這樣就違反了想方便的初衷。
三大勸退使用Pyinstaller+Tkinter做跨平台執行檔理由:
- 程式啟動速度超慢(簡單程式啟動時間至少20秒<Macbook pro 2019頂規>)
- 檔案很大(最乾淨環境+簡單程式基本也要30mb,用Anaconda預設環境至少300mb…)
- Win10 Tkinter UI支援度OK,但OSX Tkinter UI就是惡夢。
假設你的需求只有Win10那恭喜你,只要能接受啟動超慢和檔案異常大就沒問題,如果是osx建議要多想想,中間有很多要手動編譯處理的問題,要確保有足夠時間處理。
遇到執行錯誤解決方法:
如果遇到Pandas或Numpy在Win10 build2004執行問題: RuntimeError: The current Numpy installation 1.19.4目前有問題,請降版使用1.19.3 pip install numpy==1.19.3
如果遇到OSX Catalina UI無法啟動問題: 因為問題有點複雜,我強烈建議如果可能改提供CLI的運作方式! 問題主要在於OSX內建的tkinter過於老舊UI顯示button可能會無法顯示字,但homebrew的版本tkinter要另外編再去連結,很麻煩且要編不成功就得一直重新編譯,不是很建議花大量時間在這上面。
—
喜歡這篇文章有什麼想法或進一步討論
請點擊我的FB討論區連結
HSINKEN 信賢粉絲頁
https://www.facebook.com/hsinkenfans