Files
GitMa/test_config.py
panw 5c8fc9e265 test: 添加用于诊断环境变量加载的测试脚本
添加诊断脚本 test_config.py,用于测试和验证环境变量配置的正确加载。
脚本检查当前工作目录、Python 环境、.env 文件位置、已加载的环境变量,
并测试 python-dotenv 和 pydantic-settings 的集成情况,以协助调试配置问题。
2026-03-30 19:26:16 +08:00

105 lines
3.2 KiB
Python

"""Diagnostic script to test environment variable loading."""
import os
import sys
from pathlib import Path
# Set UTF-8 encoding for Windows console
if sys.platform == "win32":
import codecs
sys.stdout = codecs.getwriter("utf-8")(sys.stdout.buffer, "strict")
sys.stderr = codecs.getwriter("utf-8")(sys.stderr.buffer, "strict")
print("=" * 60)
print("Config Diagnostic Script")
print("=" * 60)
# Check current directory
print(f"\n1. Current working directory: {os.getcwd()}")
# Check Python path
print(f"\n2. Python executable: {sys.executable}")
print(f" Python version: {sys.version}")
# Check if we're running from backend directory
in_backend = Path.cwd().name == "backend"
print(f"\n3. Running from backend directory: {in_backend}")
# Check .env file location
env_paths = [
Path(".env"),
Path("../.env"),
Path.cwd().parent / ".env",
Path("C:/electron/git/.env")
]
print(f"\n4. Looking for .env file:")
for p in env_paths:
exists = p.exists()
if exists:
print(f" ✓ FOUND: {p}")
# Show first few lines
with open(p, 'r', encoding='utf-8') as f:
lines = f.readlines()[:3]
print(f" Content preview:")
for line in lines:
print(f" {line.rstrip()}")
else:
print(f" ✗ NOT FOUND: {p}")
# Check environment variables
print(f"\n5. Environment variables starting with 'GM_':")
gm_vars = {k: v for k, v in os.environ.items() if k.startswith('GM_')}
if gm_vars:
for k, v in gm_vars.items():
# Truncate long values for display
display_v = v[:30] + "..." if len(v) > 30 else v
print(f" {k} = {display_v}")
else:
print(" (none found)")
# Try python-dotenv if available
print(f"\n6. Testing python-dotenv:")
try:
from dotenv import load_dotenv
print(" python-dotenv is installed")
# Try loading from different paths
for env_path in env_paths:
if env_path.exists():
result = load_dotenv(env_path, override=True)
print(f" load_dotenv({env_path.name}): loaded {result} variables")
# Check what got loaded
after_vars = {k: v for k, v in os.environ.items() if k.startswith('GM_')}
print(f" GM_ vars after load: {len(after_vars)}")
break
except ImportError:
print(" python-dotenv NOT installed")
# Try importing pydantic-settings
print(f"\n7. Testing pydantic-settings:")
try:
from pydantic_settings import BaseSettings, SettingsConfigDict
print(" pydantic-settings is installed")
class TestSettings(BaseSettings):
model_config = SettingsConfigDict(
env_prefix='GM_',
env_file='.env',
env_file_encoding='utf-8',
)
encrypt_key: str = "default"
api_token: str = "default"
try:
s = TestSettings()
print(f" ✓ Settings loaded successfully")
print(f" encrypt_key: {s.encrypt_key[:20]}...")
print(f" api_token: {s.api_token[:20]}...")
except Exception as e:
print(f" ✗ Settings failed: {type(e).__name__}: {e}")
except ImportError as e:
print(f" pydantic-settings NOT installed: {e}")
print("\n" + "=" * 60)