问题背景:

如图,项目新增.env文件后,弹出提示框
文章目录
- [VSCode Python扩展自动加载.env环境变量机制](#VSCode Python扩展自动加载.env环境变量机制)
-
- 机制
- 注意事项
- 配置方法
-
- [方法1:VS Code 设置](#方法1:VS Code 设置)
- 方法2:修改settings.json文件
VSCode Python扩展自动加载.env环境变量机制
这个"自动加载"本质上不是 Python 在读取 .env,而是 VS Code 在创建新终端时,把 .env 中的键值注入终端进程。
机制
流程大致是:
text
.env
↓ VS Code Python 扩展读取
新建的 Bash 终端获得环境变量
↓ 子进程自动继承
Python / Jupyter / langgraph dev
↓
(示例)LangSmith 通过 os.getenv(...) 读取
例如 .env:
dotenv
LANGSMITH_API_KEY=lsv2_xxx
LANGSMITH_TRACING_V2=true
LANGSMITH_PROJECT=langchain-academy
开启:
json
{
"python.envFile": "${workspaceFolder}/.env",
"python.terminal.useEnvFile": true
}
当 VS Code 新建终端时,相当于在启动 Bash 之前准备好:
text
LANGSMITH_API_KEY=...
LANGSMITH_TRACING_V2=true
LANGSMITH_PROJECT=langchain-academy
因此你运行:
bash
python
jupyter notebook
langgraph dev
这些程序都是终端的子进程,会自动继承变量。Python 中可以直接读取:
python
import os
os.getenv("LANGSMITH_API_KEY")
不再需要 load_dotenv()。
注意事项
几个关键点:
- 只对新终端生效
已经打开的终端不会自动更新。修改 .env 后,需要删除旧终端并新建一个。
- 只影响 VS Code 集成终端
你在 Windows Terminal 或单独打开的 WSL 终端中,不会自动获得这些变量。除非手动加载:
bash
set -a
source .env
set +a
- 它和虚拟环境激活是两套机制
虚拟环境激活主要设置:
text
PATH
VIRTUAL_ENV
让 python、pip 指向 lc-academy-env。
.env 注入则负责:
text
LANGSMITH_API_KEY
OPENAI_API_KEY
TAVILY_API_KEY
两者可以同时发生,但互不替代。
- 从终端启动的 Jupyter 会继承变量
例如:
bash
jupyter notebook
Notebook 内核是该终端的子进程,因此能继承变量。但如果直接通过 VS Code Notebook 界面启动内核,它不一定经过这个终端;这种情况下,保留下面这段更稳妥:
python
from dotenv import load_dotenv
load_dotenv()
${workspaceFolder}取决于你打开的根目录
如果 VS Code 打开的是:
text
~/projects/langchain-academy
那么:
json
"python.envFile": "${workspaceFolder}/.env"
会读取:
text
~/projects/langchain-academy/.env
但若打开的是整个 ~/projects,此时默认位置会变成:
text
~/projects/.env
所以要么单独打开 langchain-academy,要么配置:
json
"python.envFile": "${workspaceFolder}/langchain-academy/.env"
.env是普通配置文件,不是完整 Bash 脚本
推荐只写简单的:
dotenv
NAME=value
不要在里面写 source、循环或其他 Shell 命令。
这种机制的优点是配置一次、新终端自动获得变量;代价是该终端启动的所有子进程都能读取这些密钥。因此一定要将 .env 加入 .gitignore,并且不要运行不可信代码。VS Code Python Environments 官方说明
配置方法
方法1:VS Code 设置
打开 VS Code 设置,搜索:
Python: Terminal Use Env File
然后勾选。
设置完成后,关闭当前终端并新建终端,因为它只对新终端生效。

验证时运行:
bash
python -c 'import os; print("LangSmith Key 已加载:", bool(os.getenv("LANGSMITH_API_KEY")))'

方法2:修改settings.json文件
也可以编辑settings.json文件,选择工作区那个:


写入:
json
{
"python.terminal.useEnvFile": true
}

重开终端,并测试:
bash
python -c 'import os; print("LangSmith Key 已加载:", bool(os.getenv("LANGSMITH_API_KEY")))'
