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

部署Flask应用至Gcloud/Heroku时导入Keras与OpenCV报错求助

解决Flask部署到Google Cloud App Engine/Heroku时的OpenCV和TensorFlow/Keras依赖问题

我之前在部署Flask应用到这两个平台时也踩过一模一样的坑,这俩问题都是服务器运行环境缺少必要依赖导致的,咱们逐个拆解解决:

一、OpenCV报错:libSM.so.6: cannot open shared object file: No such file or directory

这个报错的核心原因是:GAE和Heroku的基础Python运行镜像都是轻量级的,没有预装OpenCV普通版本依赖的X11图形相关系统库(libSM就是其中之一)。有两种解决思路:

方案1:改用无图形依赖的OpenCV版本

直接把requirements.txt里的opencv-python替换成opencv-python-headless——这个是专门为服务器/无界面环境打造的版本,去掉了所有图形界面相关的依赖,完全满足后端图像处理需求。

修改后的requirements.txt片段:

opencv-python-headless==4.5.5.62  # 可根据需求指定合适版本

方案2:手动安装系统级依赖(适合必须用普通版OpenCV的场景)

  • Google Cloud App Engine:如果使用自定义Docker镜像,在Dockerfile里添加以下命令安装依赖:
RUN apt-get update && apt-get install -y --no-install-recommends \
    libsm6 \
    libxext6 \
    libxrender-dev
  • Heroku:在项目根目录创建Aptfile文件,写入需要安装的系统包:
libsm6
libxext6
libxrender-dev

Heroku会自动读取这个文件并安装对应的依赖。

二、TensorFlow报错:ModuleNotFoundError: No module named 'tensorflow'

这个问题是因为旧版Keras需要依赖TensorFlow作为后端,但你的依赖清单里可能只声明了keras,没有明确添加tensorflow;另外版本不匹配也可能触发这个报错。

解决步骤:

  1. 明确添加TensorFlow依赖:在requirements.txt里加入tensorflow(服务器环境推荐用CPU版tensorflow-cpu,更轻量),注意版本要和Keras兼容,比如Keras 2.8.x对应TensorFlow 2.8.x:
tensorflow-cpu==2.8.0
  1. 推荐升级写法(彻底避免版本兼容问题):如果你的Keras版本较新,建议直接使用TensorFlow整合的Keras模块,把代码里的:
from keras.models import load_model

改成:

from tensorflow.keras.models import load_model

这样只需要安装tensorflow即可,不需要单独安装keras,从根源上避免依赖冲突。

完整示例配置

requirements.txt

Flask==2.0.3
opencv-python-headless==4.5.5.62
tensorflow-cpu==2.8.0
# 其他你的项目依赖

GAE的app.yaml(示例)

runtime: python39
entrypoint: gunicorn -b :$PORT main:app

Heroku的Procfile(示例)

web: gunicorn main:app

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:57:10