Flask NLP应用部署Vercel遇函数大小超限,求解决方案
体积膨胀原因
- 依赖打包冗余:Vercel部署Python Serverless函数时,会将所有依赖(包括Flask、spaCy及其依赖的numpy、blis等第三方库)全部打包,这些依赖加起来的体积远超过单个en_core_web_sm模型的15.3MB。
- 模型打包冗余:直接
import en_core_web_sm会让打包工具将整个模型包的所有文件(包括一些非核心的配置、缓存文件)都纳入压缩包,进一步增大体积。
解决部署体积超限的方案
1. 优化依赖安装与打包
- 在
requirements.txt中仅保留必要依赖,避免冗余包:flask>=2.0.0 spacy>=3.0.0 en_core_web_sm @ https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-3.5.0/en_core_web_sm-3.5.0.tar.gz - 在Vercel构建命令中添加
--no-cache-dir参数,避免缓存文件被打包:pip install --no-cache-dir -r requirements.txt
2. 调整模型加载方式
将代码中直接导入模型包的写法改为使用spaCy的load方法,减少打包时的冗余:
from flask import Flask, request, jsonify, render_template import spacy # 替换原有的import en_core_web_sm from rules import * nlp = spacy.load("en_core_web_sm") # 直接加载模型名称 app = Flask(__name__) # 后续路由代码保持不变
3. 使用Vercel层分离依赖
将spaCy和模型打包为Vercel层,层的体积不计入函数压缩包限制:
- 本地创建层目录并安装依赖:
mkdir spacy-layer && cd spacy-layer pip install spacy en_core_web_sm -t python/lib/python3.9/site-packages/ - 将
python目录打包为zip文件,上传到Vercel控制台的「层」管理界面。 - 在函数配置中关联该层,函数代码仅保留Flask应用逻辑和
rules.py,体积会大幅降低。
4. 排除不必要文件
在项目根目录创建.vercelignore文件,排除非必要文件:
__pycache__/ *.pyc *.pyo .env .git/ tests/ docs/
5. 精简基础环境(Docker部署场景)
如果使用Docker部署,选择轻量Python镜像如python:3.9-slim替代完整镜像,减少基础体积。
内容的提问来源于stack exchange,提问作者Hex Heager
相关产品推荐
相关产品推荐

