Flask运行报错:无法识别flaskr目录下__init__.py应用工厂文件
问题描述
参考Flask官方基础教程实践时,在flaskr文件夹外部创建虚拟环境,flaskr文件夹内编写好__init__.py后虚拟环境可正常激活,但执行Flask启动命令时出现报错。
使用的启动命令如下:
set FLASK_APP=flaskr set FLASK_ENV=development flask run
报错信息:
Error: Could not locate a Flask application. You did not provide the "FLASK_APP" environment variable, and a "wsgi.py" or "app.py" module was not found in the current directory.
当前目录结构:
test |-- flaskr | |-- __init__.py |-- venv
补充测试情况:
- 如果在test根目录下创建
app.py文件,Flask启动命令可以正常运行,但后续教程步骤中始终无法识别__init__.py内的代码修改,判断Flask从一开始就没有正确识别flaskr文件夹。 - 使用根目录下的
app.py启动时,日志中不会出现* Serving Flask app "flaskr"、* Environment: development、* Debug mode: on的相关提示。
涉及的代码如下:flaskr/__init__.py代码:
import os from flask import Flask def create_app(test_config=None): # create and configure the app app = Flask(__name__, instance_relative_config=True) app.config.from_mapping( SECRET_KEY='dev', DATABASE=os.path.join(app.instance_path, 'flaskr.sqlite'), ) if test_config is None: # load the instance config, if it exists, when not testing app.config.from_pyfile('config.py', silent=True) else: # load the test config if passed in app.config.from_mapping(test_config) # ensure the instance folder exists try: os.makedirs(app.instance_path) except OSError: pass # a simple page that says hello @app.route('/hello') def hello(): return 'Hello, World!' return app
根目录app.py代码:
from flask import Flask app = Flask(__name__) @app.route('/') def hello(): return 'Hello, World!'
故障原因
该问题由两类常见操作错误导致:
- 执行命令的工作目录错误:
flask run需要在flaskr包所在的父目录(即test根目录)执行,否则Python无法导入flaskr模块,FLASK_APP=flaskr的配置也无法生效。 - 终端环境变量设置语法不匹配:Windows系统下
set是CMD命令提示符专属的环境变量设置命令,若在PowerShell(含VS Code、Windows Terminal默认集成的PowerShell终端)中使用set命令,环境变量不会被正确赋值,Flask无法读取FLASK_APP参数,就会抛出找不到应用的报错。
另外根目录自行创建的app.py是独立的单文件Flask应用,与flaskr包完全无关,启动该文件时不会加载flaskr内的任何代码,因此无法识别__init__.py的修改。
解决步骤
- 删除test根目录下多余的
app.py文件,避免Flask错误加载单文件应用。 - 打开终端后,通过
cd命令切换到test根目录(即可看到flaskr、venv两个子文件夹的目录层级)。 - 根据当前使用的终端类型,选择对应命令设置环境变量并启动应用:
- 使用Windows CMD命令提示符时,执行以下命令:
set FLASK_APP=flaskr set FLASK_ENV=development flask run - 使用PowerShell时,执行以下命令:
$env:FLASK_APP = "flaskr" $env:FLASK_ENV = "development" flask run
- 使用Windows CMD命令提示符时,执行以下命令:
- 启动成功校验:日志中出现
* Serving Flask app "flaskr"提示即代表配置正确,此时访问/hello路径可看到__init__.py中定义的返回内容,开发模式下修改flaskr包内的代码会被自动重载识别。
内容的提问来源于stack exchange,提问作者Jason Li
相关产品推荐
相关产品推荐

