【问题标题】:load a pickle file in a sub package --> error with module '__main__'在子包中加载pickle文件->模块'__main__'出错
【发布时间】:2018-02-18 07:08:02
【问题描述】:

当我尝试加载 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
        .......

我相信这对你们大多数人来说是显而易见的,而解决方案只是我缺少的一个小细节。任何帮助将不胜感激。

【问题讨论】:

  • customNMF = CustomNMF() #That works fine ! - 真的吗?你怎么知道的?如果它确实有效,您是否意识到您正在用另一个名称掩盖 CustomNMF 名称?

标签: python flask import pickle


【解决方案1】:

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

现在 CustomNMF 已经过训练和腌制,供网站服务器以后使用。不确定这是不是最好的方法,但它确实有效!

如果有人对包结构以及如何表达它们(简化版 ;-) 只为我做了很好的讲座),我将不胜感激。

谢谢

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-10
    • 2020-05-15
    • 2019-04-09
    • 2015-02-28
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 2011-06-02
    相关资源
    最近更新 更多