55 lines
1.5 KiB
Python
55 lines
1.5 KiB
Python
import os
|
|
from pathlib import Path
|
|
from dotenv import load_dotenv
|
|
|
|
class EnvConfig:
|
|
_instance = None
|
|
|
|
def __new__(cls):
|
|
if cls._instance is None:
|
|
cls._instance = super(EnvConfig, cls).__new__(cls)
|
|
cls._instance._initialized = False
|
|
return cls._instance
|
|
|
|
def __init__(self):
|
|
if self._initialized:
|
|
return
|
|
|
|
self._initialized = True
|
|
self.ROOT_DIR = Path(__file__).parent.parent.parent.parent
|
|
self.load_env()
|
|
|
|
def load_env(self):
|
|
env_file = self.ROOT_DIR / '.env'
|
|
if env_file.exists():
|
|
load_dotenv(env_file)
|
|
|
|
# 根据ENVIRONMENT变量加载对应的环境文件
|
|
env_type = os.getenv('ENVIRONMENT', 'prod')
|
|
if env_type == 'dev':
|
|
env_file = self.ROOT_DIR / '.env.dev'
|
|
elif env_type == 'prod':
|
|
env_file = self.ROOT_DIR / '.env.prod'
|
|
|
|
if env_file.exists():
|
|
load_dotenv(env_file, override=True)
|
|
|
|
def get(self, key, default=None):
|
|
return os.getenv(key, default)
|
|
|
|
def get_all(self):
|
|
return dict(os.environ)
|
|
|
|
def __getattr__(self, name):
|
|
return self.get(name)
|
|
|
|
# 创建全局实例
|
|
env_config = EnvConfig()
|
|
|
|
# 导出环境变量
|
|
def get_env(key, default=None):
|
|
return os.getenv(key, default)
|
|
|
|
# 导出所有环境变量
|
|
def get_all_env():
|
|
return dict(os.environ) |