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

在Heroku部署Python FastAPI出现onnx安装失败报错如何解决

问题根因

Heroku 默认 Python 构建环境未预装 onnx 源码编译所需的系统依赖,报错里提到的缺失 Protobuf 编译器(protoc)是直接失败诱因。当 pip 找不到和你当前 Python 版本、Heroku 运行栈匹配的 onnx 预编译 wheel 包时,会自动回退到源码编译模式,编译过程需要调用 CMake、Protobuf 编译器等系统工具,依赖缺失就会直接中断构建,最终导致代码推送被拒。

可落地的解决步骤(按优先级排序)
  • 优先替换为无需编译的推理依赖
    绝大多数 FastAPI 部署 ONNX 模型的场景只需要做推理,不需要全量 onnx 包的模型构建、编辑能力。直接把requirements.txt里的onnx替换为onnxruntime即可,这个包提供全平台的预编译wheel,安装过程不需要编译系统依赖,体积更小、安装速度更快,不会触发当前的报错。
  • 锁定有预编译wheel的onnx版本
    如果确实需要使用全量onnx包,不要在requirements.txt里写无版本约束的onnx,先确认Heroku当前使用的Python版本,选择对应版本已经发布预编译wheel的onnx版本号写入依赖文件,让pip直接下载预编译包,跳过源码编译环节。
  • 补充系统依赖构建流程
    如果必须从源码编译onnx,先给应用添加apt构建包,在项目根目录执行命令:
    heroku buildpacks:add --index 1 heroku-community/apt
    
    之后在项目根目录新建名为Aptfile的文件,写入编译所需的系统依赖:
    cmake
    protobuf-compiler
    libprotobuf-dev
    
    该构建包会在Python依赖安装前自动读取Aptfile安装对应系统组件,解决Protobuf编译器找不到的问题。
  • 清空缓存重新部署
    配置完成后先清除Heroku的历史构建缓存,避免之前失败的编译缓存影响结果,执行以下命令后重新推送代码即可:
    heroku plugins:install heroku-builds
    heroku builds:cache:purge
    git push heroku main
    

避坑提示:不要随意锁定过低版本的onnx,低版本onnx对新版Python、新版Heroku运行栈的兼容性很差,基本没有对应预编译包,会强制触发源码编译流程提高部署失败概率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 18:54:28