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

如何通过Pyoxidizer将Torch模型文件打包进exe并在脚本中调用

使用Pyoxidizer打包Torch模型到EXE的完整方案

一、修改Pyoxidizer配置文件(pyoxidizer.bzl)

Pyoxidizer的add_python_resources仅适配Python模块/包资源,二进制模型文件需要用add_files指令添加。在make_exe函数中补充以下配置:

def make_exe():
    dist = default_python_distribution()
    policy = dist.make_python_packaging_policy()
    exe = dist.make_python_executable(policy)

    # 绑定你的主脚本
    exe.add_python_module(name="your_main_script")

    # 核心配置:添加Torch模型到打包资源
    # 替换为你的本地模型路径,dest_path是运行时虚拟文件系统中的路径
    exe.add_files(
        files=["path/to/your/model.pth"],  # 本地模型的相对/绝对路径
        dest_path="model.pth",             # 打包后模型的虚拟路径
        is_executable=False
    )

    # 若模型是文件夹形式(如torch.save保存的目录结构),改用以下写法
    # exe.add_files(
    #     files=["path/to/your_model_dir"],
    #     dest_path="your_model_dir",
    #     is_executable=False
    # )

    return exe

二、修改Python代码,动态读取打包后的模型

Pyoxidizer打包后模型存储在虚拟文件系统中,不能直接用本地路径加载,需通过importlib.resources动态获取路径:

import torch
import importlib.resources

def load_model():
    # 对应pyoxidizer.bzl中设置的dest_path
    with importlib.resources.path("", "model.pth") as model_path:
        # 文件夹模型直接传入目录路径即可
        # with importlib.resources.path("", "your_model_dir") as model_path:
        model = torch.load(model_path, map_location="cpu")  # 根据需求指定设备
    return model

# 主逻辑
if __name__ == "__main__":
    model = load_model()
    # 后续业务代码

三、验证与打包

  1. 本地测试:执行pyoxidizer run,确认模型能正常加载
  2. 生成EXE:执行pyoxidizer build,产物位于build/<target>/release目录下

常见问题排查

  • 路径错误:确保pyoxidizer.bzl中files的路径是相对配置文件的路径,或直接使用绝对路径
  • 模型格式问题:文件夹模型需完整添加整个目录,代码中加载路径指向目录而非单个文件
  • 权限问题:设置is_executable=False确保模型以非可执行权限打包

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 15:10:04