【问题标题】:config.from_object does not work in Flask with Python 3config.from_object 在带有 Python 3 的 Flask 中不起作用
【发布时间】:2016-12-21 06:19:02
【问题描述】:

我有以下 Flask 代码,文件 __init__.py:

from flask import Flask
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from flask_sqlalchemy_session import flask_scoped_session

from . import configmodule

app = Flask(__name__)

engine = create_engine(configmodule.DevelopmentConfig.SQLALCHEMY_DATABASE_URI)  # <--- THIS WORKS

session_factory = sessionmaker(bind=engine)
session = flask_scoped_session(session_factory, app)

app.config.from_object('configmodule.DevelopmentConfig')  # <--- THIS FAILS IN Python 3

                                 ...

configmodule.py 文件与上面的 __init__.py 位于同一目录中。

使用 python 3.5.2 运行它后,我得到:

werkzeug.utils.ImportStringError: import_string() failed for 'configmodule.DevelopmentConfig'. Possible reasons are:

- missing __init__.py in a package;
- package or module path not included in sys.path;
- duplicated package or module name taking precedence in sys.path;
- missing module, class, function or variable;

Debugged import:

- 'configmodule' not found.

这个错误是针对代码sn-p的最后一行:

app.config.from_object('configmodule.DevelopmentConfig')  # <--- THIS FAILS IN Python 3

我在 Python 2 上运行它没有问题。知道如何让它在 Python 3 上运行吗?谢谢。

【问题讨论】:

    标签: python python-3.x flask


    【解决方案1】:

    Python 3 放弃了对隐式相对导入的支持。您需要使用绝对导入

    app.config.from_object('packagename.configmodule.DevelopmentConfig')
    

    from_object 似乎不支持显式相对导入。

    the imports section of PEP 8 中提到了这一点。

    编辑:删除显式导入示例。

    【讨论】:

    • 绝对导入有效。根据您的目录结构,它可能无法正常工作,因为我已经编写了它。
    • 我收回:.configmodule.DevelopmentConfig 有效。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-21
    • 1970-01-01
    • 2015-07-14
    相关资源
    最近更新 更多