launch.json的envFile配置仅对调试生效,终端完全无效:它只注入debugpy子进程,不作用于集成终端;验证方式为对比终端echo与调试print结果,且必须通过F5而非右上角运行按钮触发调试上下文。

launch.json 的 envFile 配置只对调试生效,终端里完全无效
你写好 .env 文件、也在 settings.json 里配了 python.envFile,但 os.environ.get("API_KEY") 还是返回 None?不是配置错了,而是根本没走对路径。VS Code 的 Python 插件只会把 .env 内容注入到「调试器启动的子进程」中,集成终端(Terminal)本身不读这个文件——它只认系统 shell 的环境变量。
验证方法很简单:在 VS Code 终端里执行 echo $API_KEY,如果为空,就说明没加载;而你在 F5 启动调试时,print(os.getenv("API_KEY")) 却能输出值,这恰恰证明 envFile 已生效,只是作用域受限。
-
envFile必须是绝对路径或以${workspaceFolder}开头的相对路径,不能用~/或$HOME - 支持
#注释和空行,但不解析嵌套变量(比如BASE_DIR=/app然后LOG_PATH=$BASE_DIR/logs不会展开) - 若同时在
launch.json的env字段里写了同名变量,它会覆盖envFile中的值
调试时想传命令行参数 + 环境变量,得改 launch.json 的 configurations
默认的调试配置(比如 “Python: Current File”)不带 args 和 env 字段,直接运行会丢参数、也看不到自定义变量。必须手动编辑 .vscode/launch.json,在对应 configuration 里显式声明。
示例:调试一个需要 --env prod 参数、且依赖 DATABASE_URL 的脚本:
立即学习“Python免费学习笔记(深入)”;
图片提示词生成器?不止如此。 马甲系统 —— 把脑海中的画面,翻译成AI能理解的专业表达。 用得越多,它越懂你:首次需要多问几句确认方向,用久了几乎一说就懂。 用得越多,它越快:缓存机制让后续对话越来越省。 RAG进化:成功案例持续入库,越跑越聪明。 输入「新手指南」查看完整功能介绍
{
"version": "0.2.0",
"configurations": [
{
"name": "Debug with args and env",
"type": "debugpy",
"request": "launch",
"module": "myapp.main", // 或用 "program": "${file}"
"args": ["--env", "prod"],
"env": {
"DATABASE_URL": "sqlite:///dev.db",
"LOG_LEVEL": "DEBUG"
},
"envFile": "${workspaceFolder}/.env",
"console": "integratedTerminal"
}
]
}
-
args是字符串数组,不是单个字符串;--env prod要拆成["--env", "prod"] -
env和envFile可共存,后者优先级低于前者(同名键会被env覆盖) - 用
module启动比program更适合包结构项目,避免ImportError
调试器用的是 debugpy,不是你终端里那个 python
很多人以为 F5 调试就是“在终端里跑一遍”,其实不是。VS Code 调试时启动的是独立的 debugpy 进程,它会接管 Python 解释器、注入调试逻辑,并按 launch.json 的 env/envFile 构造全新环境。这意味着:
- 你在终端里
export API_KEY=xxx,对调试无影响 - 你在
~/.zshrc里写的export,也不会被 debugpy 继承(除非你把整个 shell 环境 dump 进去,不推荐) - 虚拟环境激活状态不影响
envFile加载,但会影响python.defaultInterpreterPath指向哪个解释器
所以别在终端里反复 source .env 试图“同步”到调试——徒劳。该配的都在 launch.json 或 settings.json 里。
os.getenv() 读不到变量?先确认是否真在调试上下文里
写完配置,运行脚本却还是 None,大概率是因为你点的是右上角 ▶️「运行 Python 文件」,而不是 F5 或点击调试配置名称。这两个动作走的是完全不同路径:
- ▶️ 运行:调用终端里的
python script.py,环境 = 当前 shell 环境 - F5 / 选择配置调试:启动 debugpy,环境 =
env+envFile+ 默认系统变量
检查底部状态栏左下角:如果是「Python Debugging」或显示调试配置名(如 “Debug with args and env”),才说明真正进入了调试上下文;如果显示「Python」或「Python Interpreter」,那就是普通运行。
复杂点在于:有些插件(比如 Jupyter 扩展)会在交互式窗口里模拟部分调试行为,但它也不读 envFile —— 它只认 python.envFile 设置,且仅限语言服务器补全和 lint,不控制执行环境。

















