python-dotenv 是一个用于从 .env 文件加载环境变量的 Python 库,适用于开发阶段管理敏感配置(如 API 密钥、数据库密码等)。以下是详细使用说明:


1. 安装

pip install python-dotenv

2. 基本用法

  1. 创建 .env 文件
    在项目根目录创建 .env 文件,内容如下:

    # .env
    SECRET_KEY=your_secret_key_here
    DEBUG=True
    DATABASE_URL=postgres://user:password@localhost/dbname
  2. 加载环境变量
    在 Python 代码中加载 .env 文件:

    from dotenv import load_dotenv
    import os
    
    # 加载 .env 文件中的变量到环境变量
    load_dotenv()
    
    # 使用变量
    secret_key = os.getenv("SECRET_KEY")
    debug_mode = os.getenv("DEBUG")  # 返回字符串 "True"
    db_url = os.getenv("DATABASE_URL")
    
    print(secret_key)  # 输出: your_secret_key_here

3. 高级配置

  1. 指定自定义文件路径
    若 .env 文件不在根目录或需使用其他文件名:

    load_dotenv(dotenv_path="config/.env")  # 加载指定路径的 .env 文件
  2. 覆盖系统环境变量
    默认情况下,.env 中的变量不会覆盖系统环境变量。通过 override=True 强制覆盖:

    load_dotenv(override=True)
  3. 自动搜索 .env 文件
    load_dotenv 默认会自动从当前目录及其父目录搜索 .env 文件。


4. 处理变量类型

环境变量默认以字符串形式读取,需手动转换类型:

debug = os.getenv("DEBUG", "False") == "True"  # 转为布尔值
port = int(os.getenv("PORT", 5000))            # 转为整数

5. 与框架集成

  • Flask
    在 config.py 或应用入口文件中加载:

    from flask import Flask
    from dotenv import load_dotenv
    
    load_dotenv()
    app = Flask(__name__)
    app.config["SECRET_KEY"] = os.getenv("SECRET_KEY")
  • Django
    在 settings.py 开头加载:

    from dotenv import load_dotenv
    load_dotenv()
    
    SECRET_KEY = os.getenv("SECRET_KEY")
    DEBUG = os.getenv("DEBUG") == "True"

6. 使用 python-dotenv 命令行

通过 dotenv 命令运行脚本,自动加载 .env 文件:

dotenv run python your_script.py

7. 注意事项

  • 安全
    将 .env 添加到 .gitignore,避免敏感信息泄露。

  • 生产环境
    生产环境中应直接设置系统环境变量,而非使用 .env 文件。

  • 变量引用
    .env 文件支持类似 Shell 的变量扩展:

    BASE_DIR=/opt/app
    LOG_DIR=${BASE_DIR}/logs

8. 完整示例

项目结构:

myapp/
├── .env
└── app.py

app.py 内容:

from dotenv import load_dotenv
import os

load_dotenv()

DB_CONFIG = {
    "host": os.getenv("DB_HOST"),
    "user": os.getenv("DB_USER"),
    "password": os.getenv("DB_PASSWORD"),
}

print(DB_CONFIG)

通过 python-dotenv,可以高效管理开发环境配置,确保代码与敏感信息分离,提升安全性。