Heroku部署深度学习Flask应用成功但OpenCV报错导致应用错误求助
Heroku部署Flask深度学习应用问题修复方案
1. 修复libGL.so.1依赖缺失导致的cv2导入报错
报错核心原因是标准版本的opencv-python包含GUI相关组件,依赖系统的libGL图形库,而Heroku默认运行环境未预装该依赖。优先选择以下无侵入方案:
- 替换依赖包:将
requirements.txt中的opencv-python替换为opencv-python-headless,该版本为服务器环境定制,剔除了所有GUI相关依赖,不会触发libGL缺失报错,同时可减少数十MB的依赖体积。 - 若必须使用标准版本opencv,可在项目根目录新增名为
Aptfile的文件,写入以下内容:
libgl1-mesa-glx libglib2.0-0
再运行命令heroku buildpacks:add --index 1 heroku-community/apt添加apt构建包,部署时会自动安装所需系统依赖。
2. 修复slug超出300MB软限制问题
深度学习依赖、模型文件是slug体积超标的核心原因,可通过以下方式逐层压缩:
- 精简依赖包:优先使用CPU版的深度学习框架,去掉CUDA相关冗余组件,可减少至少200MB的体积;移除
requirements.txt中部署不需要的依赖,例如jupyter、matplotlib、本地调试工具等。 - 忽略冗余文件:在项目根目录新增
.slugignore文件,将不需要部署的文件/目录加入列表,示例配置:
*.pyc __pycache__ dataset/ train_logs/ test_images/ local_venv/ .git/
- 轻量化模型:将打包在项目内的模型文件转为量化、剪枝后的精简版本,可缩小50%以上的体积;也可将模型存储到第三方对象存储服务,应用启动时动态拉取,不将模型打入slug包。
验证流程
- 本地测试修改依赖后的代码可正常运行,无导入报错
- 提交所有修改后的配置文件到代码仓库
- 重新触发Heroku部署,确认构建日志slug体积降至300MB以内,运行日志无进程崩溃报错即可正常访问应用
内容的提问来源于stack exchange,提问作者Adarsh Wase
相关产品推荐
相关产品推荐

