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

pyinstaller OSError: could not get source code相关推荐

  1. Pyinstaller 打包 torch 后执行失败 OSError: could not get source code

    1. 问题现象 系统环境 Python 3.6.9 torch 1.2.0 torchvision 0.4.0 Pyinstaller 4.5.1 Pyinstaller 打包 torch 后执行失败 ...

  2. pyinstaller打包torch出现OSError: could not get source code、pkg_resources.DistributionNotFound

    记下主要怕以后自己忘记 首先打包先建一个虚拟环境,就装上打包的python需要的包,这样打包起来错误可能会少点,而且速度也会快些,大小也可能小些,如何创建可以参考我的另一篇博客https://blog ...

  3. Understanding The React Source Code

    Understanding The React Source Code - Initial Rendering (Simple Component) I UI updating, in its ess ...

  4. DevExpress Components16.2.6 Source Code 编译

    DevExpress 是一个比较有名的界面控件套件,提供了一系列优秀的界面控件.这篇文章将展示如何在拥有源代码的情况下,对 DevExpress 的程序集进行重新编译. 特别提示:重编译后,已安装好的 ...

  5. 转: Source Code Lookup in Eclipse(主要讲的是java的)

    Source Code Lookup in Eclipse https://www.intertech.com/Blog/source-code-lookup-in-eclipse/

  6. python3 pycharm 远程调试 启动报错 ValueError: source code string cannot contain null bytes

    现象: 启动远程调试时,报错 Traceback (most recent call last):File "/root/.pycharm_helpers/pydev/pydevd.py&q ...

  7. 退役笔记一#MySQL = lambda sql : sql + #39; Source Code 4 Explain Plan #39;

    Mysql 查询运行过程 大致分为4个阶段吧: 语法分析(sql_parse.cc<词法分析, 语法分析, 语义检查 >) >>sql_resolver.cc # JOIN.p ...

  8. Source Code Collection for Reproducible Research

    Source Code Collection for Reproducible Research [ http://www.csee.wvu.edu/~xinl/source.html] " ...

  9. Google Chrome Source Code 源码下载

    2019独角兽企业重金招聘Python工程师标准>>> Goolgle 于 2008.09.02 发布了浏览器 Google Chrome.Google Chrome 使用的内核源码 ...

最新文章

  1. Ubuntu 18 系统安装教程
  2. 百分点内存数据库架构演变
  3. 【深入Java虚拟机JVM 04】JVM内存溢出OutOfMemoryError异常实例
  4. linux 6.3 vnc安装包,CentOS 6.3安装和配置VNC
  5. MySQL调优(三):索引基本实现原理及索引优化,哈希索引 / 组合索引 / 簇族索引等
  6. linux中动态链接库用扩展名,Linux操作系统下动态库的生成及链接方法是什么?...
  7. my-medium.cnf_您的手机如何打开medium.com-我将让门卫和图书管理员解释。
  8. 项目中CI缓存适配器的使用
  9. macaca使用中问题解决方法整理
  10. c++ 字典_再来瞄一眼字典与集合?
  11. Java之Exception
  12. oracle创建表不在对应表空间,oracle创建表空间
  13. 第12章 数据库完整性
  14. 玩转计划任务命令:schtasks
  15. Teraterm 脚本
  16. mes系统服务器架构,MES系统三大层结构是什么
  17. CRM八面体:客户关系管理成功案例2 Yorkshire Water
  18. java 反射,根据类获取 属性名字和值
  19. 爬虫从头学之Requests+正则表达式爬取猫眼电影top100
  20. 微信运动步数:小程序+Java后端,源码可下载

热门文章

  1. 5个步骤实现软件质量的快速提升
  2. 找回光猫超级管理员密码(烽火HG220G-U)
  3. 融媒宝入门教程(二):融媒宝如何如何做自媒体一键发布?
  4. 汽车SUV、CRV、SRV,RAV,HRV、MPV、CUV,NCV,RV的定义与解释
  5. HTML表格标签超级详细
  6. 计算机专业英语第六单元,计算机专业英语 (六)(示例代码)
  7. 19 个 Android 开发工具
  8. slab、slob和slub
  9. QQ邮箱的SMTP交互过程
  10. 使用for循环打印直角三角形(实心/空心)、等腰三角形(实心/空心),菱形(实心/空心)