001.python-dotenv库用法


load_dotenv() 是 python-dotenv 库中的一个函数,用于从 .env 文件加载环境变量到当前环境中。

安装

pip install python-dotenv

基本用法

1. 最简单的用法

from dotenv import load_dotenv
import os

# 加载 .env 文件中的环境变量
load_dotenv()

# 使用环境变量
database_url = os.getenv("DATABASE_URL")
api_key = os.getenv("API_KEY")

2. 指定自定义的 .env 文件路径

from dotenv import load_dotenv
import os

# 加载指定路径的 .env 文件
load_dotenv("/path/to/your/.env")

# 或者使用相对路径
load_dotenv(".env.local")

高级用法

3. 使用 dotenv_path 参数

from dotenv import load_dotenv
import os

# 明确指定文件路径
load_dotenv(dotenv_path=".env.production")

# 如果文件不存在也不会报错
load_dotenv(dotenv_path=".env.local", verbose=True)

4. 覆盖已存在的环境变量

from dotenv import load_dotenv

# 默认情况下,已存在的环境变量不会被覆盖
load_dotenv()

# 如果要覆盖已存在的环境变量
load_dotenv(override=True)

5. 详细模式

from dotenv import load_dotenv

# verbose=True 会在加载时输出信息
load_dotenv(verbose=True)

最佳实践

1. 创建不同的环境文件

.env          # 默认,包含通用配置
.env.local    # 本地开发环境(不提交到版本控制)
.env.production  # 生产环境
.env.staging     # 预发布环境

2. 在应用启动时加载

from dotenv import load_dotenv
import os

def create_app():
    # 根据环境加载不同的配置文件
    env = os.getenv("FLASK_ENV", "development")
    
    if env == "production":
        load_dotenv(".env.production")
    elif env == "staging":
        load_dotenv(".env.staging")
    else:
        load_dotenv(".env.local")
    
    # 应用初始化代码...

3. 安全注意事项

.env
.env.local

错误处理

from dotenv import load_dotenv, dotenv_values
import os

try:
    load_dotenv()
except Exception as e:
    print(f"加载环境变量失败: {e}")

# 或者只读取值而不设置环境变量
config = dotenv_values(".env")
database_url = config.get("DATABASE_URL")