VSCode调试Flask需三者对齐:launch.json用"module":"flask"、.env同级声明FLASK_APP=app.py、项目根目录正确打开;否则断点不触发、热重载失效、应用无法定位。

VSCode 调试 Flask 断点不进、flask run 报 Could not locate a Flask application、改代码后 reload 静默退出——根本不是 Flask 代码问题,而是 VSCode 没把项目当“Flask 项目”来启动。必须用 "module": "flask" 模式 + .env 文件声明入口 + 正确工作区路径三者对齐,缺一不可。
launch.json 必须用 "module": "flask",不能用 "program"
用 "program": "app.py" 看似能跑,但会绕过 Flask CLI:热重载失效、flask shell 不可用、断点大概率不触发(Werkzeug fork 子进程后,VSCode 只 attach 主进程)。
-
"module": "flask"强制走官方启动流程,所有 CLI 功能(--reload、--debug、--app)才真正生效 - 对应
"args"必须写成["run", "--host=127.0.0.1:5000", "--no-debugger"],--no-debugger是为了防止 Werkzeug 内建调试器和 VSCode 冲突 - 如果用工厂函数(如
create_app()),args改为["--app", "app:create_app", "run", "--no-reload"],注意格式是模块名:工厂函数名
.env 文件必须和 app.py 同级,且内容不含空格
VSCode 的 Debug 不读终端里 export FLASK_APP=app.py,只认 envFile 指定的文件。路径错、格式错、编码错都会导致 flask run 找不到应用。
- 在项目根目录新建
.env,内容严格为两行(无空行、无多余空格):FLASK_APP=app.pyFLASK_DEBUG=1 -
FLASK_ENV在 Flask ≥2.3 已弃用,写进去反而可能报错 - 如果主文件在
src/app.py,FLASK_APP要写成src.app,且确保项目根目录在 Pythonsys.path中(即必须用File → Open Folder打开整个文件夹,不能只打开app.py)
虚拟环境必须手动激活,VSCode 不自动继承
底部状态栏显示了 venv 路径 ≠ 终端已激活。没激活就 pip install flask,包实际装到了系统 Python 里,导致 import flask 报错。
- Windows:执行
.\venv\Scripts\activate(注意是Scripts,不是Script) - macOS/Linux:执行
source venv/bin/activate - 激活成功后,终端提示符开头应有
(venv);此时再运行python -c "import flask; print(flask.__version__)"验证 - VSCode 的
Python: Select Interpreter选对路径只是让编辑器识别语法,不影响终端进程——激活完必须关掉旧终端、新开一个
调试时一定要加 --no-reload,开发时想热更新得配 "subProcess": true
Werkzeug 默认启用重载,会 fork 出子进程处理请求,而 VSCode 默认只 attach 主进程,断点自然不进。这不是 bug,是机制使然。
- 调试阶段:
"args": ["run", "--no-reload", "--no-debugger"]是刚需 - 开发阶段想保留热更新,去掉
--no-reload,并在launch.json顶层加"subProcess": true(Linux/macOS 较稳,Windows 成功率低) - 永远删掉
app.py末尾的if __name__ == '__main__': app.run()——它和"module": "flask"启动方式互斥,留着必冲突
最容易被忽略的是工作区路径和模块导入路径的隐式耦合:VSCode 只把 Open Folder 的根目录加入 sys.path,FLASK_APP=app.py 就只在这个目录下找;一旦你用 program 直接跑 app.py,又没设好 sys.path,连 from .config import XXX 都会崩。所以结构、路径、配置,三者必须咬死。


















