无法从父目录加载Flask配置

时间:2016-08-25 10:33:09

标签: python flask

我尝试按照此处的文档使用配置文件:http://exploreflask.com/en/latest/configuration.html#the-simple-case

我想用他们所说的"简单的案例"但我想从父目录加载config.py。我的项目树看起来像这样:

~/Learning/test $ tree
.
├── app
│   └── __init__.py
└── config.py

这是我的app/__init__.py

from flask import Flask

app = Flask(__name__)
app.config.from_object('config')

这是我的config.py

DEBUG = True

这是我尝试运行项目时遇到的错误:

Traceback (most recent call last):
  File "app/__init__.py", line 4, in <module>
    app.config.from_object('config')
  File "/usr/local/lib/python2.7/dist-packages/flask/config.py", line 163, in from_object
    obj = import_string(obj)
  File "/usr/local/lib/python2.7/dist-packages/werkzeug/utils.py", line 443, in import_string
    sys.exc_info()[2])
  File "/usr/local/lib/python2.7/dist-packages/werkzeug/utils.py", line 418, in import_string
    __import__(import_name)
werkzeug.utils.ImportStringError: import_string() failed for 'config'. 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:

- 'config' not found.

Original exception:

ImportError: No module named config

我想将config.py保存在Flask应用文件的另一个目录中。如何让Flask从父目录加载config.py

1 个答案:

答案 0 :(得分:4)

您无法从那里加载它,因为错误消息显示:

- missing __init__.py in a package;
- package or module path not included in sys.path;

它不是可导入包的一部分。这可能在本地工作,因为您在项目根目录中运行python,因此当前目录被隐式添加到路径中。不要依赖这种行为。请勿手动更改sys.path

相反,Flask的Config有另外的方法来加载配置:来自环境变量中的路径

export FLASK_CONFIG="/path/to/config.py"
app.config.from_envvar('FLASK_CONFIG')

或来自相对于instance folder

的文件
app/
    __init__.py
instance/
    config.py
app = Flask(__name__, instance_relative_config=True)
app.config.from_pyfile('config.py')