📌 核心结论(TL;DR)
红线警告:千万不要把 API Key 硬编码(直接写死)在代码里!一旦代码上传到 GitHub/Gitee,密钥会被黑客秒级扫描盗刷,产生巨额账单。
系统级方案:将 Key 配置到操作系统的环境变量中,Python 通过 os.getenv() 动态读取,实现代码与敏感数据解耦。
企业级方案(最推荐):在项目根目录使用 .env 文件管理环境变量,结合 python-dotenv 库加载,既安全又方便多环境切换。
🔍 一、 为什么绝对不能“硬编码”?
在初学大模型开发时,为了图方便,我们往往会写出这样的代码:
# ❌ 极其危险的做法
model = ChatOpenAI(
model="deepseek-chat",
api_key="sk-9ff4c2xxxxxxxxxxxxx",
base_url="https://api.deepseek.com",
)
风险:如果你使用 Git 将这段代码推送到开源仓库(即使后来删除并重新提交,Git 的历史记录里依然能查到),自动化的爬虫机器人会在几秒钟内抓取到你的 Key,并在你的账户额度耗尽前疯狂调用。在真实的企业开发中,泄露密钥属于严重的生产事故。
💻 二、 方案一:配置 Windows 系统环境变量
这是最基础的隔离方式。
1. 配置步骤
按下 Win + R,输入 sysdm.cpl 回车,打开“系统属性”。
点击“高级”选项卡 -> 点击“环境变量”。
在“用户变量”区域,点击“新建”:
-
变量名:DEEPSEEK_API_KEY(建议全大写,用下划线分隔)
-
变量值:sk-你的真实key
点击确定保存。
2. Python 代码读取
import os
from langchain_openai import ChatOpenAI
# 从系统环境变量中读取
api_key = os.getenv("DEEPSEEK_API_KEY")
model = ChatOpenAI(
model="deepseek-chat",
api_key=api_key,
base_url="https://api.deepseek.com",
)
💻 三、 方案二:使用 .env 文件(🌟 强烈推荐)
当项目需要连接 OpenAI、DeepSeek、阿里等多个模型,或者需要配置数据库密码时,全塞进系统环境变量会非常混乱。.env 文件是业界标准的最佳实践。
1. 安装依赖
pip install python-dotenv
2. 创建 .env 文件
在项目根目录下,新建一个名为 .env 的文件(没有后缀名),填入:
DEEPSEEK_API_KEY=sk-你的真实key
3. 代码中加载
import os
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
# 加载 .env 文件到系统环境变量中
load_dotenv()
api_key = os.getenv("DEEPSEEK_API_KEY")
model = ChatOpenAI(
model="deepseek-chat",
api_key=api_key,
base_url="https://api.deepseek.com",
)
4. 别忘了忽略它!
既然用了 .env,就千万不能把它提交到 Git 仓库。务必在你的 .gitignore 文件中加上这行:
.env
⚠️ 四、 踩坑排查排雷
环境变量配置完,代码依然报错 api_key is None:
-
原因:你配置完系统环境变量或修改了 .env 文件后,没有重启 IDE。
-
排查:系统环境变量不会实时同步到已经打开的进程中。务必彻底关闭 PyCharm/VS Code,然后重新打开,或者在修改系统变量后重启电脑。
报错 ImportError: cannot import name 'load_dotenv':
-
原因:没安装库,或者装错了地方。
-
排查:确保在当前激活的虚拟环境(.venv)中执行了 pip install python-dotenv。
.env 文件失效:
-
原因:load_dotenv() 默认从当前运行脚本的目录寻找 .env 文件。如果你的脚本运行目录和 .env 不在同一级,就会找不到。
-
排查:确保 .env 文件在你的项目根目录下,且运行配置的工作目录(Working Directory)是项目根目录。


