Flask应用本地正常,部署Heroku时出现H10崩溃错误(Keras缺失)
解决Heroku部署Flask应用时Keras模块缺失导致的H10崩溃问题
你遇到的核心问题是Heroku服务器无法找到Keras模块,进而触发H10应用崩溃错误。我整理了几个针对性的解决步骤,按顺序尝试应该能搞定:
1. 确保requirements.txt正确包含Keras及所有依赖
Heroku只会依据requirements.txt里的内容安装Python依赖,所以首先要确认这个文件没有遗漏Keras:
- 激活本地虚拟环境后,执行
pip freeze > requirements.txt,这个命令会把你本地环境里所有已安装的包(包括Keras和它的依赖,比如TensorFlow)完整导出到文件中,避免手动编写时遗漏。 - 打开
requirements.txt检查,确认存在类似keras==2.4.3(版本号以你本地实际安装的为准)的条目。如果之前是手动编写的文件,大概率漏掉了Keras或者它的关联依赖。
2. 验证Procfile配置是否正确
Procfile是Heroku启动应用的核心配置,格式和内容不能出错:
- 文件必须命名为
Procfile(首字母大写,无任何后缀),放在项目根目录。 - 内容格式为
web: gunicorn <你的Flask主文件名>:<Flask实例名>,比如你的主文件是app.py,里面定义了app = Flask(__name__),那Procfile就写web: gunicorn app:app。如果文件名或实例名错误,也会间接引发依赖加载失败的假象。
3. 清理Heroku缓存并重新部署
有时候Heroku会缓存旧的依赖包,即便你更新了requirements.txt,它仍可能复用旧缓存,导致Keras未被安装:
- 先安装缓存清理插件:
heroku plugins:install heroku-repo - 清空应用的缓存:
heroku repo:purge_cache -a digiturk-sentiment-analysis - 提交一个空commit触发重新部署:
git commit --allow-empty -m "Purge Heroku cache to re-install dependencies" git push heroku master
4. 保证本地和Heroku的Python版本一致
如果本地Python版本和Heroku默认版本差异过大,可能导致依赖安装失败:
- 在项目根目录创建
runtime.txt文件,内容写你本地的Python版本,比如python-3.6.15(格式必须是python-x.x.x,注意用短横线分隔版本号)。 - 提交这个文件到Git并推送到Heroku,让Heroku使用指定版本的Python安装依赖,避免版本兼容性问题。
额外排查技巧
- 部署完成后,执行
heroku run pip list -a digiturk-sentiment-analysis查看Heroku上实际安装的包,确认Keras是否存在。 - 持续查看日志:
heroku logs --tail,如果还有其他依赖缺失的提示(比如TensorFlow未安装),也要确保它们出现在requirements.txt中——毕竟Keras多数情况下依赖TensorFlow才能正常运行。
内容的提问来源于stack exchange,提问作者Leyla Memiguven
相关产品推荐
相关产品推荐

