在Vercel部署Django项目遇Serverless函数大小超限错误求解决
解决Vercel部署Django时Serverless函数大小超限问题
你遇到的是Vercel Serverless函数体积超过50MB上限的问题,以下是具体解决方法:
1. 清理冗余文件与依赖
- 在项目根目录创建
.vercelignore文件,添加以下内容排除非必要文件:__pycache__/ *.pyc *.pyo *.pyd venv/ node_modules/ staticfiles/ media/ .git/ .github/ tests/ docs/ - 拆分依赖清单:将开发依赖(如
pytest、black)移至单独的requirements-dev.txt,部署时仅安装requirements.txt中的生产依赖。 - 使用
pipreqs生成精确的生产依赖列表,替代手动维护的requirements.txt:pipreqs --force --savepath requirements.txt
2. 优化依赖安装与压缩
- 安装依赖时使用
--no-cache-dir避免缓存文件被打包:pip install --no-cache-dir -r requirements.txt - 替换大体积依赖:比如用
psycopg2-binary替代psycopg2,用ujson替代标准库json,减少依赖体积。 - 手动清理依赖包中的冗余目录:部署前执行脚本删除依赖包内的测试、文档目录:
find ./venv/lib/python3.9/site-packages -name "tests" -type d | xargs rm -rf find ./venv/lib/python3.9/site-packages -name "docs" -type d | xargs rm -rf
3. 调整Vercel配置
- 修正
vercel.json中的maxLambdaSize参数:当前设置的15MB远低于Vercel的50MB上限,建议调整为45mb,让构建工具尽可能压缩函数包:{ "builds": [ { "src": "shopwise/wsgi.py", "use": "@vercel/python", "config": { "maxLambdaSize": "45mb", "runtime": "python3.9" } } ], "routes": [ { "src": "/static/(.*)", "dest": "/static/$1" }, { "src": "/(.*)", "dest": "shopwise/wsgi.py" } ] } - 分离静态资源:通过上述路由配置,让Vercel单独托管
static目录下的静态文件,避免将静态资源打包进Serverless函数。部署前需运行python manage.py collectstatic将静态文件收集到static目录。
4. 拆分函数或改用Edge Functions
- 如果依赖体积仍无法压缩到50MB以内,可将部分业务逻辑拆分为独立的Serverless函数,分散单个函数的体积。
- 考虑使用Vercel Edge Functions替代部分接口逻辑:Edge Functions体积限制更宽松,且启动速度更快,适合处理轻量请求。
内容的提问来源于stack exchange,提问作者Omnia Osman
相关产品推荐
相关产品推荐

