在 Python 中,配置管理是项目开发中的重要环节,用于分离环境变量、参数设置和业务逻辑。以下是常用的标准库和第三方库及其适用场景:
一、标准库方案
Python 内置的配置管理工具,无需额外安装,适合中小型项目或简单配置需求。
1. configparser
(处理 INI 格式配置)
- 特点:解析 INI 格式配置文件,支持分层结构和类型转换。
- 适用场景:简单配置、多环境配置(开发 / 测试 / 生产)。
- 示例配置文件(
config.ini
):[database] host = localhost port = 5432 user = admin password = secret
- 读取代码:
import configparser config = configparser.ConfigParser() config.read('config.ini') db_host = config['database']['host'] # 'localhost' db_port = int(config['database']['port']) # 5432
2. json
(处理 JSON 格式配置)
- 特点:轻量级数据交换格式,支持嵌套结构,适合跨语言共享配置。
- 适用场景:API 参数配置、分布式系统配置。
- 示例配置文件(
config.json
):{ "app": { "name": "MyApp", "version": "1.0.0" }, "logging": { "level": "INFO", "file": "app.log" } }
- 读取代码:
import json with open('config.json', 'r') as f: config = json.load(f) app_name = config['app']['name'] # 'MyApp' log_level = config['logging']['level'] # 'INFO'
3. yaml
(需安装 PyYAML 库,标准库中无)
- 特点:人类友好的格式,支持注释和复杂结构,适合配置文件。
- 适用场景:DevOps(如 Docker Compose、Kubernetes)、应用配置。
- 示例配置文件(
config.yaml
):app: name: MyApp debug: true database: connection: host: localhost port: 5432 credentials: user: admin password: ${DB_PASSWORD} # 支持环境变量引用
- 读取代码:
import yaml with open('config.yaml', 'r') as f: config = yaml.safe_load(f) app_debug = config['app']['debug'] # True
二、第三方库方案
功能更强大,适合复杂项目或企业级应用。
1. PyYAML
(YAML 解析器)
- 特点:高性能 YAML 解析器,支持复杂数据类型和环境变量插值。
- 安装:
pip install pyyaml
- 示例:
import yaml from yaml import SafeLoader with open('config.yaml') as f: config = yaml.load(f, Loader=SafeLoader)
2. python-dotenv
(环境变量管理)
- 特点:从
.env
文件加载环境变量,适合本地开发和 CI/CD。 - 安装:
pip install python-dotenv
- 示例:
from dotenv import load_dotenv import os load_dotenv() # 从 .env 文件加载环境变量 db_password = os.getenv('DB_PASSWORD')
- .env 文件示例:
DB_HOST=localhost DB_PASSWORD=secret123
3. dynaconf
(动态配置管理)
- 特点:支持多格式(YAML/JSON/INI)、环境变量、加密配置和实时更新。
- 安装:
pip install dynaconf
- 示例:
from dynaconf import settings # 自动读取 .env、settings.toml 等文件 print(settings.DATABASE_URL) print(settings.get('LOG_LEVEL', default='INFO'))
4. configobj
(INI 配置增强)
- 特点:比
configparser
更强大,支持类型验证和嵌套结构。 - 安装:
pip install configobj
- 示例:
from configobj import ConfigObj config = ConfigObj('config.ini') port = config['database'].as_int('port') # 自动转换为整数
5. marshmallow
(配置验证)
- 特点:数据验证和序列化,适合复杂配置结构的类型检查。
- 安装:
pip install marshmallow
- 示例:
from marshmallow import Schema, fields, validate class AppConfigSchema(Schema): debug = fields.Boolean(required=True) port = fields.Integer(validate=validate.Range(min=1024, max=65535)) # 验证配置 result = AppConfigSchema().load({'debug': True, 'port': 8080})
6. omegaconf
(Hydra 的核心库)
- 特点:支持 YAML、命令行参数合并,适合机器学习实验配置。
- 安装:
pip install omegaconf
- 示例:
from omegaconf import OmegaConf config = OmegaConf.load('config.yaml') print(config.model.name) # 访问嵌套配置
7. Hydra
(大规模配置管理)
- 特点:Facebook 开发,支持多配置文件、动态组合和命令行覆盖。
- 安装:
pip install hydra-core
- 示例:
import hydra from omegaconf import DictConfig @hydra.main(config_path="conf", config_name="config") def main(cfg: DictConfig) -> None: print(f"Model: {cfg.model.name}, Learning Rate: {cfg.training.lr}") if __name__ == "__main__": main()
三、企业级配置方案
适合分布式系统或微服务架构。
1. etcd3
(分布式键值存储)
- 特点:高可用、强一致性的配置中心,适合微服务环境。
- 安装:
pip install etcd3
- 示例:
import etcd3 etcd = etcd3.client(host='localhost', port=2379) value, _ = etcd.get('/config/database/host') print(value.decode('utf-8'))
2. Consul
(服务发现与配置)
- 特点:与服务发现集成,支持动态配置更新。
- 安装:
pip install python-consul
- 示例:
import consul c = consul.Consul() index, data = c.kv.get('myapp/config') config = json.loads(data['Value'])
3. AWS SSM Parameter Store
(云原生配置)
- 特点:AWS 提供的安全配置存储,支持加密和权限管理。
- 安装:
pip install boto3
- 示例:
import boto3 ssm = boto3.client('ssm') response = ssm.get_parameter(Name='MyAppDatabasePassword', WithDecryption=True) password = response['Parameter']['Value']
四、选择建议
- 简单项目:
configparser
(INI)或json
+python-dotenv
。 - 复杂配置:
PyYAML
+dynaconf
或Hydra
。 - 分布式系统:
etcd3
或Consul
。 - 云环境:
AWS SSM
或Azure App Configuration
。
配置管理的最佳实践包括:
- 敏感信息(如密码)通过环境变量或加密存储。
- 区分环境配置(开发 / 测试 / 生产)。
- 使用版本控制管理配置文件,但排除敏感信息。
- 支持配置热更新,避免重启应用。