""" 检测系统依赖工具 用于检测 PDF 生成所需的系统依赖 """ import sys from loguru import logger def check_pango_available(): """ 检测 Pango 库是否可用 Returns: tuple: (is_available: bool, message: str) """ try: # 尝试导入 weasyprint 并初始化 Pango from weasyprint import HTML from weasyprint.text.ffi import ffi, pango # 尝试调用 Pango 函数来确认库可用 pango.pango_version() return True, "✓ Pango 依赖检测通过,PDF 导出功能可用" except OSError as e: # Pango 库未安装或无法加载 error_msg = str(e) if 'pango' in error_msg.lower(): return False, ( "╔════════════════════════════════════════════════════════════════╗\n" "║ ⚠️ Pango 依赖未安装或无法加载 ║\n" "║ ║\n" "║ 📄 PDF 导出功能将不可用(其他功能不受影响) ║\n" "║ 📖 详细安装说明请查看:根目录下的 README.md ║\n" "╚════════════════════════════════════════════════════════════════╝" ) return False, f"⚠ PDF 依赖加载失败: {error_msg}" except ImportError as e: # weasyprint 未安装 return False, f"⚠ WeasyPrint 未安装: {e}" except Exception as e: # 其他未知错误 return False, f"⚠ PDF 依赖检测失败: {e}" def log_dependency_status(): """ 记录系统依赖状态到日志 """ is_available, message = check_pango_available() if is_available: logger.success(message) else: logger.warning(message) logger.info("💡 提示:PDF 导出功能需要 Pango 库支持,但不影响系统其他功能的正常使用") logger.info("📚 安装说明请参考:根目录下的 README.md 文件") return is_available if __name__ == "__main__": # 用于独立测试 is_available, message = check_pango_available() print(message) sys.exit(0 if is_available else 1)