mac下使用Pyinstaller打包程序遇到的问题总结
打开app程序闪退,定位问题
运行pyinstaller -F -w **.py生成的app文件,会闪退,此时可以运行与app同名的文件夹里的同名Unix可执行文件,这样可以在命令行里看到程序的输出。
类似下图:
闪退的原因是查找不到图片文件
在网上查询之后,有个比较简单的实现方法
def resource_path(relative_path):
if getattr(sys, 'frozen', False): # 是否Bundle Resource
base_path = sys._MEIPASS
else:
base_path = os.path.abspath(".")
return os.path.join(base_path, relative_path)
代码中引用图片的路径是经过上面函数转换后的路径,例如设置窗口标题icon
然后使用命令打包时添加–add-data参数(左边是你要添加的filename(相对路径即可),右边是拷贝到项目中之后的名字。windows使用分号;分割,macOS或Linux使用:分隔,后面使用.表示使用原文件名)
mac示例:
pyinstaller -w --add-data fur.png:. --add-data snow.png:. GUI.py
还发现一个问题,打包参数中不能使用-F,运行使用-F打出来的app程序会闪退,使用-D则不会(即使你删除了disk里的与app同名的文件夹,运行app也是可以成功的)。原因不知。
mac应用程序设置图标
同样是通过-i参数指定图标不过,macos和Windows不一样的是,macos使用icns格式的文件,Windows使用ico格式的文件。