You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyInstaller打包含PyTorch代码生成exe时报OSError问题求助

错误原因

该报错是TorchScript JIT编译的固有要求:带@torch.jit.script或@torch.jit.trace装饰的函数执行时需要读取对应的原始.py源码文件,而PyInstaller默认打包流程只会将.py编译为.pyc字节码归档,不会携带原始源码,且你当前的配置只收集了torch核心库的单文件源码,遗漏了swish_jit函数所属的第三方库源码。

解决步骤

  1. 修改spec文件头的导入逻辑,新增所有包含JIT函数的第三方库导入:
# 原有导入保留,新增以下内容
import segmentation_models_pytorch as smp
import lungmask
  1. 重写源码收集函数,递归收集所有包内的.py文件,替换你原有简单的collect_source_files函数:
def collect_source_files(packages):
    datas = []
    for pkg in packages:
        pkg_root = Path(inspect.getsourcefile(pkg)).parent
        pkg_parent_path = pkg_root.parent
        # 递归遍历包下所有py文件
        for py_file in pkg_root.rglob("*.py"):
            rel_path = py_file.relative_to(pkg_parent_path)
            dest_dir = str(Path("src") / rel_path.parent)
            datas.append((str(py_file), dest_dir))
    return datas
  1. 修改源码收集调用,传入所有需要带源码的包:
    把原来的source_files = collect_source_files([torch])替换为:
source_files = collect_source_files([torch, efficientnet_pytorch, smp, lungmask])
  1. 在test.py开头添加运行时路径配置,让程序打包运行时能找到源码目录:
# 放在所有import的最前面
import sys
from pathlib import Path
# 判断是否是打包后的运行环境
if getattr(sys, 'frozen', False):
    src_root = str(Path(sys._MEIPASS) / "src")
    if src_root not in sys.path:
        sys.path.insert(0, src_root)

可选优化

你当前配置直接打包了完整的torch、torchvision目录,最终生成的可执行文件体积会非常大,解决报错后可以手动剔除不需要的算子、CUDA架构相关的冗余文件,缩减体积。

内容的提问来源于stack exchange,提问作者Ramin Nateghi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 15:39:03