首页 > 解决方案 > 解压函数时出现 Flask AttributeError

问题描述

我有一个笔记本文件,我在其中转储了一个模型和一个名为custom_pipeline()

pickle.dump(custom_pipeline, open('custom_pipeline.pkl','wb'))
pickle.dump(model, open('model.pkl','wb'))

在我的 app.py 文件中,我将模型和函数反序列化如下

import pickle

app = Flask(__name__)
model = pickle.load(open('model.pkl', 'rb'))
custom_pipeline = pickle.load(open('custom_pipeline.pkl', 'rb'))

解压模型文件没有错误,应用程序运行成功。但是,当我添加 unpickling 行时custom_pipeline,会引发以下错误:

AttributeError: Can't get attribute 'custom_pipeline' on <module '__main__' from flask_path>

我需要反序列化该函数并使用来自应用程序的输入数据调用它。我是烧瓶的新手,想知道如何在应用程序文件中使用自定义函数。

标签: pythonflaskpickle

解决方案


我们不能序列化函数,除非它们被可序列化的类包裹。如果我们直接想要,那么cloudpickle允许泡菜功能。

import cloudpickle

cloudpickle.dump(custom_pipeline, open('custom_pipeline.pkl','wb'))

然后在应用文件中

import pickle
import cloudpickle

app = Flask(__name__)
model = pickle.load(open('model.pkl', 'rb'))
custom_pipeline = cloudpickle.load(open('custom_pipeline.pkl', 'rb'))

推荐阅读