取消函数时的 Flask AttributeError

Flask AttributeError when unpickling a function

我有一个笔记本文件,我在其中转储了一个模型和一个名为 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 添加 unpickling 行时,会抛出以下错误:

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

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

除非函数被可序列化 class 环绕,否则我们无法序列化函数。如果我们直接想要,那么 cloudpickle 允许 pickle 函数。

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'))