PyInstaller打包的.app在同版本Mac无法运行的技术求助
解决PyInstaller打包Mac App在同版本系统闪退的问题
我之前也踩过PyInstaller打包Mac应用的坑,结合你的情况,给你几个具体的排查和解决方向:
1. 先获取崩溃的错误日志(最关键!)
因为GUI闪退不会显示错误信息,让对方打开终端,直接运行app包里的可执行文件:
/Applications/Shadowmaster.app/Contents/MacOS/Shadowmaster
把终端输出的错误信息发过来,就能精准定位问题——大概率是某个依赖没打包进去,或者路径配置错了。
2. 修正hiddenimports里的拼写错误
你的spec文件里hiddenimports写了tracback,这明显是traceback的拼写错误!PyInstaller打包时会漏掉这个标准库,运行时找不到就直接崩溃。赶紧改成traceback,重新打包试试。
3. 检查tkinter的打包完整性
tkinter作为GUI库,PyInstaller有时候会漏打包它的一些资源文件(比如主题、图标等)。你可以试试:
- 重新生成spec文件时加上
--collect-all tkinter参数:pyinstaller --collect-all tkinter --windowed --icon=icon.icns Shadowmaster.py - 或者手动在spec的
datas里添加tkinter的资源路径,先在你的Python里运行:
找到tkinter的安装目录,把整个import tkinter print(tkinter.__file__)tkinter目录加到datas里,比如:datas=[('/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/tkinter', 'tkinter')],
4. 关闭UPX压缩
有时候UPX压缩会破坏Mac系统下的可执行文件,尤其是和系统库交互的部分。把spec文件里的两处upx=True改成upx=False,重新打包后测试。
5. 修正Info.plist的配置错误
你的info_plist里CFBundleExecutable设置成了MacOS/Shadowmaster,这是错误的——这个字段只需要填可执行文件的名字Shadowmaster,不需要路径。系统会自动在Contents/MacOS目录下找它,路径填错会导致系统找不到可执行文件,直接闪退。
6. 确认系统依赖完整性
虽然两台都是macOS 10.13.2,但让对方检查是否安装了Xcode命令行工具:
xcode-select --install
有些Python标准库依赖系统的编译组件,缺失的话也会导致运行失败。
按这个顺序排查,应该能解决你的问题!
内容的提问来源于stack exchange,提问作者Jacob
相关产品推荐
相关产品推荐

