今天用pyinstaller将Detectron2的一个文件打包成了exe,可是在程序运行过程中出现了下面错误

Traceback (most recent call last):File "torch\_sources.py", line 21, in get_source_lines_and_filesourcelines, file_lineno = inspect.getsourcelines(obj)File "inspect.py", line 956, in getsourcelinesFile "inspect.py", line 787, in findsource
OSError: could not get source codeThe above exception was the direct cause of the following exception:Traceback (most recent call last):File "cell_analyse.py", line 8, in <module>File "<frozen importlib._bootstrap>", line 983, in _find_and_loadFile "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlockedFile "<frozen importlib._bootstrap>", line 677, in _load_unlockedFile "PyInstaller\loader\pyimod03_importers.py", line 495, in exec_moduleFile "detectron2\model_zoo\__init__.py", line 8, in <module>from .model_zoo import get, get_config_file, get_checkpoint_url, get_configFile "<frozen importlib._bootstrap>", line 983, in _find_and_loadFile "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlockedFile "<frozen importlib._bootstrap>", line 677, in _load_unlockedFile "PyInstaller\loader\pyimod03_importers.py", line 495, in exec_moduleFile "detectron2\model_zoo\model_zoo.py", line 9, in <module>from detectron2.modeling import build_modelFile "<frozen importlib._bootstrap>", line 983, in _find_and_loadFile "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlockedFile "<frozen importlib._bootstrap>", line 677, in _load_unlockedFile "PyInstaller\loader\pyimod03_importers.py", line 495, in exec_moduleFile "detectron2\modeling\__init__.py", line 2, in <module>from detectron2.layers import ShapeSpecFile "<frozen importlib._bootstrap>", line 983, in _find_and_loadFile "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlockedFile "<frozen importlib._bootstrap>", line 677, in _load_unlockedFile "PyInstaller\loader\pyimod03_importers.py", line 495, in exec_moduleFile "detectron2\layers\__init__.py", line 2, in <module>from .batch_norm import FrozenBatchNorm2d, get_norm, NaiveSyncBatchNorm, CycleBatchNormListFile "<frozen importlib._bootstrap>", line 983, in _find_and_loadFile "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlockedFile "<frozen importlib._bootstrap>", line 677, in _load_unlockedFile "PyInstaller\loader\pyimod03_importers.py", line 495, in exec_moduleFile "detectron2\layers\batch_norm.py", line 4, in <module>from fvcore.nn.distributed import differentiable_all_reduceFile "<frozen importlib._bootstrap>", line 983, in _find_and_loadFile "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlockedFile "<frozen importlib._bootstrap>", line 677, in _load_unlockedFile "PyInstaller\loader\pyimod03_importers.py", line 495, in exec_moduleFile "fvcore\nn\__init__.py", line 4, in <module>File "<frozen importlib._bootstrap>", line 983, in _find_and_loadFile "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlockedFile "<frozen importlib._bootstrap>", line 677, in _load_unlockedFile "PyInstaller\loader\pyimod03_importers.py", line 495, in exec_moduleFile "fvcore\nn\focal_loss.py", line 52, in <module>File "torch\jit\_script.py", line 1307, in scriptast = get_jit_def(obj, obj.__name__)File "torch\jit\frontend.py", line 233, in get_jit_defparsed_def = parse_def(fn)File "torch\_sources.py", line 95, in parse_defsourcelines, file_lineno, filename = get_source_lines_and_file(fn, ErrorReport.call_stack())File "torch\_sources.py", line 28, in get_source_lines_and_fileraise OSError(msg) from e
OSError: Can't get source for <function sigmoid_focal_loss at 0x000002038751F9D8>. TorchScript requires source access in order to carry out compilation, make sure original .py files are available.
[75064] Failed to execute script 'cell_analyse' due to unhandled exception!

这个错误是直接提示为sigmoid_focal_loss 这个函数的源代码没有找到,而添加源代码的程序是File “inspect.py”, line 787, in findsource,进一步追踪代码发现可以通过getfile这个函数可以找到程序具体要添加哪些模块,我在这个函数的代码里面添加了下面这行,打印出具体是哪个模块没有添加。

def getfile(object):"""Work out which source or compiled file an object was defined in."""if ismodule(object):if getattr(object, '__file__', None):return object.__file__raise TypeError('{!r} is a built-in module'.format(object))if isclass(object):if hasattr(object, '__module__'):object = sys.modules.get(object.__module__)if getattr(object, '__file__', None):return object.__file__raise TypeError('{!r} is a built-in class'.format(object))if ismethod(object):object = object.__func__if isfunction(object):object = object.__code__**print(object)**     **#在这里添加这行代码,打印出到底是哪些源代码没有添加成功**if istraceback(object):object = object.tb_frameif isframe(object):object = object.f_codeif iscode(object):return object.co_filenameraise TypeError('module, class, method, function, traceback, frame, or ''code object was expected, got {}'.format(type(object).__name__))

个人感觉这个坑爹的错误是源代码加载有关的,Detectron2使用了inspect这个模块,加载源代码,导致Pyinstaller在分析文件依赖时,没有把相关的源代码添加进去。
添加好打印代码后,再次编译生成exe,重新运行,产生如下log

<code object norm at 0x0000020384365780, file "torch\functional.py", line 1309>
<code object sigmoid_focal_loss at 0x000002038750B390, file "fvcore\nn\focal_loss.py", line 7>
<code object sigmoid_focal_loss at 0x000002038750B390, file "fvcore\nn\focal_loss.py", line 7>
Traceback (most recent call last):File "torch\_sources.py", line 21, in get_source_lines_and_filesourcelines, file_lineno = inspect.getsourcelines(obj)File "inspect.py", line 956, in getsourcelinesFile "inspect.py", line 787, in findsource
OSError: could not get source code

由此可以看出来,是fvcore这个模块没有被添加到可行exe目录下。当我把源代码库下的fvcore拷贝到生成exe所在的目录后,再次运行,就不在报fvcore找不到错误了,可以报了其它模块源代码找不到错误,我以此拷贝过去,程序便可以顺利运行了。

当然正规的解决办法应该是通过修改.spec 文件,将需要依赖的文件在打包时自动添加到编译生成的文件里面,这一步,可以参考pyinstaller的官方解决方法

Pyinstaller 打包exe运行时找不到源码,函数 错误 OSError: could not get source code相关推荐

  1. springboot maven打包jar运行,springboot mybatis druid,demo源码

    注:本文介绍的mysql版本是5.x ,如果mysql升级到8 有几个地方需要改动 https://blog.csdn.net/a704397849/article/details/108396563 ...

  2. python / 解决 pyinstaller 打包后运行时提示找不到模块的问题

    在打包时候,并没有提示错误,可以顺利打包成 exe 文件.但是在运行打包好的软件时,会提示找不到模块,本人遇到的是找不到第三方模块,例如 requests .这时候需要在打包时指定 -p 参数,后面跟 ...

  3. Python笔记-解决pyinstaller打包后运行时动态加载模块报错(No module named)

    出现的问题就是:No module named 原因是我代码里面使用了这个 importlib.import_module pyinstaller没有检测到. 百度上没有找到解决办法,在外wang找到 ...

  4. Pyinstaller 打包exe附带资源,运行时自动解压所需资源(图片文本音频等)

    前言: 用Pyinstaller 打包exe时,有时候得附带上一些资源,才能让程序不那么单调. 在网上也有很多把依赖文件打包进exe的方法,不过都只能打包一些图片或者文本而已. 还有一个就是通过修改P ...

  5. pyinstaller打包exe(32位和64位)和运行太慢等问题解决

    pyinstaller打包exe(32位和64位)和运行太慢等问题解决 文章目录 pyinstaller打包exe(32位和64位)和运行太慢等问题解决 前言 一.pyinstaller的安装 二.p ...

  6. python pyinstaller 打包exe文件,(附带图片 + 自己、别人电脑上均可以运行)

    python pyinstaller 打包exe文件,(附带图片 + 自己.别人电脑上均可以运行) 科目:windows + python pyinstaller 打包exe 内容:打包程序.图片.视 ...

  7. matlab找不到exe文件,如何修复pyinstaller在从scrip创建exe文件时找不到matlab文件的问题...

    我正试图从我的python脚本中生成一个EXE,以便在没有安装python的机器上使用GUI.目前,我的文件可以很好地调用matlab脚本并发送JSON对象.我的问题是当我试图从python脚本生成一 ...

  8. python打包exe黑框一闪而过,解决pyinstaller打包exe文件出现命令窗口一闪而过的问题...

    用pyinstaller打包的exe文件打开时,命令窗口一闪而过,并且未出现GUI界面,也看不到错误信息,然后去网上搜相关的信息,最多的两种说法: 1.添加raw_input()或者os.system ...

  9. 解决pyinstaller打包exe文件过大(菜鸟一刀切傻办法)

    pyinstaller打包exe文件过大 作为认真学习了Python两个多月的小白,觉得python还是有很多玄学,一直搞不懂明明一毛一样的步骤,为什么我用pyinstaller打包出来的exe有30 ...

  10. Pyinstaller 打包exe 报错 failed to execute script XXX的一种解决方案

    最近用PyQt5写了一个界面小程序,需要打包成exe给到其他windows上使用,一开始使用python 3.7 64位,用pyinstaller打包exe,在64位机上运行正常. 但是目标电脑是32 ...

最新文章

  1. Eclipse 中maven插件坏死解决办法
  2. 2022-01-24
  3. 【黑马程序员 C++教程从0到1入门编程】【笔记6】C++核心编程(文件操作)
  4. Access常用类型及查询语法 [Access]
  5. IP地址开启https
  6. C++/mfc错误总结
  7. python源码保护之cython
  8. 编程开发之--java多线程学习总结(4)
  9. 夏普mx2608n网络扫描到计算机,【转载】夏普复印机网络扫描教程
  10. 前端请求路径为何不能写成http://localhost:8080/**/** ?
  11. 600、000、002、200、300、400等开头的股票代表什么?
  12. python 统计英语文档词汇出现频率,以六级真题为例
  13. VS2010如何安装MSComm控件
  14. HD2500显卡驱动linux,Intel HD Graphics 2500/4000驱动免费版
  15. 无人机基于目标检测的路径规划任务
  16. 利用Jenkins+蒲公英平台显示二维码 部署Android打包踩过的坑
  17. From little Cutie to Rockin Beauty(about Hilary Duff and someone concerned.)
  18. 【电巢】什么是EMC测试?EMC测试又是如何分类的?
  19. BSGS与扩展BSGS
  20. java gb18030 转 utf-8_gb18030与utf-8

热门文章

  1. 电脑怎么装linux系统
  2. JavaScript 中的继承:ES3、ES5 和 ES6
  3. linux服务器挂掉之后
  4. 在这里,北上深成为“社科之城”
  5. win10微软拼音输入法输入文字时候下方不出现中文提示
  6. 阿里云短信服务的配置和使用
  7. 个人网站建设教程|本地网站环境搭建|网站制作教程
  8. 50 个实用小工具(图片处理、截屏录屏、格式转化、下载工具、浏览器、工具箱等)
  9. 专访杨翰深先生 | Mockplus企业版为什么能获得贵州银行的青睐?
  10. 二极管和极性电容的正负测量