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

pythonpip 指向 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")))'
相关推荐
“AI国潮设计-小江”12 小时前
【Python/SDXL实战】潮汕国潮IP视觉落地:普宁英歌舞猫IP & 创意甜品设计(附ComfyUI工作流与商业授权说明)
开发语言·人工智能·python·prompt·aigc
529宝宝起名网12 小时前
用 Python 分析汉字字源与起名用字的关联规律:从六书结构到文化寓意的起名偏好洞察
开发语言·python
一只旭宝12 小时前
Python 与 C/C++ 内存模型对比总结
c语言·c++·python
砚底藏山河12 小时前
容错重试与指数退避:网络抖动手抖不再丢数据(魔码量化实战 #04)
java·数据库·python·金融
今儿敲了吗13 小时前
02词云生成器
笔记·python
李高钢13 小时前
Python Tornado 框架入门:从零搭建你的第一个异步 Web 应用
前端·python·tornado
学习智者13 小时前
《玄》IDE v3.6.3重磅发布:全功能修复与性能飞跃
开发语言·c++·ide·算法·中文语言 玄
ocean210313 小时前
2025-2026年Python大厂面试高频问题
python·面试·面试经验
xn713314 小时前
实测 Codex CLI 0.154.0:response.failed 为什么会被 idle timeout waiting for SSE 覆盖
python·openai
李高钢14 小时前
Python Flask 框架入门:从零搭建你的第一个 Web 应用
前端·python·flask