直接改 settings.json 更可靠,因其能精确控制所有配置字段、避免界面分散写入导致的覆盖冲突、确保工作区级优先级生效、准确设置绝对路径及复杂结构(如 env/envfile 选择、black/isort 执行顺序、终端环境变量),而 settings ui 易漏配关键参数或误写层级。

为什么直接改 settings.json 比点界面开关更可靠
VS Code 的图形化设置界面(Ctrl+,)看似方便,但实际会把配置分散写进不同层级(用户级 / 工作区级 / 语言特定),容易覆盖、冲突或漏生效。比如你勾选了“保存时格式化”,但没指定 editor.formatOnSave 为 true,或者没配 python.formatting.provider,结果 Black 就是不跑。
- 所有关键行为(格式化、Linting、调试路径、终端环境)都依赖 JSON 字段的精确值,图形界面有时只改了子项,父项仍为空
- 工作区级配置(
.vscode/settings.json)优先级高于用户级,但图形界面默认写用户级,多人协作时极易不一致 - 某些字段如
python.defaultInterpreterPath必须是绝对路径,图形界面无法直观确认是否指向虚拟环境中的python可执行文件
launch.json 里 "env" 和 "envFile" 到底怎么选
调试时环境变量错位是 Python 项目启动失败的常见原因——尤其是涉及 PYTHONPATH、DJANGO_SETTINGS_MODULE 或自定义配置文件路径时。
-
"env"直接写死键值对,适合简单、固定场景,比如强制"PYTHONPATH": "${workspaceFolder}" -
"envFile"指向一个.env文件,适合多环境(dev/staging/prod)切换,但注意:VS Code 不自动加载项目根目录的.env,必须显式声明"envFile": "${workspaceFolder}/.env" - 两者不能共存;若同时存在,
"env"会完全覆盖"envFile"里的同名变量 - Windows 下路径分隔符要用
\或正斜杠/,反斜杠会被 JSON 解析器当成转义字符,导致变量值截断
Black + isort 同时启用时的顺序和冲突点
Black 负责代码结构,isort 管 import 排序,两者配合能彻底统一风格,但默认配置下它们会互相打架:isort 插入空行,Black 又删掉;isort 移动 import,Black 把括号格式搞乱。
- 必须让 isort 在 Black 之前运行,否则 Black 会破坏 isort 的 import 分组逻辑
- 在
settings.json中设"python.formatting.provider": "black",再单独用isort作为保存前命令(通过editor.codeActionsOnSave) - isort 需要配置
--profile black才与 Black 兼容,否则 import 行宽、换行策略不一致 - 如果用
pre-commit,确保.pre-commit-config.yaml中 isort 在 black 之前执行,顺序错就白配
终端启动时不自动激活虚拟环境?检查这三处
VS Code 终端默认不继承 Python 解释器选择,即使你在 GUI 里选好了虚拟环境,新开终端还是走系统 Python,导致 pip install 装错地方、import 报错。
- 确认
python.defaultInterpreterPath指向的是虚拟环境里的python(例如./venv/bin/python或.envScriptspython.exe),不是全局路径 - 在
settings.json加上"terminal.integrated.env.linux": {"PYTHONUNBUFFERED": "1"}(macOS/Windows 同理),避免终端缓存旧环境 - 禁用
"python.terminal.launchArgs"里的-i参数——它会跳过激活脚本,直接进交互模式
真正起作用的不是“选了解释器”这个动作,而是 VS Code 根据该路径反推虚拟环境位置,并在终端启动时注入对应 activate 脚本。路径不对,整个链路就断了。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











