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

在Vercel部署Flask机器学习应用时遭遇AttributeError求助

Flask机器学习模型部署Vercel时的AttributeError问题

将基于Flask的机器学习模型部署到Vercel时,出现如下错误:

Traceback (most recent call last):
 File "./index.py", line 16,
 in load_models model = OnlineLearningModel.load("exchange_model.pkl")
 File "/var/task/online_learning_model.py", line 65,
   in load obj = joblib.load(f)
 File "/var/task/joblib/numpy_pickle.py", line 648,
   in load obj = _unpickle(fobj)
 File "/var/task/joblib/numpy_pickle.py", line 577,
   in _unpickle obj = unpickler.load()
 File "/var/lang/lib/python3.9/pickle.py", line 1212,
   in load dispatch[key[0]](self)
 File "/var/lang/lib/python3.9/pickle.py", line 1537,
   in load_stack_global self.append(self.find_class(module, name))
 File "/var/lang/lib/python3.9/pickle.py", line 1581,
   in find_class return _getattribute(sys.modules[module], name)[0] 
 File "/var/lang/lib/python3.9/pickle.py", line 331,
   in _getattribute raise AttributeError("Can't get attribute {!r} on {!r}"
 AttributeError: Can't get attribute 'OnlineLearningModel' on <module '__main__' from '/var/runtime/bootstrap.py'

该应用本地运行正常,但部署到Vercel后无法加载模型,已尝试相关调试建议,添加try/catch定位错误,问题仍未解决。

文件夹结构

文件夹结构

index.py

from flask import Flask, render_template, request
from sklearn.linear_model import SGDRegressor
from sklearn.preprocessing import StandardScaler
from online_learning_model import OnlineLearningModel
import joblib


app = Flask(__name__)

def load_models():
    try:
        model = OnlineLearningModel.load("exchange_model.pkl")
        error_message = None
        return model, error_message
    except Exception as error:
        error_message = f"Model could not be loaded due to error: {error}"
        return None, error_message

@app.route("/", methods=["GET", "POST"])
def home():
    model, error_message = load_models()
    result_message = error_message

    if request.method == "POST":
        result_message = "Testing"

    return render_template("index.html", result=result_message)


if __name__ == "__main__":
    app.run(debug=True)

online_learning_model.py

from sklearn.linear_model import SGDRegressor
from sklearn.preprocessing import StandardScaler
import joblib


class OnlineLearningModel:
    def __init__(self):
        self.sgd = SGDRegressor(loss="squared_loss", penalty="l2", random_state=0)
        self.scaler = StandardScaler()

    def predict(self, year):
        X_new_scaled = self.scaler.transform([[year]])
        y_pred = self.sgd.predict(X_new_scaled)
        y_pred_rounded = round(y_pred[0], 4)
        return y_pred_rounded

    @staticmethod
    def load(fileName):
        with open(fileName, "rb") as f:
            obj = joblib.load(f)
        return obj

vercel.json

{
    "builds": [
        {
            "src": "index.py",
            "use": "@vercel/python"
        },
        {
            "src": "static/**",
            "use": "@vercel/static"
        }
    ],
    "routes": [
        {
            "src": "/(.*)",
            "dest": "/"
        }
    ]
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 08:40:06