如何不使用__init__.py作为Flask应用名称?

时间:2017-06-04 04:16:29

标签: python flask

我有一个烧瓶应用程序结构如下:

  • repo_root
    • config.py
    • requirements.txt
    • my_cool_app /
    • my_cool_app / __初始化__。PY
    • my_cool_app / models.py
    • my_cool_app / views.py
    • my_cool_app /静态/
    • my_cool_app /模板/

my_cool_app / __ init __。py 的内容如下:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
from flask_oauth2_login import GoogleLogin
from flask_login import LoginManager

app = Flask(__name__)
app.config.from_object('config')
db = SQLAlchemy(app)
migrate = Migrate(app, db)

google_login = GoogleLogin(app)
login_manager = LoginManager()
login_manager.init_app(app)

import my_cool_app.models
import my_cool_app.views

要运行它,我调用:

FLASK_APP=my_cool_app/__init__.py flask run

基于各种在线文档,我认为我应该只能将FLASK_APP设置为包名my_cool_app。当我这样做并调用flask run时,应用程序启动但在浏览器中我立即看到错误:

flask.cli.NoAppException
flask.cli.NoAppException: The file/path provided (my_cool_app) does not appear to exist.  Please verify the path is correct.  If app is not on PYTHONPATH, ensure the extension is .py

我应该怎么做才能将FLASK_APP设置为my_cool_app?或者,考虑到这个烧瓶应用程序的结构,将FLASK_APP设置为其他东西更合适/典型吗?

3 个答案:

答案 0 :(得分:1)

根据围绕this issue的讨论,似乎确实可以设置FLASK_APP=my_cool_app并使用python -m flask run成功运行。尚不确定这会如何影响生产配置。

答案 1 :(得分:0)

看起来您的my_cool_app模块未在您的python路径中被拾取。如果不是,您还需要设置PYTHONPATH变量。

假设您在执行命令时位于repo_root目录中,您应该可以使用:

FLASK_APP=my_cool_app PYTHONPATH=. flask run

如果你想从任何地方运行它,那么:

FLASK_APP=my_cool_app PYTHONPATH=/path/to/repo flask run

答案 2 :(得分:0)

确保您的views.py和model.py中具有“圆形”导入。因此,在顶部应该有这样的一行

from my_cool_app import app

总的来说,应用程序的结构看起来确实不错,并且遵循了flask对于大型应用程序的建议。有关更多信息,请尝试访问此链接http://flask.pocoo.org/docs/1.0/patterns/packages/。他们似乎有一个示例,其结构与您的应用程序相似,并且将引导您逐步导出所有环境变量并运行程序包。