【问题标题】:Deploying flask app on gunicorn, module object has no attribute在gunicorn上部署flask app,模块对象没有属性
【发布时间】:2015-08-24 04:11:54
【问题描述】:

我正在尝试将我的 Flask 应用程序部署到 gunicorn,但出现以下错误。

AttributeError: 'module' object has no attribute 'MyTopics'

当我只运行 Flask 服务器时,一切正常:

python http_server/server.py

但是当我在 gunicorn 下运行它时,我得到了 AttributeError

gunicorn -c http_server.config http_server.server:app

我的服务器应用程序的加载如下所示:

import logging
import sys
import os
import json
import time
from functools import wraps

from flask import Flask, request, jsonify

from my_lda import MyTopics

import config

logger = logging.getLogger(__name__)
app = Flask(__name__)

class Server(object):
    def __init__(self, lda_model_path):
        self.lda_model_path = lda_model_path
        self.lda_model = self.load_to_lda_model()

    def load_to_lda_model(self, path=None):
        """
        load the lda model from the specific path
        """

        if path is None:
            path = self.lda_model_path

        logger.info("loading LDA model from %r" % path)
        lda_model = MyTopics.load(path)
        logger.info("loaded LDA model %s", lda_model)
        return lda_model

logging.basicConfig(format='%(processName)s %(process)s:-%(asctime)s : %(levelname)s : %(module)s:%(lineno)d : %(funcName)s(%(threadName)s) : %(message)s')
logging.root.setLevel(level=logging.INFO)
logging.info("running %s" % ' '.join(sys.argv))

if 'MODEL_PATH' in os.environ:
    path = os.environ['MODEL_PATH']
else:
    path = config.MODEL_FILE_PATH
app.config['server'] = Server(path)

if __name__ == '__main__':
    app.run()

调用 load 是基于 gensim.utils.SaveLoad,但我也尝试过标准酸洗,但没有区别。

到目前为止我的想法:gunicorn 可以运行不同的 Python(我从同一个 virtualenv 启动它)吗?有没有可能 gunicorn 看不到通过pip install -e .安装的一些包

编辑:

添加项目结构:

  • http_server
    • __init__.py
    • server.py
    • config.py
  • 数据
    • model.pkl
  • __init__.py
  • my_lda.py
  • setup.py

【问题讨论】:

  • 是 Mytopic 用户定义的函数,提供完整的追溯
  • 它只是使用从gensim.utils.SaveLoad继承的方法,并且由于加载跟踪是:File "/Users/user/.virtualenvs/project_data/lib/python2.7/site-packages/gensim/utils.py", line 261, in load obj = unpickle(fname) File "/Users/user/.virtualenvs/project_data/lib/python2.7/site-packages/gensim/utils.py", line 842, in unpickle return _pickle.load(f) AttributeError: 'module' object has no attribute 'MyTopics'
  • 我在最近的编辑中添加了项目结构。

标签: python flask gunicorn


【解决方案1】:

所以问题与我腌制 MyTopics 对象的方式有关。 更多细节在pickle can't import a module that exists?中描述

【讨论】:

    猜你喜欢
    • 2019-09-06
    • 2017-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-23
    • 2012-04-11
    • 2017-06-10
    • 1970-01-01
    相关资源
    最近更新 更多