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窗口里运行试试吧。