问题描述:
使用pyinstaller -F ***.py打包后,运行闪退,
提示找不到资源文件。
解决方法:
实验数据处理需要,之前用Python写了一个小程序,为了方便使用就用Tk写了个界面,打包时遇到了如题一样的困惑,不过参考pyinstaller的官方文档解决了,所以建议遇到类似问题的时候官方文档是第一参考,以免浪费时间。下面是将打包数据文件的绝对路径转为相对路径的一个脚本,利用的是os的path模块和 sys._MEIPASS:from os import pathimport sysbundle_dir = getattr(sys, '_MEIPASS', path.abspath(path.dirname(file)))path_to_dat = path.join(bundle_dir, 'other-file.dat')将这个脚本加入到主脚本文件中,用转换的路径代替原来脚本中数据文件的绝对路径即可。打包数据可以利用--add-data命令或者使用.spec文件,不多赘述Reference:
作者:李且
链接:https://www.zhihu.com/question/268105244/answer/771295481
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
尝试了成功解决:
失败了,用下面的。 pyinstaller ***.py --add-data ".\*.png;."
pyinstaller -F -w -p ./ main.py --add-data ".\img.png;."
# 说明
-p ./要加上,否则打包时找不到自定义模块(相当于路径下的所有文件获取到,进行导入时可以找得到)
-F 单文件模式
-w 去除黑框
报错2:
打包后运行,报错了。明明已经有装numpy包依然报错。
ModuleNotFoundError: No module named 'numpy.random.bounded_integers'
参考此方法解决:https://blog.csdn.net/zyc121561/article/details/79562935
1、在**.sepc文件,修改hiddenimports,将报错提示缺少的包导入这里。
打包后如果还是出现缺少包,依次加入。
我的是缺少以下包, hiddenimports=['numpy.random.common', 'numpy.random.bounded_integers', 'numpy.random.entropy'],
2、将缺少的包放入hiddenimports后,再次执行pyinstaller **.sepc。完美解决