如何从命令行运行存放在app.py而非__init__.py中的Flask应用工厂
解决方案
- 首先修正现有配置的两个错误:
- 你当前
settings.py中的SECRET_KEY = mysecretkey缺少字符串引号,运行时会触发NameError,需要修改为SECRET_KEY = 'mysecretkey' - 你代码中
app.config.from_object('config.settings')会默认从config包下加载配置,如果你根目录的settings.py没有放在config文件夹中,需要把这行修改为app.config.from_object('settings')
- 你当前
- 再修改
FLASK_APP配置值:
要指定调用app包下app.py模块内的create_app工厂函数,把settings.py中的FLASK_APP配置修改为:
其中FLASK_APP = app.app:create_app()app.app代表app包下的app.py模块,冒号后面的create_app()表示执行该工厂函数,返回Flask应用实例。 - 临时指定的终端命令(可选):
如果你不想修改配置文件,也可以在执行flask run前,在终端临时设置环境变量:- Linux/macOS:
export FLASK_APP=app.app:create_app() - Windows cmd:
set FLASK_APP=app.app:create_app() - Windows PowerShell:
$env:FLASK_APP = "app.app:create_app()"
- Linux/macOS:
原配置不生效的原因
之前设置FLASK_APP=app时,Flask会默认在app包的__init__.py文件中查找app实例或者create_app工厂函数,所以把工厂移到__init__.py就能正常运行;而你设置FLASK_APP=app:app时,是指定查找app包下名为app的实例,你并没有在app包的__init__.py中定义该实例,自然无法加载成功。
内容的提问来源于stack exchange,提问作者Jonathan Bechtel
相关产品推荐
相关产品推荐

