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
pyinstaller OSError: could not get source code相关推荐
- 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 后执行失败 ...
- pyinstaller打包torch出现OSError: could not get source code、pkg_resources.DistributionNotFound
记下主要怕以后自己忘记 首先打包先建一个虚拟环境,就装上打包的python需要的包,这样打包起来错误可能会少点,而且速度也会快些,大小也可能小些,如何创建可以参考我的另一篇博客https://blog ...
- Understanding The React Source Code
Understanding The React Source Code - Initial Rendering (Simple Component) I UI updating, in its ess ...
- DevExpress Components16.2.6 Source Code 编译
DevExpress 是一个比较有名的界面控件套件,提供了一系列优秀的界面控件.这篇文章将展示如何在拥有源代码的情况下,对 DevExpress 的程序集进行重新编译. 特别提示:重编译后,已安装好的 ...
- 转: Source Code Lookup in Eclipse(主要讲的是java的)
Source Code Lookup in Eclipse https://www.intertech.com/Blog/source-code-lookup-in-eclipse/
- python3 pycharm 远程调试 启动报错 ValueError: source code string cannot contain null bytes
现象: 启动远程调试时,报错 Traceback (most recent call last):File "/root/.pycharm_helpers/pydev/pydevd.py&q ...
- 退役笔记一#MySQL = lambda sql : sql + #39; Source Code 4 Explain Plan #39;
Mysql 查询运行过程 大致分为4个阶段吧: 语法分析(sql_parse.cc<词法分析, 语法分析, 语义检查 >) >>sql_resolver.cc # JOIN.p ...
- Source Code Collection for Reproducible Research
Source Code Collection for Reproducible Research [ http://www.csee.wvu.edu/~xinl/source.html] " ...
- Google Chrome Source Code 源码下载
2019独角兽企业重金招聘Python工程师标准>>> Goolgle 于 2008.09.02 发布了浏览器 Google Chrome.Google Chrome 使用的内核源码 ...
最新文章
- Ubuntu 18 系统安装教程
- 百分点内存数据库架构演变
- 【深入Java虚拟机JVM 04】JVM内存溢出OutOfMemoryError异常实例
- linux 6.3 vnc安装包,CentOS 6.3安装和配置VNC
- MySQL调优(三):索引基本实现原理及索引优化,哈希索引 / 组合索引 / 簇族索引等
- linux中动态链接库用扩展名,Linux操作系统下动态库的生成及链接方法是什么?...
- my-medium.cnf_您的手机如何打开medium.com-我将让门卫和图书管理员解释。
- 项目中CI缓存适配器的使用
- macaca使用中问题解决方法整理
- c++ 字典_再来瞄一眼字典与集合?
- Java之Exception
- oracle创建表不在对应表空间,oracle创建表空间
- 第12章 数据库完整性
- 玩转计划任务命令:schtasks
- Teraterm 脚本
- mes系统服务器架构,MES系统三大层结构是什么
- CRM八面体:客户关系管理成功案例2 Yorkshire Water
- java 反射,根据类获取 属性名字和值
- 爬虫从头学之Requests+正则表达式爬取猫眼电影top100
- 微信运动步数:小程序+Java后端,源码可下载