上一篇就以为坑全踩完了,已经变成打包大神了,结果又遇到新问题😔
为了给我的小工具加个鸭鸭图标(这图标完全可以不加啊!),我又进入了找不到资源这个坑
明明打包的命令已经加上--add-data ”res;res“,打包后依然提示not defined
终于找到以下参考的2020年的文章,找到原因:
原因是当app运行的时候,会先把资源解压到一个系统的临时目录,包括打包进去的 images文件,但是坑爹的是,此时的代码并不能直接通过 “images/alien.bmp” 这样的相对路径来得到文件
并且根据文中给出的解决方案:
这时需要用到 sys 的一个半私有的属性
sys._MEIPASS
,根据官方的说明,它是 pyinstaller 运行时创建的临时目录的绝对路径。需要在程序运行时判断当前是不是有这个属性,如果有的话,生成临时目录下图片的绝对路径,如果没有的话,那就直接返回当前程序的绝对路径def get_resource_path(relative_path): if hasattr(sys, '_MEIPASS'): return os.path.join(sys._MEIPASS, relative_path) return os.path.join(os.path.abspath("."), relative_path)
在需要使用路径的地方调用该方法去获取资源文件
最终通过添加资源文件+修改获取文件路径解决
第一步,将代码中获取文件路径,改成调用上面写的方法
self.iconbitmap(get_resource_path('res/yaya.ico'))
第二步,打包时加上资源文件
根据你用的打包方法,可以在命令行中添加--add-data ”res;res“
也可以在spec文件中data加上数据。
打包成功!!!
但是我还准备瞎搞一些东西,再试试spec里的参数,看看还能碰上什么坑