launch.json的env.pythonpath仅影响f5调试,对终端、右键运行等无效;需配合settings.json中terminal.integrated.env.*配置终端环境,并通过print(sys.path)验证各上下文路径是否生效。

launch.json 的 env.PYTHONPATH 只影响 F5 调试
你在 launch.json 里写的 "PYTHONPATH": "${workspaceFolder}",只会在按下 F5 或点击“运行调试”时生效。它对终端执行、右键运行、交互式窗口完全没作用。
常见错误现象:
- 调试能
from src.utils import x,但终端里跑python main.py就报ModuleNotFoundError - 改了
launch.json却发现 Pylint 还在标红——因为 lint 工具不走调试流程
实操建议:
- 必须写在
configurations数组的某一项里,不能放在顶层 - Windows 用分号
;拼接路径,Linux/macOS 用冒号:,混用会导致整个变量失效 - 推荐写成
"PYTHONPATH": "${workspaceFolder};${env:PYTHONPATH}",保留系统原有值,避免覆盖 site-packages - 如果项目结构是
src/core/,要把src显式加进去:"${workspaceFolder}/src;${workspaceFolder}"
terminal.integrated.env.* 控制 Ctrl+` 终端行为
这是让 python script.py 在集成终端(Ctrl+`)里能跑通的关键配置,也影响“右键 → 在终端中运行 Python 文件”。
注意:它对“在 Python 终端中运行选中代码”无效;已打开的终端不会自动刷新,必须关掉再新建。
实操建议:
- 必须按操作系统分别配置:
terminal.integrated.env.windows、terminal.integrated.env.linux、terminal.integrated.env.osx - 值必须是对象,不是字符串:
{"PYTHONPATH": "${workspaceFolder};${env:PYTHONPATH}"} - Windows 下若用了 PowerShell,默认策略会拦截
./script.py,但python script.py安全——优先用后者
.env 文件里的 PYTHONPATH 只在部分场景生效
.env 文件中的 PYTHONPATH=. 在交互式窗口(如 Jupyter Notebook)里可能生效,但在终端里读不到,除非你手动 source 它或用工具加载。
原因在于 VSCode 的 Python 扩展默认不解析 .env 文件用于终端或调试环境——只有某些插件(如 Python Dotenv)或特定启动方式(如通过 python -m venv 激活后运行)才会读取。
实操建议:
- 不要依赖
.env统一管理 PYTHONPATH,它不是 VSCode 原生支持的环境变量注入机制 - 若要用,需配合插件,并确认该插件是否覆盖你当前使用的执行路径(调试 / 终端 / 交互式窗口)
- 更可靠的做法是把路径逻辑写进
launch.json或settings.json对应字段
模块导入失败时先查 sys.path,别猜配置
遇到 ModuleNotFoundError,第一反应不该是“哪里配错了”,而是立刻在出问题的脚本开头加两行:
import sys<br>print(sys.path)
输出结果就是 Python 实际搜索模块的路径列表。你要找的目录如果不在其中,才是真问题;如果在,那可能是包结构缺 __init__.py 或导入语句写错。
实操建议:
- 不同执行方式下
sys.path差异极大:F5 调试、终端运行、右键运行、交互式窗口各自独立 - 检查时务必在**出问题的那个执行上下文里**运行
print(sys.path),比如终端报错就去终端里跑,别在调试里看 - 路径顺序很重要:
sys.path[0]是最高优先级,如果某个旧版本包路径排在前面,就会覆盖你新配的路径
实际项目里最麻烦的不是配不配得上,而是四套环境彼此隔离又共用同一个项目结构。你改了一处,另外三处可能还在用旧路径——得挨个验证,不能只信一个成功案例。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











