前言🔖
在 Mac 中通过系统环境变量存储 API Key,代码中用 os.getenv() 读取,是兼顾「安全(避免硬编码泄露)」「规范(符合开发最佳实践)」「灵活(多环境切换)」的最优方案。
核心原理
- 把 API Key 存入 Mac 系统环境变量(永久生效),而非硬编码在代码中;
- 代码通过
os.getenv("变量名")读取环境变量值,实现「代码与密钥分离」; - 优势:密钥不随代码提交 / 分享泄露,换密钥 / 多项目共用时无需修改代码。
Mac 终端配置永久环境变量(分 Shell 版本)🔖
Mac 终端核心分 zsh(10.15+ 标配)和 bash(旧版),需根据自身 Shell 选择配置文件,先执行以下命令确认 Shell 类型:
# 查看当前终端 Shell 类型 echo $SHELL # 输出 /bin/zsh → zsh(主流);输出 /bin/bash → bash(旧版)
🔹场景 1:zsh(MacOS 10.15+ 推荐,占 99% 场景)
# 1. 打开 zsh 核心配置文件(无则自动创建) open ~/.zshrc 若提示不存在用touch 命令创建空的 .zshrc 文件(推荐) touch ~/.zshrc # 2. 在文件末尾添加以下内容(替换为真实 API Key) export DASHSCOPE_API_KEY="sk-7x x x x" # 3. 保存文件(Command+S),执行以下命令让配置立即生效 source ~/.zshrc # 4. 验证配置是否成功(输出密钥则生效) echo $DASHSCOPE_API_KEY
🔹场景 2:bash(MacOS 10.14 及以下)
# 1. 打开 bash 登录配置文件 open ~/.bash_profile # 2. 在文件末尾添加密钥配置 export DASHSCOPE_API_KEY="sk-7x x x x" # 3. 生效配置并验证 source ~/.bash_profile echo $DASHSCOPE_API_KEY # 【可选】解决 bash 新建终端不生效问题(关键) # bash 默认仅「登录式 Shell」加载 .bash_profile,需添加以下内容让每次打开终端都生效 echo "source ~/.bash_profile" >> ~/.bashrc source ~/.bashrc
代码中读取环境变量🔖
修改原代码,替换硬编码的 API Key 为 os.getenv() 读取,并添加「空值兜底提示」(避免密钥未配置时程序崩溃):
from openai import OpenAI
import os # 确保导入 os 模块
# 核心:从环境变量读取 API Key,添加空值校验
api_key = os.getenv("DASHSCOPE_API_KEY")
if not api_key:
raise ValueError(
"❌ 未找到环境变量 DASHSCOPE_API_KEY!\n"
"解决步骤:\n"
"1. 终端执行 open ~/.zshrc(zsh)或 open ~/.bash_profile(bash)\n"
"2. 添加 export DASHSCOPE_API_KEY='你的密钥'\n"
"3. 执行 source ~/.zshrc 或 source ~/.bash_profile 生效"
)
# 初始化 OpenAI 客户端(对接阿里云百炼)
client = OpenAI(
api_key=api_key, # 读取环境变量的密钥
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
🔹关键注意事项
- 变量名大小写敏感:
DASHSCOPE_API_KEY和dashscope_api_key是两个不同变量,代码与终端配置需完全一致; - 特殊字符处理:若密钥包含空格 / 特殊符号,配置时需用双引号包裹(如
export KEY="sk-7x x x x"); - 多环境兼容:若需兼容 zsh 和 bash,可将密钥写入
~/.profile(通用配置文件),并在.zshrc和.bash_profile中添加source ~/.profile; - 安全兜底:代码中必须添加空值校验,避免因环境变量未配置导致程序静默失败。
补充:临时生效方案(适合测试 / 临时使用)🔖
若不想配置永久环境变量,可在运行代码前,在终端执行以下命令(仅当前终端会话生效,关闭终端后失效):
# 临时设置环境变量 export DASHSCOPE_API_KEY="sk-7x x x x" # 运行 Python 脚本(示例) python your_script.py
总结🔖
- 存储方式:Mac 中通过
.zshrc(主流)或.bash_profile配置export DASHSCOPE_API_KEY="密钥",执行source生效; - 读取方式:代码中用
os.getenv("DASHSCOPE_API_KEY")读取,添加空值校验避免异常; - 核心优势:密钥与代码分离,既避免泄露风险,又提升多环境切换的灵活性,是企业级开发的标准做法。