python-dotenv 使用文档

python-dotenv 使用文档

1. 文档概述

python-dotenv 是 Python 生态中用于管理环境变量 的标准工具库,核心函数 load_dotenv() 可从项目根目录的 .env 文件中读取键值对,并自动注入到系统环境变量中,实现敏感配置与业务代码分离,是现代 Python 项目的必备工具。

2. 核心作用

  • 隔离敏感信息(API Key、数据库密码、密钥等),避免泄露至代码仓库
  • 支持开发/测试/生产多环境配置无缝切换
  • 统一管理项目配置,提升团队协作效率
  • 符合 12-Factor App 配置分离规范

3. 快速开始

3.1 安装依赖

bash 复制代码
pip install python-dotenv

3.2 创建环境变量文件

在项目根目录 创建 .env 文件,按 KEY=VALUE 格式编写配置:

env 复制代码
# .env 文件示例
# 注释以 # 开头
DEBUG=True
DATABASE_URL=postgresql://user:pass@localhost:5432/mydb
API_KEY=sk-xxxxxx-secret-key
SECRET_KEY=your-django-secret-key
PORT=8000
# 值含空格/特殊字符需用引号包裹
MSG="Hello World"

3.3 基础使用

python 复制代码
# 导入核心函数与系统环境变量模块
from dotenv import load_dotenv
import os

# 加载 .env 文件(默认读取当前目录下的 .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"调试模式: {debug_mode}")
print(f"服务端口: {port}")

4. load_dotenv() 进阶参数

4.1 指定自定义配置文件

支持加载不同环境的配置文件(如生产环境、测试环境):

python 复制代码
# 加载生产环境配置
load_dotenv(dotenv_path=".env.production")

4.2 强制覆盖系统已有变量

python 复制代码
# override=True:若系统已存在同名环境变量,强制覆盖
load_dotenv(override=True)

4.3 自动向上级目录查找

python 复制代码
# verbose=True:自动向上级目录查找 .env 文件,未找到时输出提示
load_dotenv(verbose=True)

5. 主流框架集成示例

5.1 Flask 集成

在应用创建前加载环境变量:

python 复制代码
from dotenv import load_dotenv
# 先加载配置
load_dotenv()
from flask import Flask

app = Flask(__name__)

@app.route("/")
def index():
    return "Hello Flask"

5.2 Django 集成

settings.py 顶部加载配置:

python 复制代码
import os
from dotenv import load_dotenv

# 定位项目根目录并加载 .env
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
load_dotenv(os.path.join(BASE_DIR, '.env'))

# 后续使用配置
SECRET_KEY = os.getenv("SECRET_KEY")
DEBUG = os.getenv("DEBUG", "False") == "True"

6. 安全与最佳实践

实践项 说明
.gitignore 必须包含 .env 防止敏感配置被提交到 Git 仓库
提供 .env.example 模板 供团队参考,不包含真实密钥
禁止提交真实 .env 文件 尤其避免上传至 GitHub/GitLab
生产环境慎用 云平台(AWS/Heroku)通过控制台设置环境变量
校验必填变量 项目启动时检查关键配置是否存在

6.1 .gitignore 配置示例

复制代码
# 忽略所有环境变量文件
.env
.env.local
.env.production
.env.test

6.2 .env.example 模板示例

env 复制代码
# 复制此文件为 .env 并填写真实配置
DATABASE_URL=your_database_url
API_KEY=your_api_key
DEBUG=False
PORT=8000

7. 常见问题排查

问题现象 解决方案
加载后获取不到变量 1. 检查 .env 路径是否正确 2. 变量名区分大小写 3. 确保在 load_dotenv() 之后调用 os.getenv()
中文/特殊字符乱码 将 .env 文件编码保存为 UTF-8
变量含空格解析异常 用双引号包裹变量值
Docker 环境不生效 1. 将 .env 复制到镜像内 2. 使用 docker run --env-file .env 参数

8. 总结

python-dotenv 是 Python 项目安全管理配置的标准方案,仅需三步即可完成接入:

  1. 安装 python-dotenv
  2. 创建 .env 配置文件
  3. 调用 load_dotenv() 加载配置

配合 .gitignore 与配置模板,可大幅提升项目安全性、可维护性与协作效率,是现代 Python 开发的最佳实践之一。

相关推荐
ServBay13 小时前
9 个 Python 第三方库推荐,不用 AI 都好像多出一个团队
后端·python
用户83562907805113 小时前
如何使用 Python 添加和管理 Excel 批注(完整示例)
后端·python
用户83562907805113 小时前
使用 Python 管理 Excel 工作表:创建、复制、删除与重命名
后端·python
SelectDB13 小时前
阶跃星辰基于 SelectDB 构建 PB 级 Agent 可观测平台
大数据·数据库·aigc
这个DBA有点耶14 小时前
GROUP BY优化全解:如何写出既不丢数据又飞快的分组查询
数据库·mysql·架构
掉头发的王富贵17 小时前
【StarRocks】极限十分钟入门StarRocks
数据库·sql·mysql
Nturmoils18 小时前
WHERE 条件别凭习惯写,常用查询先跑一遍
数据库
荣码1 天前
LangGraph多Agent协作:3个Agent干活比1个强,但我踩了4个坑
java·python
用户8356290780512 天前
Python 操作 PDF 附件:添加、查看与管理指南
后端·python
Databend2 天前
在 AWS 中国峰会逛了一天,我在 Databend 展台看到了 Agent 数据基础设施的新思路
数据库·人工智能·agent