环境: Win10 + Python3.8
以下方法亲测可用:
1. 修改代码,将图片路径的构造方式由相对路径变为构造绝对路径,因为在执行exe时资源文件会被解压到C:\Users\xxx\AppData\Local\Temp_MEI33282这样的一个名称随机的文件夹
def resource_path(relative):
if hasattr(sys, "_MEIPASS"):
return os.path.join(sys._MEIPASS, relative)
return os.path.join(relative)
# 调用资源文件路径如下
resPath = resource_path(os.path.join("{}.jpg".format(resFileName)))
2. 生成*.spec 文件并修改。 例如: 我的程序名字是main.py , 以下命令生成main.spec 文件, 与main.py同级目录。
pyinstaller -F -c main.py
打开main.spec, 找到EXE 部分, a.datas 下面的数组里[] 按照格式添加资源文件的位置。
第一个字段是文件名; 第二个字段是绝对路径;第三个字段是运行exe时的临时位置,不用改变。
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
[("logo.jpg","E:/myproject/Demo/images/logo.jpg","DATA"),
("logo2.jpg","E:/myproject/Demo/images/logo2.jpg","DATA")],
3. 打包成exe 。 注意: 因为main.spec已经修改了,这里打包时应该用spec文件
pyinstaller -F main.spec
如果运行时有控制台的话, 需要修改main.spec, 将console=True 改为False