VS Code 中 Jupyter Notebook 读不到系统环境变量
问题现象
在 VS Code 的 Jupyter Notebook 中,os.getenv() 返回 None,但系统环境变量明明已经设置了:
import os
api_key = os.getenv("SILICONFLOW_API_KEY")
print(api_key) # 输出: None在终端直接运行同样的 Python 代码却能正常读取:
python -c "import os; print(os.getenv('SILICONFLOW_API_KEY'))"
# 输出: sk-xxxxx... ✅ 正常根因
VS Code 在启动时捕获环境变量快照,之后新设置的系统环境变量不会自动同步到已运行的 VS Code 实例中。
Jupyter 内核继承的是 VS Code 进程启动时的环境,而不是你当前终端的环境。所以即使你:
- ❌ 重启 Jupyter 内核 → 无效,内核仍然继承 VS Code 启动时的旧环境
- ❌ 在系统设置中新增了环境变量 → VS Code 进程不会感知
验证方法
在 PowerShell 中确认环境变量确实存在:
# PowerShell 语法(注意不是 CMD 的 echo %VAR%)
$env:SILICONFLOW_API_KEY
# 输出: sk-xxxxx... ✅
# 或者用 .NET 方法查看 User 级别环境变量
[System.Environment]::GetEnvironmentVariable("SILICONFLOW_API_KEY", "User")解决方案
方案一:完全重启 VS Code(推荐)
关闭 VS Code → 重新打开。VS Code 重新启动时会重新读取系统环境变量,Jupyter 内核就能继承到了。
⚠️ 仅重启内核不够,必须重启 VS Code 本身。
方案二:使用 python-dotenv 加载 .env 文件
在 notebook 第一个 cell 中:
from dotenv import load_dotenv
load_dotenv() # 从项目根目录的 .env 文件加载
import os
api_key = os.getenv("SILICONFLOW_API_KEY")
print(api_key) # ✅ 正常项目根目录的 .env 文件:
# 注意:直接写真实值,不要写成 ${SILICONFLOW_API_KEY} 这种 shell 变量引用
SILICONFLOW_API_KEY=sk-你的真实key方案三:在代码中临时设置(不推荐,仅调试用)
import os
os.environ["SILICONFLOW_API_KEY"] = "sk-xxxxx"注意事项
.env文件中的${VAR}语法:python-dotenv默认不会解析 shell 风格的变量引用。写成KEY=${KEY}读到的是字面量字符串${KEY},而不是系统环境变量的值。- PowerShell vs CMD:在 PowerShell 中查看环境变量用
$env:VAR,echo %VAR%是 CMD 语法,在 PowerShell 中会原样返回%VAR%,容易误判为"变量不存在"。 - 环境变量作用域:
[System.Environment]::SetEnvironmentVariable("KEY", "VALUE", "User")设置的是 User 级别,需要重启应用程序才能生效。
