pyinstaller打包exe運行失敗


  使用Pyinstaller來打包自己開發的軟件時遇到的幾個問題及解決方法。工具主要功能是數據分析,使用機器學習算法完成數據訓練和預測功能。主要用到了兩個學習庫keras和sklearn,所以說在打包時出現的問題無非是sklearn和keras的后端TensorFlow在打包運行過程出錯的問題。

  注意:靈活使用Pyinstaller的參數,在首次使用pyinstaller -F xxx.py生成的xxx.exe運行出現錯誤的時候,可以以debug的模型重新編譯,即
pyinstaller -F -D xxx.py來打包,便於調試使用。

  打包完成后會在指定目錄下生成文件夾build和dist,還有xxx.spec文件。我們可以在cmd中運行dist中的xxx.exe文件,這樣我們能夠在cmd窗口中查看錯誤信息。言歸正傳,下面是遇到的幾種問題。

 

1、缺少dll、so、其它文件。

  解決方法:既然缺少某個文件,那么我們就告訴他缺少的文件在哪里。

  第一種:我們是以debug的形式打包,即參數中加入的-D。

  在cmd中的錯誤提示中會顯示程序在某個路徑下找不到文件,那么我們就在電腦中找到這個文件並放到指定路徑下。比如圖片顯示程序運行錯誤的原因是找不到VERSION這個文件(ps:這個文件中只是包含了astor這個庫的版本信息,當然這個庫是干什么用的我也不知道,估計是別的庫的依賴吧),那么我就在run文件夾創建了astor這個文件夾,然后把VERSION放進去即可。

   

  第二種:打包不加入debug或者只生成xxx.exe文件時,我們需要把缺少的文件打包到xxx.exe中。

  Pyinstaller打包參數有 --add-data這個參數,我們使用這個參數指定文件的位置以及打包的位置。還是上面的錯誤,VERSION文件在我的電腦桌面上,即C:\Users\Desktop\VERSION,那么打包時告訴程序文件的位置:

  

pyinstaller -F --add-data="C:\Users\Desktop\VERSION;astor" xxx.py
# --add-data="文件位置;缺失文件位置(注意這里是相對路徑,即相對於程序)"

  作者發現:第二種情況打包生成的xxx.exe運行時會在TMP目錄下生成一個臨時文件,這個臨時文件存放着python的一些庫文件,如果我們將缺失的數據包成功打包到xxx.exe的話會在這個臨時文件相應目錄下找到。如下圖所示,_MEI42082是運行xxx.exe臨時生成文件夾,此時,我們去這個文件夾中目錄可以找到astor這個文件了。

  總之缺少什么文件就給他指定位置。

 

2、缺少模塊

  如果出現像上圖一樣類似的問題即缺少模塊的話,通過Pyinstaller命令在打包的時候指定。

pyinstaller -F --hidden-import="numpy.core._dtype_ctypes" xxx.py

 

 

 


免責聲明!

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



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