Heroku部署Python应用失败:推送被拒,Python版本错误
首次部署Flask应用到Heroku?看这一步一步来就行!
嘿,既然你有Heroku部署PHP的经验,那搞定Flask应该没啥大问题!我给你梳理一下从你的Hello World项目到成功部署的全流程:
第一步:先把项目结构捋顺
首先得确保你的文件结构是Flask和Heroku都认的样子,你的index.html必须放在templates文件夹里(Flask默认找这个目录下的模板),另外还得补两个关键文件:requirements.txt和Procfile。最终结构应该是这样:
your-project-folder/ ├── Main.py ├── templates/ │ └── index.html ├── requirements.txt └── Procfile
第二步:补全依赖文件 requirements.txt
Heroku需要这个文件知道你的应用依赖哪些Python包。你至少需要Flask和生产环境用的WSGI服务器gunicorn,文件内容可以写成:
Flask==2.3.3 gunicorn==21.2.0
如果本地已经装了这些包,也可以直接用pip freeze > requirements.txt生成更准确的依赖列表(记得在虚拟环境里操作哦)。
第三步:创建启动配置文件 Procfile
这个文件告诉Heroku怎么启动你的应用,内容就一行,注意首字母是大写的P,而且没有后缀:
web: gunicorn Main:app
解释一下:web表示这是一个Web进程,gunicorn是我们用的WSGI服务器,Main:app指的是从Main.py文件里加载名为app的Flask实例。
第四步:完善你的 Main.py 代码
你的代码最后一行没写完,而且要适配Heroku的端口设置(Heroku会动态分配端口,存在环境变量里),修改后的完整代码应该是:
import os from flask import Flask, render_template app = Flask(__name__) @app.route("/") def index(): return render_template("index.html", message="Hello World") if __name__ == "__main__": # 从环境变量取端口,本地默认用5000 port = int(os.getenv("PORT", 5000)) app.run(host="0.0.0.0", port=port)
第五步:本地先测一遍(推荐)
部署前先在本地跑起来确认没问题:
- 安装依赖:
pip install -r requirements.txt - 启动应用:
python Main.py - 打开浏览器访问
http://localhost:5000,应该能看到你的Hello World页面。
第六步:部署到Heroku
假设你已经装了Heroku CLI并且登录了(没装的话直接搜Heroku CLI安装就行,登录用heroku login):
- 初始化Git仓库(如果还没的话):
git init git add . git commit -m "Initial Flask app commit" - 创建Heroku应用:
heroku create your-custom-app-name(不想起名的话直接输heroku create,Heroku会给你随机生成一个) - 推代码到Heroku:
git push heroku main(如果你的主分支是master,就换成git push heroku master) - 打开应用:
heroku open,直接跳转到你的线上应用啦!
几个容易踩的坑提醒
- 别把
templates文件夹名字写错,Flask对这个大小写和拼写很敏感,必须是全小写的templates - Procfile一定要是大写P开头,不能有
.txt后缀,不然Heroku识别不了 - 如果部署后打不开,用
heroku logs --tail看实时日志,大部分问题都能从日志里找到原因
内容的提问来源于stack exchange,提问作者Outcast
相关产品推荐
相关产品推荐

