@[toc]
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)
实际应用示例
项目结构示例
my_project/
├── .env
├── config.py
└── main.py
.env 文件内容
# 数据库配置
DATABASE_URL=postgresql://user:password@localhost/dbname
API_KEY=your_api_key_here
DEBUG=True
SECRET_KEY=your_secret_key
# 第三方服务
STRIPE_KEY=sk_test_123456
EMAIL_HOST=smtp.gmail.com
config.py
from dotenv import load_dotenv
import os
# 加载环境变量
load_dotenv()
class Config:
"""应用配置类"""
DATABASE_URL = os.getenv("DATABASE_URL")
API_KEY = os.getenv("API_KEY")
DEBUG = os.getenv("DEBUG", "False").lower() == "true"
SECRET_KEY = os.getenv("SECRET_KEY")
STRIPE_KEY = os.getenv("STRIPE_KEY")
EMAIL_HOST = os.getenv("EMAIL_HOST")
# 带默认值的配置
PORT = int(os.getenv("PORT", "5000"))
main.py
from dotenv import load_dotenv
from config import Config
import os
# 确保环境变量已加载
load_dotenv()
def main():
# 直接使用 os.getenv
api_key = os.getenv("API_KEY")
print(f"API Key: {api_key}")
# 或者使用配置类
config = Config()
print(f"Database URL: {config.DATABASE_URL}")
print(f"Debug mode: {config.DEBUG}")
if __name__ == "__main__":
main()
最佳实践
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文件提交到版本控制 - 在
.gitignore中添加:.env .env.local - 使用
.env.example文件来记录需要的环境变量
错误处理
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")
load_dotenv() 是一个简单但强大的工具,可以帮助你更好地管理应用配置,特别是在不同环境间切换时非常有用。