文章目錄

  • 安裝
  • 基本用法
  • 1. 最簡單的用法
  • 2. 指定自定義的 .env 文件路徑
  • 高級用法
  • 3. 使用 `dotenv_path` 參數
  • 4. 覆蓋已存在的環境變量
  • 5. 詳細模式
  • 實際應用示例
  • 項目結構示例
  • .env 文件內容
  • config.py
  • main.py
  • 最佳實踐
  • 1. 創建不同的環境文件
  • 2. 在應用啓動時加載
  • 3. 安全注意事項
  • 錯誤處理


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() 是一個簡單但強大的工具,可以幫助你更好地管理應用配置,特別是在不同環境間切換時非常有用。