PyInstaller打包PaddleOCR工具体积过大,如何优化?
解决PaddleOCR PyInstaller打包体积过大与模块缺失问题
一、定位不必要的大型依赖项
- 分析PyInstaller打包日志:执行打包命令时添加
--log-level DEBUG参数,例如pyinstaller --log-level DEBUG your_script.py。日志会完整记录所有被打包的模块、文件路径及体积,重点关注几GB级的目录(如paddle、paddleocr下的冗余子文件夹),对比代码实际调用的功能,标记未使用的模块。 - 生成代码依赖树:使用
pydeps工具(本地运行,无需联网)生成代码的依赖关系图,命令为pydeps your_script.py --output dot,可视化后可直观看到哪些依赖是代码未实际调用的,这些就是优先排除的对象。 - 检查打包后文件结构:在onedir模式下,打开生成的
dist文件夹,按文件大小排序,定位体积最大的文件/目录。比如PaddleOCR默认会打包多个预训练模型,若仅用到其中一个,可直接删除未使用的模型文件后重新打包。
二、生成可靠的PyInstaller Spec文件
- 从默认Spec文件逐步优化:先通过
pyinstaller your_script.py生成基础spec文件,不要直接使用AI生成的版本,手动修改以下部分:- 排除冗余模块:在
Analysis段的excludes参数中添加明确未使用的依赖。例如无需GPU支持时,排除paddle.fluid.core_avx、paddle.fluid.cuda等GPU相关模块;仅用文字识别功能时,排除paddleocr.tools.infer_det等检测模块。 - 补全缺失模块:运行打包后的程序,记录报错的缺失模块,逐个添加到
hiddenimports列表,避免一次性批量添加导致冗余。 - 手动指定资源文件:通过
datas参数仅打包所需的预训练模型,例如datas=[('path/to/your/used_model', 'paddleocr/ppocr/utils/')],替代PyInstaller自动打包所有模型的行为。
- 排除冗余模块:在
- 2025年可用的辅助工具:
- PyInstaller-Analyzer:可扫描代码实际调用的依赖,自动生成包含合理
excludes和hiddenimports的初始spec文件,减少手动排查工作量。 - PaddleOCR定制化Spec模板:社区针对PaddleOCR打包场景推出的开源模板,默认排除冗余模型与GPU依赖,可直接基于模板适配自身代码。
- PyInstaller-Analyzer:可扫描代码实际调用的依赖,自动生成包含合理
三、额外体积优化技巧
- 精简预训练模型:删除
paddleocr/ppocr/utils/下未使用的检测、方向分类模型,或在代码中明确指定仅加载所需模型。 - 合理使用UPX压缩:UPX对PaddleOCR核心二进制文件(如
.so、.dll)压缩可能导致运行错误,建议仅压缩非核心Python模块与资源文件。 - 使用干净虚拟环境:在仅安装代码必需依赖(如paddleocr、pyinstaller)的虚拟环境中打包,避免PyInstaller混入无关系统依赖。
内容的提问来源于stack exchange,提问作者HelloFriends
相关产品推荐
相关产品推荐

