pyinstaller打包的exe太大?你需要嵌入式python玄學


pyinstaller打包一個exe動輒幾十M幾百M (特別是import pandas以后)

知乎上居然沒有人po這方面的”知識“(手動狗頭)

查了很多關於reduce pyinstaller打包出exe大小的方法

列舉如下

玄學解法1 去除不必要的庫

當我們用cmd/powershell 輸入這一段神秘代碼並且回車的時候

pyinstaller除了會打包test.py使之成為一個exe之外,還會創建一的后綴名為 .spec 的文件

長這樣

打開以后大概是這個樣子

注意選中的這一行

然后就可以愉快的在第13行的"[]"里面輸入自己不需要的庫啦

然后輸入這樣的代碼重新打包自己的exe

pyinstaller --clean -F test.spec

不嫌麻煩的話一開始也可以這么寫:

pyinstaller --clean -F test.py --exclude-module matplotlib ^ ......(此處省略)

ps:像requests這些庫啊 是和urllib有關聯的 這也就是為什么 exclude urllib可能會有錯誤產生的原因啦

原文:

Python: Excluding Modules Pyinstaller​stackoverflow.com圖標

玄學解法2 共享依賴

package multiple exe(s) sharing the same dependencies:Using Spec Files

意思大概是打包多個exe用同一個”依賴庫“ [不懂裝懂,我也沒試過 再次狗頭]

有興趣的同學可以去看一下

原文:

Importing Python modules from a select location​stackoverflow.com圖標

玄學解法3 虛擬環境

pyinstaller喜歡把沒用的庫一起打包進來

腦洞大開的程序猿(媛)們豈會輕易妥協?

我的python環境(虛擬)沒有這些庫 我看你怎么打包!

首先呢 我們需要一位名為virtualenv的同學幫助我們創建一個干凈的python虛擬環境

有請!!

pip install virtualenv

然后要做的工作當然就是創建一個虛擬環境啦

virtualenv example_env  # 命名請隨意

創建完成以后我們就會在python的Script文件夾里發現一個 與剛剛命名相同的文件夾

用cmd cd 到虛擬環境的Script目錄然后 輸入active回車

就可以開始愉快地pip安裝必要模塊 然后pyinstaller啦

原文:

How can I create the minimum size executable with pyinstaller?​stackoverflow.com圖標

想在Pycharm等IDE中使用這個環境?

Python創建virtualenv(虛擬環境)方法​www.cnblogs.com圖標

玄學解法4 UPX壓縮大法

pyinstaller一直被人詬病以后自己也在反省為什么自己的工作質量竟然···

然后人家就給了補救方法:開源的upx壓縮

the Ultimate Packer for eXecutables​upx.github.io

並且在自己的打包代碼里留給了upx一席之地(雖然把upx扔到Script目錄里會默認使用 但是有和沒有就是兩碼事對吧 upx:我也要面子的)

什么?還是會被罵? upx:這不怪我 我不背鍋

雖然使用upx打包時間會長一些 但是為了縮小占用面積 為用戶省下少得可憐的流量(加粗表示對國產三大運營商的尊敬 傾斜烘托了令人哽咽的氛圍) 為了這個可以忍!

upx在壓縮:

Users/xxx/ 文件夾名字被我p掉了 下同

但但但但但但是 報錯是什么鬼?(可能是我臉黑或者是寫的程序里有upx不認的代碼 不代表全部)

What the f**k?等了這么久就給我這個報錯窗口?

google了一大頓也沒發現什么正確的解法 所以就....干脆放棄

[19/8/10補充] 有熱心的知友在評論區po了解決方法 upx還是很好用滴


以上四種[常規]操作呢 我還是喜歡第三種 錯誤少見效快 再次但是! ——

現在是時候有請老大哥python-embedded出場了

既然pyinstaller不聽話 為什么不請出python-embedded來整治整治它呢?

python-embedded:在我面前你們都是渣渣

下一期我們介紹嵌入式python開發 代替pyinstaller

 

編輯於 2019-08-10


免責聲明!

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



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