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")))'
相关推荐
码云骑士1 小时前
115-多模态大模型-GPT-4V-Gemini-Qwen-VL-能力全景
python
空堂与归1 小时前
如何用Python实现深度学习?PyTorch框架核心与实践
pytorch·python·深度学习
guwentian1 小时前
从0到1手写 AI Agent Harness:为什么护城河不在模型,而在工程外壳
人工智能·python·安全·deepseek·harness
FYKJ_20101 小时前
django学习成绩预警系统10905
java·javascript·spring boot·python·spark·django·php
电化学仪器白超2 小时前
梅特勒-托利多自动滴定管产品线全览
网络·python·单片机
阿图灵2 小时前
OpenCV 图像操作六件套:读取、裁剪、缩放、旋转、通道分割与保存
图像处理·人工智能·python·深度学习·opencv·计算机视觉
桐桐桐2 小时前
Python 实战:批量生成带来源参数的 WhatsApp 短链 + 二维码
服务器·数据库·python·前端框架·ip·跨境电商·独立站
TheBestRucy2 小时前
Python 九阳神功之肆:网络编程 · Socket 从入门到实战
开发语言·网络·python
Java后端的Ai之路2 小时前
01、Python - 设计模式介绍
java·人工智能·python·设计模式·通用