必须提取硬编码配置,否则代码无法安全稳定运行于多环境;应使用.env文件隔离敏感信息,配合python-dotenv加载,并注意加载路径、大小写及引号规范。

硬编码配置必须提取,否则同一份代码无法安全、稳定地运行在开发、测试、生产任一环境——这不是“建议”,而是部署失败的常见直接原因。
硬编码导致环境切换时必然出错
比如数据库连接写成 host="127.0.0.1"、password="dev123",上线时就得手动改代码。改漏一处,服务就起不来;改错一个字符,可能连上测试库删掉生产数据。更危险的是,这些值会随代码进入 Git 历史,密码、密钥一旦提交,就等于公开。
用 .env 文件把它们抽出来,就能让代码保持“环境无关”:
-
python-dotenv在启动时自动加载.env,无需修改业务逻辑 - 不同环境只需换一个
.env文件(或完全不提供,靠系统环境变量兜底) -
.gitignore里加一行.env,敏感信息天然不进版本库
为什么选 .env 而不是 config.py 或 INI
config.py 是 Python 模块,执行时可能带副作用(比如意外初始化数据库连接);config.ini 需要 configparser 解析,对布尔、整数类型支持弱,还得自己写 getint()、getboolean()。
让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限
立即学习“Python免费学习笔记(深入)”;
.env 的优势很实际:
- 格式就是
KEY=VALUE,运维、CI/CD 工具(如 GitHub Actions、Docker Compose)原生识别 -
os.getenv("DB_PORT", "5432")直接可用,类型需转换时用int()或ast.literal_eval()显式处理,逻辑清晰 - 本地开发用
python-dotenv加载,生产环境可直接用系统环境变量,零依赖
容易被忽略的三个坑
很多人以为写个 .env 就完事了,但线上常栽在这几个点上:
- 没调用
load_dotenv()—— 特别是入口文件不在项目根目录时,得传dotenv_path指定位置,否则加载失败且静默 - 变量名大小写混用 ——
DB_URL和db_url在 Linux 下是两个变量,Python 读出来是None,但不会报错 - 值里含空格或特殊字符没加引号 ——
API_KEY=abc def会被截断成abc,正确写法是API_KEY="abc def"或API_KEY='abc def'
真正麻烦的不是“怎么加 .env”,而是“什么时候该拒绝从环境变量读取”——比如密钥长度校验、URL 格式合法性,这些不能等运行时报错才暴露,得在服务启动早期主动检查并 fail fast。

















