无法在组织为应用程序的应用程序中加载实例配置

时间:2016-03-04 17:39:22

标签: python flask

__init__.py我试图从相对于实例文件夹的Python文件加载配置。这是错误的Unable to load configuration file (No such file or directory): '/home/ais-flask/ais/instance/config.py',这是错误的,因为实例文件夹应该在包的旁边,而不是在它中,而我的是。我使用setup.py develop在开发模式下安装我的包。我用python __init__.py运行应用程序。为什么这不起作用?

ais-flask/
    ais/
        __init__.py
    instance/
        config.py
    setup.py
from flask import Flask

app = Flask(__name__, instance_relative_config=True)
app.config.from_pyfile('config.py')

2 个答案:

答案 0 :(得分:1)

由于您的应用是一个软件包,而不是一个模块,因此您需要使用脚本运行它。调用python __init__.py会弄乱Python的路径/包检测。这在docs

中有所描述

ais-flask/run.py

from ais import app
app.run(debug=True)
python run.py

考虑使用脚本运行器,如Flask-Script或Flask-Cli。这将允许您创建一个处理多个命令和选项的运行器。

由于您正在安装软件包(这是一个很好的设计模式),您可以使用入口点而不是自己编写脚本。

from flask import Flask
from flask_script import Manager

app = Flask(__name__, instance_relative_config=True)
app.config.from_pyfile('config.py')
manager = Manager(app)

setup.py中,将以下内容添加到setup来电:

entry_points = {'console_scripts': ['flask=ais:manager.run']}

这会在virtualenv中为您的路径添加flask命令。

flask runserver

答案 1 :(得分:0)

import os
from flask import Flask


app = Flask(__name__, instance_path=os.path.join(os.path.abspath(os.curdir), 'instance'), instance_relative_config=True)
app.config.from_object('config')
app.config.from_pyfile('config.cfg')


@app.route('/')
def hello_world():
    return 'Hello, World!'