如何部署位于子文件夹中的Python Flask应用到Azure Web App
解决Azure Linux Web App部署子文件夹中Flask应用的问题
错误原因
你使用的project=BackEnd是**.NET项目专属的配置项**,Oryx部署工具识别到这个参数后会优先尝试检测.NET项目,完全忽略了Python项目的检测逻辑,因此才会抛出"Could not find the .NET Core project file"的错误。
解决方案
方案1:修正.deployment配置(推荐)
移除.NET专属的project参数,改用Oryx针对Python项目的配置项,指定应用根目录:
修改.deployment文件内容为:
[config] SCM_DO_BUILD_DURING_DEPLOYMENT=true # 指定Python应用所在的子文件夹 SCM_BUILD_ARGS = --app-path BackEnd
方案2:调整文件结构+配置启动命令
- 将根目录的
requirements.txt移动到BackEnd文件夹内,让Oryx能直接在目标目录检测到Python项目 - 在Azure门户的Web App 配置 -> 常规设置中,设置启动命令:
# 生产环境推荐用gunicorn gunicorn --bind=0.0.0.0 --timeout 600 app:app # 测试环境可临时用Flask自带服务器 # python app.py - 简化
.deployment文件:[config] SCM_DO_BUILD_DURING_DEPLOYMENT=true
方案3:通过环境变量强制指定Python运行时
在Azure门户的Web App 配置 -> 应用程序设置中添加以下环境变量:
PYTHONPATH=/home/site/wwwroot/BackEndWEBSITE_WEBAPP_COMMAND_LINE=gunicorn app:app
额外:React静态文件访问配置
确保Flask能正确返回BackEnd/static下的React构建文件,在BackEnd/app.py中添加路由配置:
from flask import Flask, send_from_directory import os app = Flask(__name__, static_folder='static', static_url_path='') # 处理React SPA的路由 fallback @app.route('/', defaults={'path': ''}) @app.route('/<path:path>') def serve_react(path): if path != "" and os.path.exists(os.path.join(app.static_folder, path)): return send_from_directory(app.static_folder, path) return send_from_directory(app.static_folder, 'index.html') # 保留原有的Flask接口路由 @app.route('/api/hello') def hello(): return "Hello from Flask!" if __name__ == '__main__': app.run()
验证部署
提交所有变更后执行推送命令:
git push azure master
查看部署日志,确认Oryx正确检测到Python项目,不再出现.NET相关错误。
内容的提问来源于stack exchange,提问作者cas4
相关产品推荐
相关产品推荐

