vscode必须为每个项目单独配置解释器和工作区设置,否则环境会相互污染;需在每个项目根目录创建.vscode/settings.json,明确指定python.defaultinterpreterpath路径,并配合launch.json设置cwd和env以确保调试、终端、导入等行为正确隔离。

VSCode 本身不支持“全局 Python 环境并发”,必须为每个项目单独配置解释器和工作区设置,否则 pip install、import、调试断点都会相互污染。
每个项目必须用独立的 .vscode/settings.json
VSCode 的 Python 解释器绑定在工作区(即文件夹)级别,不是用户级或窗口级。如果你打开多个文件夹(比如用 File → Add Folder to Workspace),每个文件夹需有自己的 .vscode/settings.json,否则后打开的项目会覆盖前一个的 python.defaultInterpreterPath 设置。
- 手动创建
.vscode/settings.json,内容至少包含:{ "python.defaultInterpreterPath": "./venv/bin/python" }(macOS/Linux)或"./venv/Scripts/python.exe"(Windows) - 不要依赖命令面板里的
Python: Select Interpreter全局选择——它只写入当前工作区的settings.json,且不会自动保存到磁盘,关掉再开可能丢失 - 如果项目用了
poetry或conda,路径要指向具体环境二进制,例如"~/.cache/pypoetry/virtualenvs/myproj-abc123-py3.11/bin/python"
launch.json 的 cwd 和 env 必须显式指定
多项目共存时,VSCode 调试器默认从“工作区根目录”启动,但若你在一个大工作区里开了多个子项目(比如 monorepo),cwd 错了会导致 ModuleNotFoundError 或读错配置文件。
- 每个项目的
.vscode/launch.json必须设"cwd": "${workspaceFolder}/subproject-a",不能省略 - 需要隔离环境变量(如
DJANGO_SETTINGS_MODULE、FLASK_APP)时,直接在env字段写死,别指望靠终端激活虚拟环境来传递 - 避免使用
"justMyCode": false调试多项目——它会让 VSCode 进入所有已加载的 Python 包源码,极大拖慢断点响应
终端自动激活对应虚拟环境失败?检查 python.terminal.executeInFileDir
VSCode 默认终端启动时不会自动 source venv/bin/activate,尤其当你从非项目根目录打开文件、再唤起终端时,which python 仍显示系统 Python。
- 在项目级
settings.json中加:"python.terminal.executeInFileDir": true
,让终端 cd 到当前编辑文件所在目录再启动 - 同时启用
"python.terminal.launchArgs": ["-i"]可让终端进入交互模式,方便验证sys.executable - 禁用
python.terminal.launchArgs中的-E(忽略环境变量)参数,否则venv的PYTHONPATH不生效
最常被忽略的一点:VSCode 的 Python 扩展会缓存 python.defaultInterpreterPath 值,哪怕你删了 settings.json,重启后仍可能沿用旧路径——务必在命令面板运行 Python: Clear Cache and Reload Window 再验证。另外,pylint 或 mypy 的路径也要单独配在 settings.json 里,它们不继承解释器路径。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











