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 如果你已经正确配置了环境变量)
使用以下方式启动我的 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 如果你已经正确配置了环境变量)