引言
第一次尝试用 Pyinstaller 打包 pytorch 代码,碰见了很多问题,也耗费了许多时间!想把这个过程中碰到的问题与解决方法记录一下,方便后来者
一、开箱使用
1.1 基本流程
在 windows 平台上,打包 pytorch 代码的基本流程如下:
- 环境配置与测试
- 打包与本地调试
- 生产环境部署与测试
1.2 环境配置与测试
在 Pycharm 打开项目,点击 Terminal,输入命令 pip install pyinstaller,安装打包框架Pyinstaller,后编写测试文件 hello.py:
if __name__ == '__main__':
print("Hello World!")
while True:
pass
需确保 Terminal 路径为项目根目录,执行 pyinstaller -F hello.py 开始打包!在文件夹 dist 中找到 hello.exe 程序,若运行通过,说明环境配置成功
1.3 打包与本地调试
实际的项目一般是多文件,打包过程较复杂,需把握两个核心要素:
- spec文件的配置
- 依赖项补齐
1.3.1 spec文件的配置
关于.spec文件配置详见参考资料 [1],本文不赘述
1.3.2 依赖项补齐
在测试阶段,应使用-D模式打包,方便分析缺失的依赖项。运行打包后的程序,常报如下错误:
以上的输出信息表明缺少 caffe2_nvrtc.dll 或对应的 依赖项,补齐过程如下:
- 判断输出信息路径中 caffe2_nvrtc.dll 是否存在
- 若不存在,直接在 Anaconda 环境搜索 caffe2_nvrtc.dll,粘贴到 根目录
- 若存在,说明是缺少依赖项,使用 Dependencies 工具分析 caffe2_nvrtc.dll 所需要的依赖项,后补齐到根目录下
Dependencies 是一个分析依赖项的工具,可在参考资料 [2] 中安装,使用时直接将 dll文件 拖进去。这里以 torch_python.dll 举例
可以发现,缺少若干个dll文件,补齐即可。重复迭代上述补齐操作,基本可解决dll报错的问题
1.4 生产环境部署与测试
博主使用的是pytorch的GPU版本,故在生产环境上需配置cuda。建议pytorch程序显式提供cpu推理功能,以便在测试时可排除cuda环境造成的问题。最后,祝大家好运,打包成功那一刻是蛮喜悦的!
参考资料
[1] spec文件配置
[2] Dependencies的安装
[3] python项目(非单一.py文件)用Pyinstaller打包发布成exe,在windos上运行程序
[4] 嘗試使用Pyinstaller打包yolov5中detect.py文件(含pytorch框架)所遇到的問題
[5] pyinstaller打包经验分享以及一些错误解决方法