config.from_object在使用Python 3的Flask中不起作用

jaz*_*lue 4 python flask python-3.x

我有以下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

                                 ...
Run Code Online (Sandbox Code Playgroud)

文件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.
Run Code Online (Sandbox Code Playgroud)

此错误适用于代码段中的最后一行:

app.config.from_object('configmodule.DevelopmentConfig')  # <--- THIS FAILS IN Python 3
Run Code Online (Sandbox Code Playgroud)

使用Python 2运行它没有任何问题.任何想法如何使它与Python 3一起使用?谢谢.

dir*_*irn 6

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

app.config.from_object('packagename.configmodule.DevelopmentConfig')
Run Code Online (Sandbox Code Playgroud)

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

PEP 8的进口部分对此进行了介绍.

编辑:删除了显式导入示例.