pyinstaller OSError: could not get source code

pyinstaller打包pytorch框架分类模型报错,

报错:pyinstaller OSError: could not get source code

解决思路:网上大部分资料都是降低torchvision,然后继续解决新的报错,这里提供另一个思路,就是直接把报错的框架代码注释了,项目急着部署,有点简单粗暴,各位大佬轻喷。

解决步骤:

  首先可以看到该错误本质就是获取源码失败了,其实就是pyinstaller打包没有把这部分依赖引入进来,可能可以通过--add data另外引入包,不过我没有尝试,希望有大佬能指点一下。而我是直接修改torchvision源代码,其实就是把使用jit包的代码注释掉了以及把使用了jit的代码注释了。jit可以理解为pytorch版本的脚本语言,专门用来引入创建可序列化和可优化模型的方法。如果不确定项目是否有使用该模块或者改动源码是否有影响,可以做好备份先打包运行成功,最后试试模型推理效果。

1、看报错代码可以看出,是在torchvision/ops/misc.py路径使用到了jit,导致引入jit,因此需要到源码,找到torchvision/ops/misc.py使用jit的地方

如图所示FrozenBatchNorm2d类导致引入jit,因此继续追踪

最终锁定backbone_utils.py文件,需要此文件去除对FrozenBatchNorm2d类的使用,因为该类需要配合jit引入一些脚本。misc_nn_ops.FrozenBatchNorm2d是用来在预训练模型时候,冻结住bn的参数,大致就是训练模型才会使用到。

1、进入你所在的anaconda安装目录下,我的是

/opt/anaconda3/envs/classify/lib/python3.7/site-packages/torchvision/models/detection

2、修改backbone_utils.py文件,注释掉对jit的使用,注意一定要备份源码文件

3、下面这个步骤可能不需要,可以先尝试重新打包看看还会不会报错。我注释了上面代码之后发现还是有地方会去引用jit,所以还需要把jit相关脚本注释了。注意还是需要备份。

进入/opt/anaconda3/envs/classify/lib/python3.7/site-packages/torch/jit

修改frontend.py所在目录的__init.py文件,将jit.frontend引入去掉(这里可以看到也是在最上面的报错图里面出现的),

同时将相关函数全部去除。

 

4、最后重新打包,看看能否正常运行,如果可以运行还没完,再测试一下模型的推理效果和速度,如果和开发环境一致(主要确认注释了源代码是否有影响)即可宣布大功告成!

5、如果是其他类,只要判断对模型推理没影响也可以使用上述方法,当然,正规的操作还是多研究pyinstaller的正确使用姿势。

https://pyinstaller.org/en/stable/spec-files.html#adding-files-to-the-bundle

 补充:另外我看github官网下也有issue在讨论,可以参考:

error about pytorch.jit when run *.exe · pyinstaller pyinstaller · Discussion #6230 · GitHub

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值