如何在Flask/Python中导入上级的配置文件
我正在写一个Flask的网页应用,但遇到了一个让我很困扰的小问题。这是我的microblog.py文件:
from flask import Flask
from flask import render_template, flash, redirect
from forms import LoginForm
app = Flask(__name__)
app.config.from_object('config')
@app.route('/')
@app.route('/index')
...
这是我的项目结构:
microblog\
flask\
<virtual environment files>
app\
static\
templates\
__init__.py
microblog.py
forms.py
tmp\
run.py
config.py
我想问的是,为什么config.py文件必须放在应用文件夹外面,并且要高一层?我不能仅仅说这是“魔法”,所以我得找出答案,但到现在为止我一直没有成功。
我发现这可能和Python的导入系统有关(Python的导入方式真的很奇怪),但问题是,我的microblog.app.root_path是...(/Users/myname/microblog/app),所以它根本不可能看到config文件。到底发生了什么?
如果你知道答案,请帮帮我,救救我这个可怜的灵魂,免于这种疯狂。提前谢谢你!
2 个回答
1
根据这个Flask教程,run.py
就是你启动应用时实际运行的文件,而且run.py
和config.py
在同一个文件夹里。当你在命令行中运行python
时,当前文件夹通常会被包含在你的模块路径中,所以如果你从那个文件夹运行run.py
,那么config
就可以在你的路径中找到(这叫做绝对导入)。
我只是快速看了一下教程的部署部分,但它可能是依赖于microblog
文件夹作为工作目录。
7
与其使用一个Python文件来做配置,为什么不试试更适合这种工作的格式呢?其中一个不错的选择是JSON,你可以像这样做(这也是官方教程第二步的变体):
import json
with open('../config.json') as f:
config = json.load(f)
app.config.update(config)
这样,你就不需要使用config.py
文件,而是可以有一个config.json
文件(放在同样的位置),它可能看起来像这样:
{
"DEBUG": true,
"SECRET_KEY": "development key"
}
当然,你不一定要使用json
,还有其他配置文件格式可以使用,具体怎么用就得你自己去查了。