这是我的 main.py :
import torchvision
input("Press key")
它可以在命令行中正确运行:python main.py
我需要Windows的可执行文件。所以我做了:pyinstaller main.py
但是当我启动 main.exe 时,在/dist/main
内出现了此错误:
Traceback (most recent call last):
File "main.py", line 1, in <module>
... (omitted)
File "site-packages\torchvision\ops\misc.py", line 135, in <module>
File "site-packages\torchvision\ops\misc.py", line 148, in FrozenBatchNorm2d
File "site-packages\torch\jit\__init__.py", line 850, in script_method
File "site-packages\torch\jit\frontend.py", line 152, in get_jit_def
File "inspect.py", line 973, in getsource
File "inspect.py", line 955, in getsourcelines
File "inspect.py", line 786, in findsource
OSError: could not get source code
[2836] Failed to execute script main
似乎某些源代码未正确从pyinstaller导入。我不确定问题是 torch 模块还是 torchvision 。
其他信息:
系统信息:
[编辑]
我发现问题出在torchvision中的类 FrozenBatchNorm2d 。以下脚本与之前发布的脚本产生相同的错误:
main.py
import torch
class FrozenBatchNorm2d(torch.jit.ScriptModule):
def __init__(self, n):
super(FrozenBatchNorm2d, self).__init__()
@torch.jit.script_method
def forward(self):
pass
我复制了所有的割炬源文件。但是我仍然遇到错误...
答案 0 :(得分:1)
尝试这个猴子补丁。
def script_method(fn, _rcb=None):
return fn
def script(obj, optimize=True, _frames_up=0, _rcb=None):
return obj
import torch.jit
torch.jit.script_method = script_method
torch.jit.script = script
答案 1 :(得分:1)
猴子补丁对我不起作用,因为导入torch.jit时出现错误。
因此,在导入火炬之前,我在main.py中使用了以下解决方法:
os.environ["PYTORCH_JIT"] = "0"
很明显,您失去了JIT优化,但至少可执行文件可以工作。
答案 2 :(得分:0)
将 torchvision 降级到以前的版本可修复该错误。
pip uninstall torchvision
pip install torchvision==0.2.2.post3