logo资料库

解决pyinstaller 打包pytorch 的找不到源码问题.docx

第1页 / 共6页
第2页 / 共6页
第3页 / 共6页
第4页 / 共6页
第5页 / 共6页
第6页 / 共6页
资料共6页,全文预览结束
一、 Pytorch 项目打包后找不到源码问题描述及解决方案 现有一个主要由 Pytorch、Opencv3 与 Flask 库构建的多目标跟踪项目,项目地址 https://github.com/Zhongdao/Towards-Realtime-MOT 主要系统环境和库版本如下: Windows 10 1909 专业教育版 Pytorch = 1.3.0 Torchvision=0.4.1 Opencv3 = 3.3.0 Pyinstaller=4.0 Flask = 1.1.2 pyinstaller 打包命令如下: pyinstaller -D app.py 因为是 web 应用,使用-D 参数打包成文件夹形式,而非用-F 打包成一个 exe 文件, 打包完成后没有报错: 在打包好的文件夹脱离 python 环境用 cmd 独立运行程序报错找不到 pytorch 中的源码,部分 典型错误代码如下: Traceback (most recent call last): File "torch\_utils_internal.py", line 46, in get_source_lines_and_file sourcelines, file_lineno = inspect.getsourcelines(obj) File "inspect.py", line 955, in getsourcelines File "inspect.py", line 786, in findsource OSError: could not get source code …
OSError: Can't get source for torchvision\ops\misc.py. TorchScript requires source access in order to carry out compilation. Make sure original .py files are available. Original error: could not get source code [32] Failed to execute script app 解决方案参考 pyinstaller git 上的相关 issues: https://github.com/pyinstaller/pyinstaller/issues/4740 与 https://github.com/pytorch/vision/issues/1899 在本 Flask 项目的主文件 app.py 之前加入如下代码可以解决找不到 pytorch 源文件的问题: def script_method(fn, _rcb=None): return fn def script(obj, optimize=True, _frames_up=0, _rcb=None): return obj import torch.jit torch.jit.script_method = script_method torch.jit.script = script 如下图:
再利用 pyinstaller -D app.py 进行打包,打包出来的 app.exe 运行时就不存在找不到 pytorch 源 码的错误了。 双击 app.exe 后运行 web 应用,没有报错,如下图:
至此关于 pytorch 打包的问题已经解决。真正部署时在 web 项目的 dist\app\文件夹中就是用 pyinstaller 打包的项目文件,但是如果不编辑 app.spec 文件加入额外的文件夹,Flask 项目中 的 template 等网页文件夹不会被自动打包,会在访问 web 应用时因找不到网页报错,如下图: 因此需要将 web 项目开发目录下的文件夹拷到 dist\app\下: 文件夹核对部署完毕后再运行 app.exe,访问 127.0.0.1:5000/MOT 就不报错了,运行效果如 图:
二、 关于运行后 Opencv 读不进视频文件及跟踪完毕不能输出视频 的问题 在确保和 pytorch 和 Flask 库相关工作成功部署后,最后还可能出现 Opencv 不能读写视 频问题(具体表现为项目中的视频文件为空,分辨率是 0*0)。而在开发环境下确可以正常 用 CvCapture 读入视频文件,在部署后就不可以。其中主要问题主要是关于 ffmpeg 的 dll 没 有拷贝,而要在部署环境中安装 ffmpeg 编解码包。 解决方案是将 ffmpeg 的 dll 包拷贝到与 app.exe 相同的目录下: 同时安装 ffmpeg 环境,参考: https://blog.csdn.net/caicai1171523597/article/details/92994162?utm_medium=distribute.pc_releva nt_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1- utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2- 1.nonecase 才能在代码中直接用 ffmpeg 命令写视频。安装好 ffmpeg 后可以 ffmpeg -version 验证安装版 本,如下图:
最终基于 Flask + Pytorch + Opencv 的多目标跟踪项目运行如下图: 控制台处理信息: 跟踪结果:
分享到:
收藏