我正在尝试加载一个pickle并通过Flask应用程序显示一些数据。我所遵循的结构如下。
package1.py
class myclass:
#do something
m = myclass()
pickle.load(m,filehandle)
package2.py
from package1 import myclass
def query_processor(params):
x = pickle.load(filehandle)
#do stuff on x using params
return results
if __name__ == "__main__":
print(query_processor(params)) #Works as expected
flaskapp.py
import package2
@app.route("/", methods=['GET', 'POST'])
def hello():
result = package2.query_processor(params)
return render_template(template_name,form=form,msg=result)
在flaskapp内部,我收到如下错误:
AttributeError: Can't get attribute 'myclass' on <module '__main__' from <flask_path>
有没有办法解决这个问题?有人可以解释为什么我有这个错误吗?
答案 0 :(得分:1)
为了解开这个问题,你需要拥有与你腌制对象的时间点相同的模块和包结构。
您的异常表明您在作为程序运行的模块中定义了类,因此它没有* .py文件的名称,而是名称__main__
。当尝试从Flask应用程序中取消它时,另一个模块是__main__
模块,该模块不包含myclass
类对象。
因此,最简单的修复方法是在创建 pickle时使用另一个模块作为程序。该模块必须从package1
导入myclass
或至少package1
。