VSCode Python扩展自动加载.env环境变量机制(Python插件)python.terminal.useEnvFile

问题背景:

如图,项目新增.env文件后,弹出提示框

文章目录

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()。

注意事项

几个关键点:

  1. 只对新终端生效

已经打开的终端不会自动更新。修改 .env 后,需要删除旧终端并新建一个。

  1. 只影响 VS Code 集成终端

你在 Windows Terminal 或单独打开的 WSL 终端中,不会自动获得这些变量。除非手动加载:

bash 复制代码
set -a
source .env
set +a
  1. 它和虚拟环境激活是两套机制

虚拟环境激活主要设置:

text 复制代码
PATH
VIRTUAL_ENV

让 python、pip 指向 lc-academy-env。

.env 注入则负责:

text 复制代码
LANGSMITH_API_KEY
OPENAI_API_KEY
TAVILY_API_KEY

两者可以同时发生,但互不替代。

  1. 从终端启动的 Jupyter 会继承变量

例如:

bash 复制代码
jupyter notebook

Notebook 内核是该终端的子进程,因此能继承变量。但如果直接通过 VS Code Notebook 界面启动内核,它不一定经过这个终端;这种情况下,保留下面这段更稳妥:

python 复制代码
from dotenv import load_dotenv

load_dotenv()
  1. ${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"
  1. .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")))'
相关推荐
Cooper258 小时前
DDC 命令成功但屏幕不动:用 gamma 表重做亮度映射
python·mac
师夷长技以自愈9 小时前
手搓 AI Agent 第 7 篇:菜做砸了别硬炒——错误分类 + 双账本熔断
人工智能·python
用户956256254299 小时前
15 分钟社媒简报 Agent:我只用了搜索和模型两步
python·api
Dumbness9 小时前
关键词回复里写了 {订单号},群机器人整条消息都炸了
python·微信
调接口的阿光9 小时前
调用对话接口时输出被截断怎么办:先看 finish_reason,再决定是续写一次、缩小范围,还是换成更短的格式(Python)
人工智能·python
Cooper259 小时前
单文件 Flask 跑通微信服务器校验:先跑通再谈工程化
python·flask
Cooper259 小时前
三源热榜去重加 AI 摘要:URL 唯一键踩出的三个坑
前端·python
用户4019925568619 小时前
多源异构 B2B 公开需求信号去重与企业实体证据链存储设计(64-bit SimHash 分桶 + Jaccard)
python
aifannihao10 小时前
GitHub Actions 锁文件实测:6 个 uses 只锁住 2 个
python·ci/cd·标准库·供应链安全·github actions
2601_9679801110 小时前
使用gensim处理文本(1)语料库与词向量空间
python·自然语言处理·gensim·词向量·文本分析