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

在Vercel部署Flask REST API遇Serverless函数超50MB限制求解决方案

解决Vercel部署Flask REST API时Serverless函数体积超限的方法

针对你遇到的Serverless函数体积超过50MB限制的问题,以下是几种可行的解决方案:

1. 清理与替换重体积依赖

  • 移除未使用的依赖:检查requirements.txt中的包,确认是否有代码中未实际用到的依赖(例如若某些蓝图未用到nlpcloud或PyDrive2,可暂时注释或移除)。
  • 替换轻量替代包:部分依赖体积较大,可考虑用轻量方案替代:
    • 若使用PyDrive2仅为简单操作Google Drive,可改用requests直接调用Google Drive REST API,省去PyDrive2及其附带的大量依赖。
    • 检查supabase等依赖的版本,升级到最新版可能会优化依赖结构,减小整体体积。

2. 拆分Serverless函数,按功能隔离

当前所有业务逻辑都打包在一个函数中,导致依赖全部被加载。可将不同蓝图拆分为独立的Vercel函数,每个函数仅加载自身所需依赖:

  • 将各蓝图代码拆分到单独文件(如database.py、model.py、workspace.py),每个文件只导入对应功能的依赖。
  • 修改vercel.json配置,为每个函数单独构建:
{
    "version": 2,
    "builds": [
        {
            "src": "./index.py",
            "use": "@vercel/python"
        },
        {
            "src": "./database.py",
            "use": "@vercel/python"
        },
        {
            "src": "./model.py",
            "use": "@vercel/python"
        },
        {
            "src": "./workspace.py",
            "use": "@vercel/python"
        }
    ],
    "routes": [
        {
            "src": "/(.*)",
            "dest": "/index.py"
        },
        {
            "src": "/database/(.*)",
            "dest": "/database.py"
        },
        {
            "src": "/model/(.*)",
            "dest": "/model.py"
        },
        {
            "src": "/workspace/(.*)",
            "dest": "/workspace.py"
        }
    ]
}

拆分后每个函数的体积会大幅降低,因为仅包含自身业务代码和必要依赖。

3. 优化构建过程,排除冗余文件

  • 创建.vercelignore文件:在项目根目录添加该文件,排除无需打包的文件和目录:
venv/
__pycache__/
*.pyc
*.pyo
tests/
docs/
.git/
  • 调整依赖安装命令:在vercel.json中指定使用无缓存的安装方式,避免缓存文件被打包:
{
    "version": 2,
    "builds": [
        {
            "src": "./index.py",
            "use": "@vercel/python",
            "config": {
                "installCommand": "pip install --no-cache-dir --upgrade pip && pip install --no-cache-dir -r requirements.txt"
            }
        }
    ],
    "routes": [
        {
            "src": "/(.*)",
            "dest": "/"
        }
    ]
}

4. 使用Vercel层分离公共依赖

将多个函数共享的依赖(如Flask、Flask_Cors等)打包成Vercel层,避免每个函数重复打包相同依赖:

  1. 创建层目录(如layers/python),在该目录下执行pip install -r requirements.txt -t python/lib/python3.x/site-packages(替换3.x为你的Python版本)。
  2. 在vercel.json中为每个函数指定层路径:
{
    "version": 2,
    "builds": [
        {
            "src": "./index.py",
            "use": "@vercel/python",
            "config": {
                "layers": ["./layers/python"]
            }
        }
    ]
}

层的体积不计入单个函数的体积限制,能有效降低每个函数的打包大小。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 02:15:59