使用PyInstaller打包的Python应用在macOS Big Sur上无法运行
解决方案
1. 更换打包命令
你直接执行pyinstaller --windowed --onefile main.py时,PyInstaller会生成全新的spec文件,覆盖你提前编写好的配置,导致你声明的资源文件、依赖模块没有被打包进应用,这是首要问题。
正确的打包命令是直接基于你写好的spec文件执行:
pyinstaller main.spec
2. 适配打包后的资源路径
macOS下.app包运行时的工作目录和开发环境不一致,直接用相对路径读取data.db、logo.png会触发文件不存在的错误,导致程序闪退。
在你的代码中加入路径适配逻辑:
import sys import os def fetch_resource(relative_path): # 适配PyInstaller打包后的运行环境 if hasattr(sys, "_MEIPASS"): base_dir = sys._MEIPASS else: base_dir = os.path.abspath(".") return os.path.join(base_dir, relative_path)
所有读取资源的位置都替换为该函数返回的路径,例如:
# 原代码:logo = PhotoImage(file="logo.png") logo = PhotoImage(file=fetch_resource("logo.png")) # 原代码:conn = sqlite3.connect("data.db") conn = sqlite3.connect(fetch_resource("data.db"))
3. 排查其他问题
如果修改后仍无法正常启动,可通过以下方式定位问题:
- 打开终端执行命令直接运行.app的可执行文件,查看错误输出:
./dist/main.app/Contents/MacOS/main - 若提示无法验证开发者:打开「系统偏好设置」-「安全性与隐私」-「通用」,允许该应用运行
- 暂时将spec文件中的
console=False修改为console=True后重新打包,运行时会弹出终端窗口打印报错信息,问题解决后再改回console=False即可
内容的提问来源于stack exchange,提问作者JBrown
相关产品推荐
相关产品推荐

