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

PyInstaller打包macOS应用执行codesign时提示bundle格式错误如何解决

解决方案

问题根源

你使用的是tkinter框架开发应用,PyInstaller打包时默认引入了无关的PyQt5依赖,嵌套的Qt Qml插件目录结构不符合苹果签名的bundle校验规则,导致签名失败。

修复步骤

  • 第一步(优先推荐,从根源消除问题):打包时排除冗余的PyQt5依赖
    你不需要用到PyQt5相关组件,执行PyInstaller打包命令时添加排除参数即可,打包后就不会生成报错的Models.2目录:

    pyinstaller 你的原有打包参数 --exclude-module PyQt5 --exclude-module PyQt5-Qt5 --exclude-module PyQt5-sip 你的入口文件.py
    

    如果使用spec文件配置打包,直接在Analysis的excludes列表中添加上述三个模块即可。

  • 第二步(如果你确实需要保留PyQt5依赖时使用):从内到外逐层签名
    苹果官方不推荐直接使用--deep参数签名分发用的应用,需要先签名所有内嵌的二进制文件,再签名主应用包:

    1. 先给报错路径下的动态库单独签名
    codesign -s "Paul F (TeamID)" -v --timestamp --entitlements /Users/fishbacp/Desktop/entitlements.plist -o runtime /Users/fishbacp/Desktop/dist/My_Application.app/Contents/MacOS/PyQt5/Qt/qml/QtQml/Models.2/libmodelsplugin.dylib
    
    1. 按照同样的规则,签名所有Contents目录下的.dylib、.framework、可执行二进制文件
    2. 最后签名整个应用包
    codesign -s "Paul F (TeamID)" -v --timestamp --entitlements /Users/fishbacp/Desktop/entitlements.plist -o runtime /Users/fishbacp/Desktop/dist/My_Application.app
    
  • 额外校验项
    确保所有需要签名的二进制文件权限正常,可执行如下命令修正权限:

    chmod -R 755 /Users/fishbacp/Desktop/dist/My_Application.app/Contents
    

    同时确认entitlements.plist已添加PyInstaller打包应用必须的权限,包括com.apple.security.cs.allow-jit、com.apple.security.cs.allow-unsigned-executable-memory等。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 16:09:01