我有一个烧瓶应用程序结构如下:
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
设置为其他东西更合适/典型吗?
答案 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/。他们似乎有一个示例,其结构与您的应用程序相似,并且将引导您逐步导出所有环境变量并运行程序包。