GENIE / test_dependencies.py
Tom1986's picture
重构:将app.py拆分为模块化架构 + 修复onnxruntime依赖问题
24437ee
"""
依赖检测和测试脚本
用于诊断 Genie TTS 的依赖问题
"""
import sys
import importlib
import logging
logging.basicConfig(level=logging.INFO, format='%(levelname)s: %(message)s')
logger = logging.getLogger(__name__)
def test_critical_dependencies():
"""测试关键依赖"""
critical_deps = [
("onnxruntime", "ONNX Runtime - TTS推理引擎"),
("numpy", "NumPy - 数值计算基础"),
("soundfile", "SoundFile - 音频I/O"),
("huggingface_hub", "Hugging Face Hub - 模型下载"),
]
results = {}
logger.info("=== 检测关键依赖 ===")
for module_name, description in critical_deps:
try:
module = importlib.import_module(module_name)
version = getattr(module, '__version__', 'Unknown')
logger.info(f"✅ {description}: v{version}")
results[module_name] = {"status": "OK", "version": version}
except ImportError as e:
logger.error(f"❌ {description}: 未安装 - {e}")
results[module_name] = {"status": "MISSING", "error": str(e)}
return results
def test_optional_dependencies():
"""测试可选依赖"""
optional_deps = [
("scipy", "SciPy - 科学计算"),
("librosa", "Librosa - 音频分析"),
("rich", "Rich - 终端美化"),
("gradio", "Gradio - Web界面"),
("pyopenjtalk", "PyOpenJTalk - 日语处理"),
]
results = {}
logger.info("\n=== 检测可选依赖 ===")
for module_name, description in optional_deps:
try:
module = importlib.import_module(module_name)
version = getattr(module, '__version__', 'Unknown')
logger.info(f"✅ {description}: v{version}")
results[module_name] = {"status": "OK", "version": version}
except ImportError as e:
logger.warning(f"⚠️ {description}: 未安装 - {e}")
results[module_name] = {"status": "MISSING", "error": str(e)}
return results
def test_genie_tts():
"""测试 Genie TTS"""
logger.info("\n=== 检测 Genie TTS ===")
try:
import genie_tts
version = getattr(genie_tts, '__version__', 'Unknown')
logger.info(f"✅ Genie TTS: v{version}")
# 测试基本功能
try:
# 尝试访问预定义角色列表
logger.info("🔍 测试预定义角色功能...")
# 这不会实际下载,只是测试API
logger.info("✅ Genie TTS API 可访问")
return {"status": "OK", "version": version}
except Exception as e:
logger.warning(f"⚠️ Genie TTS API 测试失败: {e}")
return {"status": "PARTIAL", "version": version, "error": str(e)}
except ImportError as e:
logger.error(f"❌ Genie TTS: 未安装 - {e}")
return {"status": "MISSING", "error": str(e)}
def test_onnx_runtime_providers():
"""测试 ONNX Runtime 提供程序"""
logger.info("\n=== 检测 ONNX Runtime 提供程序 ===")
try:
import onnxruntime as ort
providers = ort.get_available_providers()
logger.info(f"可用提供程序: {providers}")
# 检查CPU提供程序
if 'CPUExecutionProvider' in providers:
logger.info("✅ CPU执行提供程序可用")
else:
logger.error("❌ CPU执行提供程序不可用")
return {"providers": providers}
except Exception as e:
logger.error(f"❌ ONNX Runtime 提供程序检测失败: {e}")
return {"error": str(e)}
def main():
"""主函数"""
logger.info("Genie TTS 依赖检测工具")
logger.info("=" * 50)
# 系统信息
logger.info(f"Python 版本: {sys.version}")
logger.info(f"平台: {sys.platform}")
# 测试依赖
critical_results = test_critical_dependencies()
optional_results = test_optional_dependencies()
genie_results = test_genie_tts()
onnx_results = test_onnx_runtime_providers()
# 总结
logger.info("\n=== 检测总结 ===")
critical_missing = [k for k, v in critical_results.items() if v["status"] != "OK"]
if critical_missing:
logger.error(f"❌ 缺少关键依赖: {', '.join(critical_missing)}")
logger.error("🚨 没有这些依赖,Genie TTS 无法正常工作!")
else:
logger.info("✅ 所有关键依赖都已安装")
optional_missing = [k for k, v in optional_results.items() if v["status"] != "OK"]
if optional_missing:
logger.info(f"ℹ️ 缺少可选依赖: {', '.join(optional_missing)}")
logger.info("💡 这些依赖缺失可能影响部分功能,但不会阻止基本运行")
if genie_results["status"] == "OK":
logger.info("🎉 Genie TTS 已准备就绪!")
elif genie_results["status"] == "PARTIAL":
logger.warning("⚠️ Genie TTS 已安装但功能可能受限")
else:
logger.error("❌ Genie TTS 未安装或无法导入")
return critical_missing, optional_missing, genie_results
if __name__ == "__main__":
main()