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

使用vercel.json部署Flask应用时遇模块导入与handler/app缺失错误

解决Vercel部署多文件Flask应用的模块找不到与Handler缺失问题

一、修复模块导入失败问题

Vercel的Python Serverless函数默认从api目录加载代码,模块找不到的核心原因是导入路径不正确,按以下步骤调整:

  • 调整目录结构:将ScraperAPI.py、ProcessSearcher.py与main.py放在同一个api目录下,同时在该目录添加空的__init__.py文件,让Python识别为可导入的包。最终目录结构应为:
    项目根目录/
    ├── api/
    │   ├── main.py
    │   ├── ScraperAPI.py
    │   ├── ProcessSearcher.py
    │   └── __init__.py
    ├── vercel.json
    └── requirements.txt
    
  • 修正导入语句:在main.py中使用相对导入,比如:
    from .ScraperAPI import app  # 若ScraperAPI中已定义Flask实例
    from .ProcessSearcher import 你的处理函数名
    

二、解决「Missing variable handler or app」错误

Vercel要求Python函数文件必须在全局作用域暴露app(Flask实例)或handler(WSGI handler),按以下处理:

  • 暴露Flask实例:确保main.py的全局作用域中有app变量,且不要将其包裹在if __name__ == "__main__":代码块中(Vercel执行时不会触发该条件)。示例:
    # main.py
    from flask import Flask
    from .ProcessSearcher import handle_post
    
    # 直接在全局创建或导入Flask实例
    app = Flask(__name__)
    
    # 注册路由
    @app.route('/search', methods=['POST'])
    def search():
        return handle_post()
    
    # 移除或注释掉本地运行的代码块,避免影响部署
    # if __name__ == "__main__":
    #     app.run(debug=True)
    
  • 如果使用工厂模式:若ScraperAPI.py是用工厂函数创建app,需在main.py中调用函数并赋值给全局app:
    from .ScraperAPI import create_app
    app = create_app()
    

三、调整vercel.json配置

修正重写规则的目标路径,无需添加.py后缀:

{
    "rewrites": [
        {
            "source": "/(.*)",
            "destination": "/api/main"
        }
    ]
}

四、额外检查项

  • 确保项目根目录的requirements.txt包含所有依赖包(比如flask、requests等),Vercel会自动安装。
  • 部署前本地测试:在api目录下运行python main.py,确认模块导入和Flask服务正常启动。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 03:19:58