使用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无法解析。
解决方法
确保自定义模块被混淆
如果getsha256是你自己的脚本,将其加入Pyarmor的混淆范围,比如:pyarmor gen -O dist3 -r scripts/ getsha256.py若它在
scripts目录下,检查dist3目录是否存在混淆后的getsha256.py,确认-r scripts/已包含该文件。手动告知PyInstaller添加模块
- 打包时用
--hidden-import参数指定缺失模块:pyinstaller --onefile --hidden-import=getsha256 main.py - 或创建
main.spec文件,在hiddenimports列表中添加模块:a = Analysis( ['main.py'], hiddenimports=['getsha256'], # 其他配置项... )
再执行
pyinstaller main.spec完成打包。- 打包时用
检查混淆后的模块引用
打开dist3下的混淆脚本,确认import getsha256语句未被Pyarmor错误修改,若有异常,重新执行Pyarmor混淆命令确保参数正确。
完整流程参考
- 混淆所有依赖的脚本:
pyarmor gen -O dist3 -r scripts/ - 将入口脚本
main.py复制到dist3目录:cp main.py dist3/ - 进入
dist3目录执行打包命令:cd dist3 pyinstaller --onefile --hidden-import=getsha256 main.py
内容的提问来源于stack exchange,提问作者johny w
相关产品推荐
相关产品推荐

