pyinstaller 打包常見問題

 

安裝pyinstaller:pip install pyinstaller

 

使用基本命令 

pyinstaller -option xxx.py
-d    生成一個文件目錄包含可執行文件和相關動態鏈接庫和資源文件等
-F    僅生成一個可執行文件
-w    控制檯
 
 

常見問題

1、打包後文件大小

  • 通常python打包爲可執行文件都會得到一個較大的包,這是無法避免的,但是我們還是可以通過一些方法來儘量精簡打包後的執行程序:在代碼中減少不必要的import,如from xxx import *
  • 在精簡的運行環境(如原生python環境)下打包,缺什麼包就下什麼包,避免不必要的python包被打包入程序。尤其是anaconda這樣的集成環境下打包的結果會大很多。

2、No module named ‘xxx

 

>>解決方法1:

在代碼裏import對應模塊
 

>>解決方法2:

spec文件中主要包含4個class: Analysis, PYZ, EXE和COLLECT.
  • Analysis以py文件爲輸入,它會分析py文件的依賴模塊,並生成相應的信息
  • PYZ是一個.pyz的壓縮包,包含程序運行需要的所有依賴
  • EXE根據上面兩項生成
  • COLLECT生成其他部分的輸出文件夾,COLLECT也可以沒有

pyinstaller在進行打包時,會解析打包的python文件,自動尋找py源文件的依賴模塊。但是pyinstaller解析模塊時可能會遺漏某些模塊(not visible to the analysis phase),造成打包後執行程序時出現類似No Module named xxx。打開.spec文件,添加缺少的module。

例如:
添加hiddenimports=['cython',  'sklearn',  'sklearn.utils._cython_blas'],
 
通過配置spec腳本,最後執行pyinstaller xxx.spec完成自定義的打包,這一步很重要
 
 
 

3、Failed to execute scipt

 

原因:出現上圖的錯誤,可能是曾經的打包參數的文件信息還在, 打包可能就會遇到問題。也可能是缺少某個module造成的

解覺方法:依次刪除build、dist、xxx.spec這三個用於存儲打包配置的文件,再重新打包。如果還是報錯,查看錯誤信息,一般是缺少某個module造成的,具體見問題2

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章