You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gunicorn部署Flask应用时如何正确配置文件夹及文件路径?

问题原因

路径找不到的核心原因有两点:

  1. 路径定义代码写在了if __name__ == "__main__":判断块内:用Gunicorn启动时,程序是通过导入main模块加载app对象的,此时__name__变量值为main而非__main__,该判断块内的代码完全不会执行,路径变量根本没有被初始化。
  2. 原代码用相对路径拼接文件夹位置,路径解析依赖执行启动命令时的工作目录,只要启动位置和直接运行python main.py时不一致,就会出现路径查找错误。

另外原代码还有两处隐性bug:一是没有导入request对象,POST请求取参数时会报错;二是Flase是拼写错误,正确写法为False。

修复方案
  • 第一步:把路径定义逻辑移出__main__判断块,基于当前main.py文件的绝对位置构建路径,彻底摆脱对启动工作目录的依赖。修正后的main.py代码如下:
import os
import pandas as pd
from flask import Flask, request

# 获取当前main.py文件所在的绝对目录,不随启动位置变化
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
# 拼接目标文件夹的绝对路径
DATA_PATH = os.path.join(BASE_DIR, 'data')
TEST_FOLDER_PATH = os.path.join(DATA_PATH, 'test')

app = Flask(__name__)

@app.route("/")
def index():
    return "this working"

@app.route("/data", methods=["POST"])
def get_data():
    json_data = request.json
    df = pd.DataFrame(json_data)
    # 后续处理数据的逻辑直接调用TEST_FOLDER_PATH即可
    return "ok"

if __name__=="__main__":
    app.run(debug=False, host="0.0.0.0")
  • 第二步:wsgi.py不需要额外添加路径配置,保持最简结构即可:
from main import app

if __name__ == "__main__":
    app.run()
  • 第三步:启动Gunicorn时,切换到main.py、wsgi.py所在的项目根目录执行启动命令即可,示例命令:
    gunicorn -w 4 -b 0.0.0.0:8000 wsgi:app

提示:路径初始化逻辑放在模块全局位置即可,启动时只会执行一次,不要放在路由函数内部重复计算,避免不必要的性能损耗。

内容的提问来源于stack exchange,提问作者Farid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 16:57:19