Python 專案配置管理框架技術選型

曾左發表於2024-09-23

一、背景介紹

在實際生產專案中,不同環境(如開發、測試、生產環境)常有不同配置需求,如資料庫連結等。我們期望一份程式碼無需改動,僅透過單一配置變數調整就能適配和使用多個環境,實現 “一份程式碼,多處部署”的需求,以提升系統部署靈活性及配置管理能力。具體而言,支援“多環境配置”的配置管理框架(類庫)應支援以下功能:

(1)必須支援不同環境載入不同配置,且多個環境可載入通用配置。

(2)必須支援複雜資料結構,如:列表、字典、物件等。

(3)必須支援欄位資料型別轉換,如:直接輸出布林型別欄位的值 True,而不是字串 'True'。

(4)必須支援變數引用,如:DOMAIN = "example.org",ADMIN_EMAIL = "admin@{DOMAIN}"。

(5)最好支援執行時動態修改配置,可透過修改系統環境變數更新變數值。

(6)最好支援主流配置檔案格式,如 yml、json、toml 等,尤其是 Python 中常見的 toml 格式。

二、技術選型

Python 技術棧中常見的配置管理框架(類庫)有 ConfigParser、pydantic、dynaconf、dotenv 和 configobj。其中僅 ConfigParser 為 Python 標準庫內建模組。以下對各類庫功能、優缺點進行對比,進而輸出最終選型。

1. 功能對比

功能/庫 dynaconf pydantic dotenv configobj ConfigParser
不同環境載入不同配置,且多個環境可載入通用配置 支援 部分支援 部分支援 部分支援 部分支援
支援複雜資料結構,如列表、字典、物件等 支援 支援 不支援 支援 不支援
支援欄位資料型別轉換 支援 支援 不支援 部分支援 部分支援
支援變數引用 支援 不支援 支援 支援 部分支援
執行時動態修改配置配置 支援 支援 支援 支援 支援
支援主流配置檔案格式,如 yml、json、toml 等 支援 支援 不支援 不支援 不支援

部分支援 指需要額外擴充套件或二次開發。

2. 優缺點總結

優點 缺點
dynaconf 支援多種配置檔案格式(YAML、JSON、TOML 等);支援複雜資料結構;支援環境切換和通用配置;功能強大,靈活性高。 需要額外安裝;學習曲線相對較陡。
pydantic 強大的資料驗證和型別轉換功能;支援複雜資料結構;與 FastAPI 等框架整合良好。 需要額外安裝;不直接支援多種配置檔案格式,但可以結合其他庫使用。
dotenv 簡單易用,適合載入環境變數;與其他庫相容性好。 功能有限,僅支援 .env 檔案;不支援複雜資料結構和多種配置檔案格式。
configobj 支援巢狀結構和基本的資料型別轉換;易於使用,適合處理 .ini 格式的配置檔案。 不支援多種配置檔案格式(僅支援 .ini);部分支援高階配置管理功能,如環境切換和通用配置。
ConfigParser 內建於 Python 標準庫,無需額外安裝;簡單易用,適合處理基本的 .ini 配置檔案。 不支援複雜資料結構;不支援多種配置檔案格式;功能較為有限,不支援高階配置管理功能。

希望這個調整後的表格能夠更好地滿足你的需求。

三、最終選擇

經上述功能對比及優缺點總結,dotenv 和 ConfigParser 因不支援複雜資料結構被率先排除;configobj 既不支援多種配置檔案格式,又僅部分支援通用配置和資料轉換,也不合適;剩餘兩方案中,pydantic 極少用於配置管理,不支援變數引用,僅部分支援載入通用配置,實際使用時配置載入與解釋需二次開發,也不完全適合當配置管理工具。而 dynaconf 功能全面,又是專業配置管理庫,為最優選擇。

相關文章