前言
第一次使用pyinstaller打包exe,结果出现了这种问题,也是各种百度、谷歌了好久之后才找到了可行的解决方法。
环境
windows10
python3.8.9
pytorch1.8.2
错误信息
Traceback (most recent call last):
File "torch\_utils_internal.py", line 55, in get_source_lines_and_file
File "inspect.py", line 979, in getsourcelines
File "inspect.py", line 798, in findsource
OSError: could not get source code
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "main.py", line 19, in <module>
File "<frozen importlib._bootstrap>", line 991, in _find_and_load
File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
File "PyInstaller\loader\pyimod03_importers.py", line 487, in exec_module
File "my01\utils\my01_get_train_record.py", line 5, in <module>
File "<frozen importlib._bootstrap>", line 991, in _find_and_load
File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
File "PyInstaller\loader\pyimod03_importers.py", line 487, in exec_module
File "util\util.py", line 16, in <module>
File "<frozen importlib._bootstrap>", line 991, in _find_and_load
File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
File "PyInstaller\loader\pyimod03_importers.py", line 487, in exec_module
File "mm01_p\mm01_p_main.py", line 17, in <module>
File "<frozen importlib._bootstrap>", line 991, in _find_and_load
File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
File "PyInstaller\loader\pyimod03_importers.py", line 487, in exec_module
File "mm01_p\tools\train_mm_p.py", line 8, in <module>
File "<frozen importlib._bootstrap>", line 991, in _find_and_load
File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
File "PyInstaller\loader\pyimod03_importers.py", line 487, in exec_module
File "detectron2\engine\__init__.py", line 11, in <module>
File "<frozen importlib._bootstrap>", line 991, in _find_and_load
File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
File "PyInstaller\loader\pyimod03_importers.py", line 487, in exec_module
File "detectron2\engine\hooks.py", line 19, in <module>
File "<frozen importlib._bootstrap>", line 991, in _find_and_load
File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
File "PyInstaller\loader\pyimod03_importers.py", line 487, in exec_module
File "fvcore\nn\__init__.py", line 4, in <module>
File "<frozen importlib._bootstrap>", line 991, in _find_and_load
File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
File "PyInstaller\loader\pyimod03_importers.py", line 487, in exec_module
File "fvcore\nn\focal_loss.py", line 52, in <module>
File "torch\jit\_script.py", line 986, in script
File "torch\jit\frontend.py", line 240, in get_jit_def
File "torch\_utils_internal.py", line 62, in get_source_lines_and_file
OSError: Can't get source for <function sigmoid_focal_loss at 0x000001FF0C856430>. TorchScript requires source access in order to carry out compilation, make sure original .py files are available.
[20628] Failed to execute script 'main' due to unhandled exception!
这个错误花了好长时间才算解决了,也尝试了网上的各种解决方法,终于找到一种能解决问题的方法,如下:
只需要在import torch 上面无脑加入一下代码就好了,我报错的模块是main文件,打包的也是main文件,所以直接在main的import torch上面加入了一下代码。我的其它模块也又使用import torch,但是不需要这样操作也可以。
def script_method(fn, _rcb=None):
return fn
def script(obj, optimize=True, _frames_up=0, _rcb=None):
return obj
import torch.jit
script_method1 = torch.jit.script_method
script1 = torch.jit.script
torch.jit.script_method = script_method
torch.jit.script = script