Flask 运行 - 出现 ImportError

Flask Run - ImportError was raised

使用以下方式启动我的 Flask 应用程序:

flask run

似乎不​​起作用...我收到错误消息:

Error: While importing 'entry', an ImportError was raised.

但是如果我 运行:

python entry.py

该应用程序将成功构建?为什么是这样? FLASK_APP 和 FLASK_ENV 都设置正确,这是我的文件夹结构:

entry.py:

from application import create_app

app = create_app()
if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8080)

应用程序/init.py:

import os
from flask import Flask
from config import DevConfig, TestConfig, ProdConfig
from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

from application.models import Report


def create_app(testing=False):
    app = Flask(__name__)

    flask_env = os.getenv("FLASK_ENV", None)

    # Configure the application, depending on the environment
    if testing:
        app.config.from_object(TestConfig)
    elif flask_env == "development":
        app.config.from_object(DevConfig)
    elif flask_env == "production":
        app.config.from_object(ProdConfig)
    else:
        raise ValueError("FLASK_ENV is not set or there is an unknown environment type!")

    # init plugins, if any
    db.init_app(app)

    if flask_env == "development":
        with app.app_context():
            db.create_all()
            db.session.commit()

    # register blueprints
    register_blueprints(app)

    return app


def register_blueprints(app):
    from application.main import main_blueprint

    app.register_blueprint(main_blueprint)

如果你想通过 flask 可执行文件启动应用程序,那么你必须考虑到 flask 会寻找 app.py 文件,其中包含 app 应用程序,如果不是(如您的情况),那么您将必须正确设置环境变量的值 FLASK_APP,这将是等于FLASK_APP=entry.py:app

在 Linux、macOS 上:

$ export FLASK_APP=entry.py:app
$ flask run

在 Windows:

$ set FLASK_APP=entry.py:app
$ flask run

看这里:Run The Application

然而,这里解释了如何 flask looks for the application to run

在这种情况下(python entry.py)一切正常,因为 flask 是通过主要部分中的 python 调用的,如果直接从 flask 执行 entry.py 则不会调用它,其实flask并不会进入main部分,而是会去里面寻找app.py文件和app变量。 (显然它会寻找 entry.py 和 app 如果你已经正确配置了环境变量)