pytorch使用pyinstaller编译报错:找不到源代码
pytorch使用pyinstaller编译报错:找不到源代码
错误:PyInstaller OsError: Can’t get source code TorchScript
参考来源: https://github.com/pyinstaller/pyinstaller/issues/5673
对于那些遇到同样错误的人,我不得不使用一些技巧来使其正常工作。我将尝试为此提供指南。
请注意,前两个步骤不起作用。所以你可能想直接进入第 3 步。
解决方案指南
我做的第一件事就是修改我的.spec
文件以包含这个来获取torch
源代码:
def collect_source_files(modules):datas = []for module in modules:source = inspect.getsourcefile(module)dest = f"src.{module.__name__}" # use "src." prefixdatas.append((source, dest))return datassource_files = collect_source_files([torch]) # return same structure as `collect_data_files()`
source_files_toc = TOC((name, path, 'DATA') for path, name in source_files)
# ...
# your Analysis settings untouched
# ...
pyz = PYZ(a.pure, a.zipped_data, source_files_toc, cipher=block_cipher)
# rest of the file
# ...
然后修改FrozenImporter
(pyimod03_importers.py
)为:
class FrozenImporter(object):`...def get_source(self, fullname):"""Method should return the source code for the module as a string.But frozen modules does not contain source code.Return None."""if fullname in self.toc:sourcename = f"src.{fullname}"if sourcename in self.toc:return self._pyz_archive.extract(sourcename)[1].decode("utf-8")return Noneelse:# ImportError should be raised if module not found.raise ImportError('No module named ' + fullname)
为了做到这一点,我必须
git clone https://github.com/pyinstaller/pyinstaller.git
- 更改文件
pyinstaller/PyInstaller/loader/pyimod03_importers.py
以包含上述源代码。- 运行
pip install -e ./pyinstaller
。现在我有了Pyinstaller
的更新版本。但这给了我同样的错误。- 我从
PyTorch
问题板上的这篇文章中发现,@torch.jit.scipttransformers
模块中函数(原始错误消息中输出的函数)的注释transformers/models/deberta/modeling_deberta.py
存在c2p_dynamic_expand
问题,必须将其更改为。@torch.jit._script_if_tracing
所以我照做了。我按照与步骤2
中对PyInstaller
所做的类似方式执行了此操作FrozenImporter
:
git clone https://github.com/huggingface/transormers.git
- 更改函数
c2p_dynamic_expand
以transformers/transformers/deberta/modeling_deberta.py
使用新的@torch.jit._script_if_tracing
注释。- 以
root
身份运行pip install -e ./transformer
。现在我有了transformer
的更新版本,错误也消失了。