已签名的Python脚本使用PyInstaller打包出现codesign失败如何解决?
macOS El Capitan 下PyInstaller打包报codesign failure的解决方法
这个问题出在两个核心原因:一是旧版El Capitan系统的codesign工具不支持新的签名参数,二是PyInstaller新版本放弃了对10.11系统的适配,同时你提前对Python脚本做的签名不会生效,PyInstaller打包会生成全新的二进制程序,需要对最终生成的程序单独签名。可按以下步骤排查解决:
- 方法1:禁用PyInstaller自动签名
如果你不需要PyInstaller帮你完成打包后程序的签名,直接添加--no-code-signing参数跳过自动签名步骤即可,命令如下:pyinstaller --no-code-signing filename.py
注:该参数仅支持PyInstaller 4.0及以上版本,如果你使用的版本更低,优先尝试下面的降级/手动签名方案。 - 方法2:降级到适配El Capitan的PyInstaller版本
最新版PyInstaller已经停止对10.11 El Capitan系统的支持,可降级到兼容的3.6版本:pip install pyinstaller==3.6
降级完成后再重新执行打包命令即可。 - 方法3:手动指定签名证书完成打包
如果你需要打包后的程序保持签名状态,可在打包时直接指定你已经申请好的证书名称:pyinstaller --codesign-identity "你的证书完整名称" filename.py
证书名称可在钥匙串访问应用中查看,需要确保证书已经被系统设为信任状态。 - 方法4:打包完成后手动执行签名
如果自动签名始终失败,可以先跳过签名完成打包,再手动调用系统codesign命令签名:codesign --force --deep --sign "你的证书完整名称" dist/你生成的程序名.app
El Capitan的codesign工具必须添加--deep参数才能完成嵌套二进制文件的全量签名。 - 额外排查点:权限问题
打包路径避免选择系统级只读目录,优先在当前用户的桌面、文档等目录下执行打包操作,权限不足时可临时添加sudo前缀执行打包命令。
内容的提问来源于stack exchange,提问作者John Patrick Kokar
相关产品推荐
相关产品推荐

