Python dotenv 库 load_dotenv() 使用指南
在开发 Python 项目时,常面临数据库密码、API 密钥泄露风险,以及多环境配置切换困难等问题。load_dotenv() 来自 python-dotenv 库,是一个轻量级工具函数,用于从 .env 文件中读取键值对,并注入到操作系统的环境变量中。它让敏感配置与代码彻底分离,是现代 Python 项目的标准实践。
Python 的 python-dotenv 库及其 load_dotenv() 函数的使用方法。该函数用于从 .env 文件中读取键值对并注入到操作系统环境变量中,实现敏感配置与代码分离。内容包括安装步骤、创建 .env 文件、代码加载示例、进阶用法(指定路径、覆盖变量)、框架集成(Django/Flask)以及安全最佳实践(如 .gitignore 配置)。同时提供了常见问题排查和云平台部署建议,强调生产环境应通过控制台设置环境变量而非依赖本地文件。
在开发 Python 项目时,常面临数据库密码、API 密钥泄露风险,以及多环境配置切换困难等问题。load_dotenv() 来自 python-dotenv 库,是一个轻量级工具函数,用于从 .env 文件中读取键值对,并注入到操作系统的环境变量中。它让敏感配置与代码彻底分离,是现代 Python 项目的标准实践。
.gitignore)pip install python-dotenv
# .env
DEBUG=True
DATABASE_URL=postgresql://user:pass@localhost:5432/mydb
API_KEY=sk-xxxxxx-secret-key
SECRET_KEY=your-django-secret-key-here
PORT=8000
命名规范:全大写 + 下划线,值含空格需加引号(如 NAME="John Doe")。
from dotenv import load_dotenv
import os
# 加载 .env 文件(默认当前目录)
load_dotenv()
# 安全获取变量(推荐使用 os.getenv)
# 环境变量值永远是字符串类型,需要处理后返回布尔类型
debug_mode = os.getenv("DEBUG", "False") == "True"
api_key = os.getenv("API_KEY")
port = int(os.getenv("PORT", 5000)) # 提供默认值防崩溃
print(f"服务运行在端口:{port}")
load_dotenv(dotenv_path=".env.production") # 加载生产环境配置
load_dotenv(override=True) # 覆盖系统已存在的同名环境变量
Django(settings.py 顶部):
from dotenv import load_dotenv
load_dotenv(os.path.join(BASE_DIR, '.env'))
Flask(app.py 开头):
from dotenv import load_dotenv
load_dotenv() # 必须在创建 app 前调用
from flask import Flask
app = Flask(__name__)
load_dotenv(verbose=True) # 自动向上级目录查找 .env
| 实践 | 说明 |
|---|---|
| ✅ .gitignore 必加 | 将 .env 加入 .gitignore,防止误提交 |
| ✅ 提供 .env.example | 创建模板文件供团队参考(不含真实值) |
| ✅ 验证必填变量 | 启动时检查关键变量是否存在 |
| ❌ 禁止提交真实 .env | 尤其是含密码/密钥的文件 |
| 🌐 生产环境慎用 | 云平台(如 Heroku/AWS)应通过控制台设置环境变量 |
.gitignore 示例:
# 敏感配置文件
.env
.env.local
.env.production
.env.example 模板示例:
# 复制为 .env 并填入实际值
DATABASE_URL=your_database_url_here
API_KEY=your_api_key_here
DEBUG=False
| 问题 | 解决方案 |
|---|---|
| 加载后仍取不到值 | 检查:1. .env 路径是否正确 2. 变量名大小写 3. 是否在 load_dotenv() 后调用 os.getenv() |
| 中文乱码 | 保存 .env 为 UTF-8 编码 |
| 变量含空格/特殊字符 | 用引号包裹:MSG="Hello World!" |
| Docker 中不生效 | 确保 .env 被 COPY 进镜像,或使用 --env-file 参数 |
'配置即代码'是 DevOps 黄金准则。load_dotenv() 以极简设计践行了 12-Factor App 原则中的 III. Config:
'将配置存储于环境变量中,与代码严格分离。'
它不仅是工具,更是一种工程素养的体现——保护用户数据、提升协作效率、筑牢安全防线。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online