在子包中加载pickle文件 - >模块错误' __ main __'

时间:2018-02-18 07:08:03

标签: python flask import pickle

当我尝试加载pickle文件时收到此错误消息:

Can't get attribute 'CustomNMF' on <module '__main__' from '/Users/cricket/Documents/ONline classes/A6 - Stackoverflow/Tag-generator-Stackoverflow/app.py'

我的问题是,我错过了import CustomNMF或其他能使其正常工作的内容?

这是我正在研究的烧瓶项目,结构是:

项目文件夹:

+ app.py
+ app (sub-folder)
++ __init__.py
++ views.py
++ CustomNMF.py
++ and other things...

app.py的内容:

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

__init__.py

的内容
from flask import Flask
app = Flask(__name__)
from app import views

views.py的内容:

....
from app.CustomNMF import CustomNMF
customNMF = CustomNMF()  #That works fine !

def loadpickle(filename = 'customNMF.pickle'):
    with open(os.path.join(os.getcwd(),'app', filename), 'rb') as f:
        return pickle.load(f)

customNMF = loadpickle('customNMF.pickle')  #Line that is generating the error :-(
....

CustomNMF.py的内容:(用于创建class的笔记本中的简单复制粘贴)

class CustomNMF(BaseEstimator, TransformerMixin):
    def __init__(self,popularitytags=None, **params): 
        self.popularitytags = popularitytags
        .......

对于大多数人来说,我确定这一点很明显,解决方案只是我遗漏的一小部分细节。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我想我发现了这个问题:我从python笔记本中保存了customNMF。我不得不稍微修改dask版本中的类,而不是为网站版本调用一些不必要的包(来自sklearn的交叉验证和指标)。 我认为那些微小的修改是问题的根源。

现在,CustomNMF经过培训和腌制,供网站服务器以后使用。不确定这是最好的方法,但它正在发挥作用!

如果有人作为关于包结构的良好讲座以及如何表达它们(简化版;-)只是为了我),我真的很感激。

由于