VSCode调试Flask主模块启动两次,求launch.json配置方案
解决VSCode调试Flask时重复启动子进程的问题
核心原因
Flask默认的debug=True会启用自动重载器(reloader),它会启动一个子进程运行实际应用;同时VSCode的debugpy调试器若配置不当,会和这个重载器冲突,导致两次启动触发端口占用错误。
正确的launch.json配置方案
直接替换原有配置为以下内容:
{ "version": "0.2.0", "configurations": [ { "name": "Flask App", "type": "python", "request": "launch", "module": "flask", "env": { "FLASK_APP": "main.py", "FLASK_ENV": "development", "FLASK_DEBUG": "0" // 关闭Flask自带重载器 }, "args": [ "run", "--no-reload" // 强制禁用重载,双重保险 ], "jinja": true, "justMyCode": true, "stopOnEntry": false } ] }
关键配置项说明
FLASK_DEBUG": "0":关闭Flask调试模式自带的重载功能,避免它启动子进程。"--no-reload":作为Flask run命令的参数,强制禁用重载器,确保不会触发子进程启动。- 使用
"module": "flask"而非program: "main.py":通过Flask CLI启动应用,符合官方调试流程,减少debugpy重复启动的概率。
额外注意事项
- 如果代码里手动写了
app.run(debug=True),必须改成app.run(debug=False),或者通过环境变量动态控制:if __name__ == "__main__": import os debug_mode = os.environ.get("FLASK_DEBUG", "0") == "1" app.run(debug=debug_mode) - 调试前杀掉所有残留的Python进程(包括之前启动的Flask实例),避免端口占用遗留问题。
内容的提问来源于stack exchange,提问作者PJT
相关产品推荐
相关产品推荐

