在 Python 编程中,管理和获取外部配置参数是开发中常见的需求。外部配置不仅可以使代码更加灵活和可维护,还可以在不同的环境中轻松调整应用行为。以下是一些常用的库、方法及配置文件格式,用于在 Python 中处理外部配置参数。

常用的配置文件格式

1.INI 文件

  • 特点:简单、易读,适用于基本配置。
  • 示例
    [database]
    host = localhost
    port = 5432
    user = admin
    password = secret
    

2.JSON 文件

  • 特点:结构化强,支持复杂的数据类型,广泛用于 API 和配置。
  • 示例
    {
      "database": {
        "host": "localhost",
        "port": 5432,
        "user": "admin",
        "password": "secret"
      }
    }
    

3.YAML 文件

  • 特点:人类可读性高,支持复杂数据结构,适合大型配置。
  • 示例
    database:
      host: localhost
      port: 5432
      user: admin
      password: secret
    

4.TOML 文件

  • 特点:简洁、易读,适用于配置文件,如 Poetry 使用的 pyproject.toml
  • 示例
    [database]
    host = "localhost"
    port = 5432
    user = "admin"
    password = "secret"
    

5.环境变量(Environment Variables)

  • 特点:适合存储敏感信息(如 API 密钥),与操作系统集成良好。
  • 示例
    export DATABASE_HOST=localhost
    export DATABASE_PORT=5432
    export DATABASE_USER=admin
    export DATABASE_PASSWORD=secret
    

6..env 文件

  • 特点:简化环境变量的管理,通常用于开发环境。
  • 示例
    DATABASE_HOST=localhost
    DATABASE_PORT=5432
    DATABASE_USER=admin
    DATABASE_PASSWORD=secret
    

常用的库及其方法

1.configparser(内置库)

  • 支持格式:INI

  • 特点:内置库,无需额外安装,适合简单的配置需求。

  • 安装:无需安装(Python 标准库)

  • 示例

    import configparser
    
    config = configparser.ConfigParser()
    config.read('config.ini')
    
    db_host = config['database']['host']
    db_port = config.getint('database', 'port')  # 获取整数类型
    db_user = config['database']['user']
    db_password = config['database']['password']
    
    print(db_host, db_port, db_user, db_password)
    

2.json(内置库)

  • 支持格式:JSON

  • 特点:内置库,适合处理结构化数据。

  • 安装:无需安装(Python 标准库)

  • 示例

    import json
    
    with open('config.json', 'r') as f:
        config = json.load(f)
    
    db_host = config['database']['host']
    db_port = config['database']['port']
    db_user = config['database']['user']
    db_password = config['database']['password']
    
    print(db_host, db_port, db_user, db_password)
    

3.PyYAML / ruamel.yaml

  • 支持格式:YAML

  • 特点:支持复杂的 YAML 格式,ruamel.yaml 更加活跃和功能丰富。

  • 安装

    pip install pyyaml
    # 或者
    pip install ruamel.yaml
    
  • 示例(使用 PyYAML):

    import yaml
    
    with open('config.yaml', 'r') as f:
        config = yaml.safe_load(f)
    
    db_host = config['database']['host']
    db_port = config['database']['port']
    db_user = config['database']['user']
    db_password = config['database']['password']
    
    print(db_host, db_port, db_user, db_password)
    

4.toml / tomli / tomllib(Python 3.11+)

  • 支持格式:TOML

  • 特点tomllib 是 Python 3.11 新增的内置库,处理 TOML 文件非常方便。

  • 安装(对于 Python < 3.11):

    pip install tomli  # 只读
    pip install toml    # 可写
    
  • 示例(使用 tomllib,适用于 Python 3.11+):

    import tomllib
    
    with open('config.toml', 'rb') as f:
        config = tomllib.load(f)
    
    db_host = config['database']['host']
    db_port = config['database']['port']
    db_user = config['database']['user']
    db_password = config['database']['password']
    
    print(db_host, db_port, db_user, db_password)
    

5.python-dotenv

  • 支持格式:.env 文件(环境变量)

  • 特点:简化环境变量的加载,适合开发和部署敏感信息。

  • 安装

    pip install python-dotenv
    
  • 示例

    from dotenv import load_dotenv
    import os
    
    load_dotenv('.env')  # 默认加载 .env 文件
    
    db_host = os.getenv('DATABASE_HOST')
    db_port = os.getenv('DATABASE_PORT')
    db_user = os.getenv('DATABASE_USER')
    db_password = os.getenv('DATABASE_PASSWORD')
    
    print(db_host, db_port, db_user, db_password)
    

6.dynaconf

  • 支持格式:支持多种格式(INI、JSON、YAML、TOML、环境变量等)

  • 特点:功能强大,支持多层次配置(如开发、测试、生产环境),支持从多个源加载配置。

  • 安装

    pip install dynaconf
    
  • 示例

    配置文件 settings.toml

    [default]
    database_host = "localhost"
    database_port = 5432
    database_user = "admin"
    database_password = "secret"
    
    [development]
    database_host = "dev.localhost"
    
    [production]
    database_host = "prod.db.server"
    

    Python 代码

    from dynaconf import Dynaconf
    
    settings = Dynaconf(
        settings_files=['settings.toml'],
        environments=True,
        env_switcher='ENV_FOR_DYNACONF'
    )
    
    # 设定当前环境
    os.environ['ENV_FOR_DYNACONF'] = 'development'
    
    db_host = settings.database_host
    db_port = settings.database_port
    db_user = settings.database_user
    db_password = settings.database_password
    
    print(db_host, db_port, db_user, db_password)
    

7.pydantic

  • 支持格式:常与 JSON、环境变量、Python 类结合使用

  • 特点:基于数据模型进行配置验证,适合需要强类型和验证的场景。

  • 安装

    pip install pydantic
    
  • 示例

    from pydantic import BaseSettings
    
    class Settings(BaseSettings):
        database_host: str
        database_port: int
        database_user: str
        database_password: str
    
        class Config:
            env_file = ".env"
    
    settings = Settings()
    
    print(settings.database_host, settings.database_port, settings.database_user, settings.database_password)
    

综合示例

以下是一个综合示例,演示如何使用不同的库和配置格式加载配置参数。

使用 configparser 读取 INI 文件

配置文件 config.ini

[database]
host = localhost
port = 5432
user = admin
password = secret

Python 代码

import configparser

def load_config_ini(path='config.ini'):
    config = configparser.ConfigParser()
    config.read(path)
    return config['database']

db_config = load_config_ini()
print(db_config['host'], db_config['port'], db_config['user'], db_config['password'])

使用 PyYAML 读取 YAML 文件

配置文件 config.yaml

database:
  host: localhost
  port: 5432
  user: admin
  password: secret

Python 代码

import yaml

def load_config_yaml(path='config.yaml'):
    with open(path, 'r') as f:
        return yaml.safe_load(f)['database']

db_config = load_config_yaml()
print(db_config['host'], db_config['port'], db_config['user'], db_config['password'])

使用 pydantic 和 .env 文件

.env 文件

DATABASE_HOST=localhost
DATABASE_PORT=5432
DATABASE_USER=admin
DATABASE_PASSWORD=secret

Python 代码

from pydantic import BaseSettings

class Settings(BaseSettings):
    database_host: str
    database_port: int
    database_user: str
    database_password: str

    class Config:
        env_file = ".env"

settings = Settings()
print(settings.database_host, settings.database_port, settings.database_user, settings.database_password)

总结

在 Python 中,获取外部配置参数有多种方法和工具可供选择。选择合适的库和配置格式取决于项目的需求、复杂度以及开发者的偏好。以下是一些选择建议:

  • 简单配置:使用内置的 configparser 读取 INI 文件或使用 JSON。
  • 复杂配置:使用 YAML 或 TOML 文件,通过 PyYAMLruamel.yaml 或 tomllib 进行读取。
  • 环境变量管理:使用 python-dotenv 加载 .env 文件,适合存储敏感信息。
  • 多环境、多源配置:使用 dynaconf 这样的高级配置管理库。
  • 配置验证和强类型:使用 pydantic 定义数据模型进行配置管理。
Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐