Flask网页抓取应用部署Vercel报错:函数运行时版本无效
问题分析与修复方案
错误根源
你遇到的报错Function Runtimes must have a valid version, for example now-php@1.0.0,核心原因是**vercel.json中runtime的格式不符合Vercel的规范**。Vercel要求函数运行时必须遵循[运行时包名]@[版本号]的格式,而你直接写python3.10.2`,完全不符合这个格式要求。
修复步骤
1. 修正vercel.json的runtime配置
将runtime字段改为Vercel官方的Python运行时格式:@vercel/python@<指定版本>,比如对应你需要的3.10版本,写成@vercel/python@3.10。
同时补充静态文件路由规则,让Vercel直接处理静态资源,避免通过Flask转发影响性能。修改后的完整vercel.json如下:
{ "functions": { "app.py": { "runtime": "@vercel/python@3.10" } }, "routes": [ { "src": "/static/(.*)", "dest": "/static/$1" }, { "src": "/extract_table", "methods": ["POST"], "dest": "/app.py" }, { "src": "/(.*)", "dest": "/app.py" } ], "version": 2 }
2. 确保requirements.txt依赖完整
确认requirements.txt包含Flask及项目所需的所有依赖,示例内容:
Flask==2.3.3 requests==2.31.0 # 补充你用到的网页抓取相关库,比如beautifulsoup4、lxml等
3. 验证app.py的入口结构
确保app.py中正确初始化并导出Flask实例,适配模板路径:
from flask import Flask, render_template, request # 指定模板文件夹路径,匹配你的项目结构 app = Flask(__name__, template_folder='templates/frontend') @app.route('/') def index(): return render_template('index.html') @app.route('/extract_table', methods=['POST']) def extract_table(): # 你的网页抓取逻辑 pass if __name__ == '__main__': app.run(debug=True)
额外注意事项
- Vercel支持的Python版本范围是3.8~3.11,选择版本时请确保在此区间内
- 部署时Vercel会自动读取
requirements.txt安装依赖,无需手动操作 - 静态文件路由的配置是让Vercel直接返回
static目录下的资源,提升访问速度
内容的提问来源于stack exchange,提问作者Optimum Facts
相关产品推荐
相关产品推荐

