本文目录导读:

- 环境变量方式(最常用)
- 使用配置文件(YAML/JSON/INI)
- 使用
python-dotenv库 - 使用
configparser(INI格式) - 使用
Pydantic配置管理(推荐) - 完整项目示例
- 最佳实践建议
- 安装依赖
在Python中隔离多环境数据(如开发、测试、生产环境)的常用方法有以下几种:
环境变量方式(最常用)
使用 os.environ + .env 文件
# .env 文件(不提交到版本控制) # 开发环境 DB_HOST=localhost DB_PORT=5432 DEBUG=True # 生产环境 # DB_HOST=prod.example.com # DB_PORT=5432 # DEBUG=False
# config.py
import os
from dotenv import load_dotenv
# 加载环境变量
load_dotenv()
class Config:
DEBUG = os.getenv('DEBUG', 'False').lower() == 'true'
DB_HOST = os.getenv('DB_HOST', 'localhost')
DB_PORT = int(os.getenv('DB_PORT', 5432))
class DevelopmentConfig(Config):
DEBUG = True
DB_HOST = 'localhost'
class ProductionConfig(Config):
DEBUG = False
DB_HOST = 'prod.db.example.com'
# 根据环境选择配置
ENV = os.getenv('APP_ENV', 'development')
config_map = {
'development': DevelopmentConfig,
'production': ProductionConfig,
}
current_config = config_map.get(ENV, DevelopmentConfig)()
使用配置文件(YAML/JSON/INI)
YAML 配置方式
# config.yaml
development:
database:
host: localhost
port: 5432
name: dev_db
debug: true
production:
database:
host: prod.example.com
port: 5432
name: prod_db
debug: false
# yaml_config.py
import yaml
import os
class YAMLConfig:
def __init__(self, env_name):
self.env_name = env_name
with open('config.yaml', 'r') as f:
self.config = yaml.safe_load(f)[env_name]
def get_database_config(self):
return self.config['database']
def is_debug(self):
return self.config.get('debug', False)
# 使用
env = os.getenv('APP_ENV', 'development')
config = YAMLConfig(env)
db_config = config.get_database_config()
使用 python-dotenv 库
# .env.development DB_HOST=localhost API_KEY=dev_key_123 # .env.production DB_HOST=prod.example.com API_KEY=prod_key_456
# dotenv_config.py
from dotenv import load_dotenv
import os
class EnvConfig:
@staticmethod
def load(env_name='development'):
env_file = f'.env.{env_name}'
if os.path.exists(env_file):
load_dotenv(env_file)
else:
load_dotenv('.env') # 默认加载
使用 configparser(INI格式)
# settings.ini [development] db_host = localhost db_port = 5432 debug = true [production] db_host = prod.example.com db_port = 5432 debug = false
# ini_config.py
import configparser
import os
class INIConfig:
def __init__(self, env_name):
config = configparser.ConfigParser()
config.read('settings.ini')
self.env_name = env_name
self.section = config[env_name]
def get(self, key, default=None):
return self.section.get(key, default)
# 使用
env = os.getenv('APP_ENV', 'development')
config = INIConfig(env)
db_host = config.get('db_host')
使用 Pydantic 配置管理(推荐)
# pydantic_config.py
from pydantic import BaseSettings
from typing import Optional
import os
class Settings(BaseSettings):
# 环境变量前缀可以自动识别
class Config:
env_prefix = 'APP_' # APP_DB_HOST
# 数据库配置
DB_HOST: str = 'localhost'
DB_PORT: int = 5432
DB_NAME: Optional[str] = 'dev_db'
# 应用配置
DEBUG: bool = False
SECRET_KEY: str = 'default-secret'
# 外部服务
API_KEY: Optional[str] = None
# 根据环境加载不同的.env文件
class EnvironmentSettings:
@staticmethod
def load():
env = os.getenv('APP_ENV', 'development')
env_file = f'.env.{env}' if env != 'development' else '.env'
from dotenv import load_dotenv
load_dotenv(env_file)
return Settings()
settings = EnvironmentSettings.load()
print(settings.DB_HOST) # 自动从环境变量读取
完整项目示例
# app.py
import os
from dotenv import load_dotenv
# 自动检测环境
ENVIRONMENT = os.getenv('PYTHON_ENV', 'development')
# 加载对应配置
if ENVIRONMENT == 'production':
load_dotenv('.env.production')
elif ENVIRONMENT == 'staging':
load_dotenv('.env.staging')
else:
load_dotenv('.env.development')
# 配置类
class AppConfig:
def __init__(self):
self.DB_CONFIG = {
'host': os.getenv('DB_HOST'),
'port': int(os.getenv('DB_PORT', 5432)),
'database': os.getenv('DB_NAME'),
'user': os.getenv('DB_USER'),
'password': os.getenv('DB_PASSWORD'),
}
self.REDIS_CONFIG = {
'host': os.getenv('REDIS_HOST', 'localhost'),
'port': int(os.getenv('REDIS_PORT', 6379)),
}
self.DEBUG = os.getenv('DEBUG', 'False').lower() == 'true'
self.SECRET_KEY = os.getenv('SECRET_KEY')
config = AppConfig()
最佳实践建议
- 永远不要将敏感信息提交到版本控制(使用
.gitignore) - 使用环境变量作为默认配置的覆盖层
- 为不同环境提供示例配置文件(如
.env.example) - 使用配置文件模板,避免硬编码
- 考虑使用
python-decouple或environs等库简化配置管理
安装依赖
pip install python-dotenv pyyaml pydantic configparser
选择哪种方式取决于项目复杂度、团队习惯和部署要求,小型项目使用 python-dotenv 就够用,大型项目推荐使用 Pydantic 或自定义配置类。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播