如何减小PyInstaller打包音频转写NLP应用生成的可执行文件体积
减小打包后可执行文件体积的可行方案
- 清理冗余依赖
你当前的依赖清单包含大量未实际使用的包、开发工具类包,这些是不必要的体积来源:- 移除打包工具类依赖:
pyinstaller、pyinstaller-hooks-contrib属于打包工具,不属于程序运行必须依赖,需要从运行环境中删除,避免被误打包 - 移除未使用的第三方包:对比导入清单,
requests、certifi、charset-normalizer、idna、urllib3、click、colorama、future、protobuf均未被导入,可以全部卸载
- 移除打包工具类依赖:
- 优化torch依赖体积
torch是你当前体积超标的核心来源,完整版torch体积普遍在300MB以上:- 替换为CPU-only的精简版torch,移除cuda相关的冗余组件,单这一步就能减少至少200MB的体积
- 打包时添加参数
--exclude-module torch.cuda,手动排除torch中你用不到的cuda相关模块
- 外置预训练模型
你用到的stanza、nltk的预训练模型体积很大,不需要打包到可执行文件内部:- 修改代码逻辑,首次运行时自动将模型下载到可执行文件同级的目录存储
- 打包时排除内置的模型文件,运行时直接读取外部目录的模型即可
- 调整PyInstaller打包参数
- 开启UPX压缩:下载UPX压缩工具后,打包时添加
--upx-dir 你的UPX工具所在路径参数,可额外压缩30%-50%的最终体积 - 添加
--strip参数移除程序的调试符号,进一步减小体积 - 如果你使用单文件打包模式,已经是体积最小的打包方式;如果是多文件夹模式,可以换成
--onefile单文件打包参数减少总占用
- 开启UPX压缩:下载UPX压缩工具后,打包时添加
- 替换重型依赖
如果以上优化还是达不到体积要求,可以替换重型依赖进一步压缩:- 仅做基础的关键词提取场景下,可以不用stanza,换成更轻量的NLP工具,直接移除torch、stanza两个超大依赖,总体积能直接降到100MB以内
- 如果没有特殊的音频处理需求,也可以查找pydub的轻量替代库
参考优化后打包命令示例:
pyinstaller --onefile --strip --upx-dir ./upx --exclude-module torch.cuda --exclude-module requests --exclude-module urllib3 你的主脚本名.py
内容的提问来源于stack exchange,提问作者Laila Campos
相关产品推荐
相关产品推荐

