Pyinstaller打包exe,丟失圖標等問題
一、原因
exe運行時會解壓一個名為'_MEI*'的資源文件夾到電腦的臨時目錄,程序結束時刪除。
程序里使用'\圖標.png'這樣的路徑,exe運行時只會搜自己所在目錄,當然找不到。
二、解決方案
1、確保圖片在這個臨時資源文件夾里
這個可以通過修'.spec'配置文件,將圖片添加進去。
(注:.spec就是Pyinstaller上次打包生成的文件,在你的python項目目錄下。)
這是我用到的三個圖片,其實就是加三條元組到'binaries'列表中
逗號前是圖片在python項目里的地址,逗號后是打包進'_MEI*'臨時文件夾的地址。
我是里邊建了一個'img'文件夾存放圖片,如直接放根目錄用點就行,如('./img/info.png','.')
最后,打包時運行
pyinstaller 程序入口.spec
,就可以將圖片資源添加進去了。(注:其它外部資源也可以這樣添加,比如.ini、.txt、.exe等等)
2、確保程序能找到這個路徑
因為每次臨時目錄的名字都不一樣,所以需要一個能動態獲取這個路徑的方法。
def getRealPath(s): # 獲取exe解壓目錄的絕對路徑 import os, sys p = os.path.realpath(sys.path[0]) p = p.replace(r'\base_library.zip', '') p = p + s return p s=r'\img\info.png' realPath=getRealPath(s) print(realPath)
代碼奉上,核心語句是'os.path.realpath(sys.path[0])'。
Python運行效果如下:
C:\Users\GuoDaXia\Anaconda3\envs\temp\python.exe D:/untitled1/測試.py D:\untitled1\img\info.png Process finished with exit code 0
打包成exe,拖到cmd窗口里運行試試吧。