vscode中python“找不到模块”主因是解释器路径与pythonpath未同步配置:需在项目级.vscode/settings.json中同时设置python.defaultinterpreterpath和对应系统的terminal.integrated.env.*下pythonpath为${workspacefolder}或子目录,并重启窗口生效。

VSCode 里 Python 项目“找不到模块”或“导入失败”,八成不是代码问题,而是它根本没把你的项目根目录当回事——settings.json 里没配对 python.defaultInterpreterPath 和 PYTHONPATH,或者压根没用对配置层级。
为什么 .vscode/settings.json 是首选方案
项目级配置必须落在项目根目录下的 .vscode/settings.json,而不是全局用户设置。VS Code 配置优先级是:工作区(.code-workspace) > 项目本地(.vscode/settings.json) > 全局用户设置。如果你只在全局改了 python.defaultInterpreterPath,但项目里有虚拟环境,那它大概率还是用错解释器。
- 新建项目时,先创建
.vscode文件夹,再建settings.json,别手抖建错位置 - 路径必须用相对路径(如
"./venv/bin/python")或带变量的路径(如"${workspaceFolder}/venv/Scripts/python.exe"),绝对路径在换机器后直接失效 - Windows 下路径分隔符用正斜杠
/更稳妥,比如".\venv\Scripts\python.exe"容易被 JSON 解析器误判为转义
python.defaultInterpreterPath 和 PYTHONPATH 必须配齐
只设解释器不设 PYTHONPATH,import src.utils 这类跨目录导入照样报 ModuleNotFoundError。VS Code 不会自动把项目根加进 Python 的模块搜索路径,得手动喂。
- 在
.vscode/settings.json中同时写入这两项:
{
"python.defaultInterpreterPath": "./venv/bin/python",
"terminal.integrated.env.linux": { "PYTHONPATH": "${workspaceFolder}" },
"terminal.integrated.env.osx": { "PYTHONPATH": "${workspaceFolder}" },
"terminal.integrated.env.windows": { "PYTHONPATH": "${workspaceFolder}" }
}
-
${workspaceFolder}是唯一可靠的变量,指向你通过「文件 → 打开文件夹」选中的那个根目录;${fileDirname}或${cwd}在终端/调试中行为不一致,别乱用 - 如果项目用了
src/结构(推荐),PYTHONPATH应设为"${workspaceFolder}/src",而不是根目录
调试时 cwd 和 python.defaultInterpreterPath 冲突怎么办
运行单个脚本没问题,但一调试就提示“找不到依赖”或“__main__.py 找不到”,往往是 launch.json 里的 cwd 和 settings.json 里的解释器路径不匹配。
-
launch.json中的cwd控制的是「当前工作目录」,影响open("data.csv")这类相对路径读取;而python.defaultInterpreterPath只管用哪个 Python 启动进程 - 常见错误:把
cwd设成"${workspaceFolder}/src",但解释器路径仍指向"./venv/bin/python"(根目录下),结果虚拟环境激活了,但模块路径还是错的 - 建议统一锚点:所有路径都基于
${workspaceFolder},比如cwd设为"${workspaceFolder}",PYTHONPATH根据结构补/src,解释器路径也保持相对
多根工作区(.code-workspace)下怎么设项目根
当你用 .code-workspace 管理 frontend/backend 两个子项目时,每个子项目仍需自己的 .vscode/settings.json。工作区文件本身只负责聚合路径和统一 UI 设置,不接管各子项目的 Python 解释器或模块路径。
-
.code-workspace文件里不要硬写python.defaultInterpreterPath,它会被子项目里的.vscode/settings.json覆盖,徒增混乱 - 每个子项目根目录下独立维护
.vscode/settings.json,例如backend/.vscode/settings.json里路径写"./venv/bin/python",而不是跨目录写"../backend/venv/bin/python" - 如果 backend 依赖 shared-lib,且 shared-lib 是另一个 workspace folder,那就用
python.autoComplete.extraPaths补路径,而不是靠PYTHONPATH—— 后者只影响运行时,不影响补全
真正容易被忽略的,是 ${workspaceFolder} 这个变量只在 VS Code 启动时解析一次,改完 settings.json 必须重启窗口(不是重载窗口),否则新 PYTHONPATH 值不会注入到已打开的终端里。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











