You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在MacOS El Capitan上用PyInstaller编译Python应用时出现签名错误

解决MacOS El Capitan下PyInstaller打包的codesign签名移除错误

问题背景

为保证Python应用向前兼容,在MacOS El Capitan系统使用PyInstaller编译打包时出现错误,相同代码在Ventura和Catalina系统可正常编译。报错核心信息为:

SystemError: codesign command (['codesign', '--remove', '--all-architectures', '/Users/h/Desktop/BeansQR/BeansQR3.2/BeansQR 3.2']) failed with error code 1!
output: /Users/h/Desktop/BeansQR/BeansQR3.2/BeansQR 3.2: invalid or unsupported format for signature

原因分析

El Capitan系统自带的codesign工具版本过旧,不支持--all-architectures参数——该参数是在后续MacOS版本中才引入的。而新版PyInstaller默认会添加这个参数,导致在旧系统上执行失败。

解决方案

方案1:修改PyInstaller的osx.py文件

  • 定位到PyInstaller的工具文件路径:
    /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/PyInstaller/utils/osx.py
    
  • 找到remove_signature_from_binary函数,删除构造cmd_args代码中的'--all-architectures'参数
  • 保存文件后重新执行PyInstaller打包命令

方案2:在spec文件中禁用签名处理

  • 打开项目的.spec文件,找到EXE()定义部分
  • 添加codesign_identity=None参数,示例:
    exe = EXE(
        pyz,
        a.scripts,
        a.binaries,
        a.zipfiles,
        a.datas,
        [],
        name='BeansQR 3.2',
        debug=False,
        bootloader_ignore_signals=False,
        strip=False,
        upx=True,
        upx_exclude=[],
        runtime_tmpdir=None,
        console=False,
        codesign_identity=None,  # 添加此行禁用签名处理
        disable_windowed_traceback=False,
        target_arch=None,
        codesign_all_architectures=False,
        entitlements_file=None
    )
    
  • 保存后使用该spec文件重新打包

方案3:手动执行签名移除命令

打包报错后,手动执行不带--all-architectures的签名移除命令:

codesign --remove /Users/h/Desktop/BeansQR/BeansQR3.2/BeansQR 3.2

随后重新执行PyInstaller打包命令,可添加--noconfirm参数避免重新构建

内容的提问来源于stack exchange,提问作者Smartie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 19:58:30