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

PyInstaller打包后运行报错:bad marshal data (unknown type code)

PyInstaller打包后marshal数据错误及重复执行rth脚本问题解决

错误本质分析

  • Failed to unmarshal code object for conv ValueError: bad marshal data (unknown type code):marshal是Python序列化代码对象的核心机制,这个错误说明conv.py对应的字节码或打包时嵌入的代码数据已损坏,可能是打包缓存残留、32位环境兼容性问题,或是.spec配置错误导致模块重复打包。
  • 重复执行pyi_rth_*.py脚本:通常是.spec文件中重复配置了runtime hooks(运行时钩子),或是PyInstaller在32位环境下的打包逻辑异常,导致初始化流程被多次触发。

具体解决步骤

  • 清理打包残留文件
    删除build、dist目录以及所有__pycache__文件夹,避免损坏的缓存文件干扰重新打包:

    # Windows
    rd /s /q build dist __pycache__
    # Linux/macOS
    rm -r build dist __pycache__
    
  • 检查并修正.spec文件
    查看.spec中的datas、hiddenimports、runtime_hooks字段,确保没有重复添加conv.py或相关依赖,也没有重复引用同一rthook脚本。如果是基于自动生成的.spec修改的,对比默认生成的版本,移除多余的配置项。

  • 修复conv.py的字节码问题
    删除conv.py对应的.pyc文件(位于__pycache__目录),重新生成干净的字节码后再执行打包操作。同时确认conv.py本身没有语法错误,也未使用过不兼容marshal机制的第三方字节码处理工具。

  • 调整打包参数

    • 先跳过自定义.spec,直接用命令行打包测试,排查.spec配置问题:
      pyinstaller --console --debug=all your_main_script.py
      
    • 针对32位环境,禁用UPX压缩(UPX可能损坏32位代码对象):
      pyinstaller --console --noupx your_spec_file.spec
      
  • 验证版本兼容性
    确认Python 3.8 32bit与PyInstaller 5.13的兼容性,可尝试降级PyInstaller至5.10版本,或升级Python 3.8到最新小版本(如3.8.10),避免版本间的边缘适配问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 14:09:54