推送Python Flask应用至Heroku报错:无法找到/app/App.py文件
Flask应用本地正常但Heroku部署报错:找不到App.py
错误日志
2024-01-13T20:46:22.625482+00:00 app[web.1]: python: can't open file '/app/App.py': [Errno 2] No such file or directory
项目目录结构
|--vollyball_practice_tracker | |--static | |-script.js | |-styles.css | |--templates | |--index.html | |--App.py | |--Pipfile | |--Procfile | |--requirements.txt
关键文件内容
App.py
from flask import Flask, render_template, request app = Flask(__name__, static_url_path='/static', static_folder='static') @app.route('/') def index(): return render_template('index.html') if __name__ == "__main__": app.run(host='0.0.0.0', port=8000)
Procfile
web: pipenv run python App.py
requirements.txt
blinker==1.7.0 click==8.1.7 Flask==3.0.0 importlib-metadata==7.0.1 itsdangerous==2.1.2 Jinja2==3.1.3 MarkupSafe==2.1.3 Werkzeug==3.0.1 zipp==3.17.0
解决步骤
- 确认Git提交根目录:Heroku将推送的Git仓库根目录作为/app目录。如果本地是从
vollyball_practice_tracker的父目录执行Git操作,Heroku的/app下会多出一层子文件夹,导致找不到App.py。解决:进入vollyball_practice_tracker目录,初始化Git(若未初始化),执行git add .、git commit -m "init",再推送到Heroku。 - 统一文件名大小写:Heroku运行在Linux环境,文件名区分大小写。确保Procfile中指定的
App.py与实际文件名完全一致(当前目录结构没问题,需确认提交的文件名称无误)。 - 改用Gunicorn启动(推荐):Flask内置服务器不适合生产环境,Heroku官方推荐使用Gunicorn。修改Procfile为:
同时将gunicorn添加到requirements.txt中(本地执行web: gunicorn App:apppip install gunicorn后,运行pip freeze > requirements.txt更新文件)。 - 检查.gitignore配置:确保未将App.py、static、templates等核心文件加入.gitignore,导致文件未被推送到Heroku服务器。
内容的提问来源于stack exchange,提问作者Evan Wright
相关产品推荐
相关产品推荐

