我py代码中的图片引入使用的是项目相对路径,打包时pyinstaller只会引入py模块,这种路径引入的资源其实是不会打包进exe的。有人想的是可以直接将资源放到exe旁边,但这不是最优雅的方法,你发布exe还得给人家一堆相关资源文件,其实想要解决此类无法打包资源的问题其实只需要做两件事:
1、修改spec打包配置。
2、动态获取资源路径。
#获取资源路径 def getPath(relative_path): # 判断是否为frozen状态(即为打包运行状态) if getattr(sys, 'frozen', False): base_path = sys._MEIPASS else: base_path = os.path.abspath(".") return os.path.join(base_path, relative_path)# 返回真实路径我们需要先获取项目当前状态,判断是否为frozen状态(即为打包运行状态),是的话先获取 MEIPASS路径(MEIPASS为双击exe时系统分配的临时工作目录),不是的话直接获取绝对路径,最后返回真实路径。
root.iconbitmap(getPath(os.path.join("src","img/logo.ico")))我要在tk界面使用Label添加图片,这样即可:
imgImg = ImageTk.PhotoImage(Image.open(getPath(os.path.join("src","img/img.png")))) Label(imgFrame,image=imgImg).grid(column = 0,row = 0)最后修改spec打包配置中Analysis的datas: