vscode安装python扩展后不会自动生成launch.json,需手动通过debug: open configuration命令创建;配置时应区分module与file模式,注意解释器路径、cwd设置及wsl子进程支持。

安装Python扩展后为什么launch.json不自动生成
VSCode不会在首次打开.py文件时自动创建调试配置,必须手动触发。常见误解是“装完Python插件就万事大备”,其实它只提供语言支持和调试器桥接,具体调试行为需显式声明。
正确做法是:打开一个.py文件 → 按 Ctrl+Shift+P(Windows/Linux)或 Cmd+Shift+P(macOS)→ 输入并选择 Debug: Open Configuration → 选择环境(如 Python File)。这时VSCode才生成 .vscode/launch.json。
- 若项目根目录已有
launch.json,新配置会追加进configurations数组,而非覆盖 - 不要手动复制网上的通用配置,尤其是含
pythonPath的旧字段——VSCode 1.80+ 已弃用,改用python.defaultInterpreterPath全局设置或console下的python字段 - 如果点开调试面板看不到“Python File”选项,说明Python扩展未启用,或当前工作区被识别为非Python项目(检查右下角状态栏是否显示Python解释器路径)
launch.json里module和file启动方式的区别
二者决定Python解释器如何加载目标代码,直接影响相对导入、包结构和工作目录行为。
用 "request": "launch", "module": "http.server" 是调用 python -m http.server,此时工作目录是当前打开的文件夹,且Python会按模块路径搜索 http.server;而 "file" 模式直接执行脚本文件,相当于 python script.py,工作目录默认为该脚本所在目录(除非显式设 cwd)。
- 运行Django/Flask项目建议用
module方式:"module": "django.core.management"+"args": ["runserver"] - 调试单个脚本且依赖同目录下的
utils.py,优先选file模式,并确认"cwd"设为"${fileDirname}" -
module模式下不能用__file__获取绝对路径,因为模块可能来自zip或内置,此时应改用pathlib.Path(__file__).resolve().parent或os.getcwd()
断点不命中?检查这三个地方
最常被忽略的是源码与实际执行代码不一致,尤其在使用虚拟环境、符号链接或远程WSL场景下。
- 确认右下角显示的Python解释器路径和终端中
which python输出一致;若用conda,路径应类似~/miniconda3/envs/myenv/bin/python,而不是系统Python - 检查
launch.json中是否误加了"justMyCode": false—— 这会让调试器进入标准库甚至第三方包源码,不仅慢,还容易因C扩展无Python源码而跳过断点 - 如果用WSL2,在Windows端VSCode中打开WSL文件系统(
\wsl$...),务必在launch.json中设"subprocess": true,否则子进程中的断点无效
调试时想看变量但只显示<class></class>怎么办
这是VSCode默认折叠复杂对象的结果,不是数据没加载,而是UI做了懒加载。鼠标悬停变量名时出现的预览框,右侧有小箭头可展开;在“变量”面板中,点击变量左侧三角图标即可逐层展开。
- 若展开后仍显示
Not available,大概率是该变量在当前栈帧不可见(比如定义在闭包内但未被捕获,或已超出作用域) - 对大型列表/字典,VSCode默认只显示前100项,可在设置中搜索
debug.inlineValues关闭内联值,或修改python.debugging.showGlobalVariables提高上限 - 想快速执行表达式(比如调用函数、打印某属性),在“调试控制台”中直接输入
my_list[0].name回车即可,无需打断点重跑
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











