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

使用Pyarmor混淆多文件+PyInstaller打包独立exe报错求助

解决Pyarmor混淆+PyInstaller打包的两个常见问题

问题1:带-i参数混淆后出现相对导入错误

原因

-i参数会让Pyarmor为每个混淆脚本生成独立的pyarmor_runtime_xxxxxx目录,通过相对导入引入运行时模块。但PyInstaller打包后,程序的运行路径结构发生变化,相对导入无法正确定位到运行时文件。

解决方法

放弃使用-i参数,改用Pyarmor默认的共享运行时模式。这种模式下所有混淆脚本会共用同一个全局的pyarmor_runtime_xxxxxx模块,避免相对导入的路径问题。


问题2:去掉-i后出现ModuleNotFoundError: No module named 'getsha256'

原因

  • 若getsha256是自定义脚本,可能未被Pyarmor混淆,导致PyInstaller打包时未将其包含;
  • 若getsha256是第三方库,PyInstaller的自动依赖分析未识别到它;
  • 混淆后的脚本中模块引用路径被修改,PyInstaller无法解析。

解决方法

  1. 确保自定义模块被混淆
    如果getsha256是你自己的脚本,将其加入Pyarmor的混淆范围,比如:

    pyarmor gen -O dist3 -r scripts/ getsha256.py
    

    若它在scripts目录下,检查dist3目录是否存在混淆后的getsha256.py,确认-r scripts/已包含该文件。

  2. 手动告知PyInstaller添加模块

    • 打包时用--hidden-import参数指定缺失模块:
      pyinstaller --onefile --hidden-import=getsha256 main.py
      
    • 或创建main.spec文件,在hiddenimports列表中添加模块:
      a = Analysis(
          ['main.py'],
          hiddenimports=['getsha256'],
          # 其他配置项...
      )
      

    再执行pyinstaller main.spec完成打包。

  3. 检查混淆后的模块引用
    打开dist3下的混淆脚本,确认import getsha256语句未被Pyarmor错误修改,若有异常,重新执行Pyarmor混淆命令确保参数正确。


完整流程参考

  1. 混淆所有依赖的脚本:
    pyarmor gen -O dist3 -r scripts/
    
  2. 将入口脚本main.py复制到dist3目录:
    cp main.py dist3/
    
  3. 进入dist3目录执行打包命令:
    cd dist3
    pyinstaller --onefile --hidden-import=getsha256 main.py
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 19:23:19