Files
ONE-OS/axhub-make/skills/third-party/anything-to-notebooklm/check_env.py
王冕 a27e3b8e43 feat: sync full workspace including web modules, docs, and configurations to Gitea
Optimized the root .gitignore to exclude virtual environments, node modules,
and temp folders to ensure clean and lightweight version tracking.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-09 18:12:25 +08:00

219 lines
6.5 KiB
Python
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env python3
"""
环境检查脚本 - 验证 anything-to-notebooklm skill 所有依赖
"""
import sys
import os
import json
from pathlib import Path
# 颜色输出
RED = '\033[0;31m'
GREEN = '\033[0;32m'
YELLOW = '\033[1;33m'
BLUE = '\033[0;34m'
NC = '\033[0m'
def print_status(status, message):
"""打印状态信息"""
if status == "ok":
print(f"{GREEN}{message}{NC}")
elif status == "warning":
print(f"{YELLOW}⚠️ {message}{NC}")
elif status == "error":
print(f"{RED}{message}{NC}")
else:
print(f"{BLUE} {message}{NC}")
def check_python_version():
"""检查 Python 版本"""
version = sys.version_info
version_str = f"{version.major}.{version.minor}.{version.micro}"
if version.major >= 3 and version.minor >= 9:
print_status("ok", f"Python {version_str}")
return True
else:
print_status("error", f"Python {version_str} (需要 3.9+)")
return False
def check_module(module_name, import_name=None):
"""检查 Python 模块是否已安装"""
if import_name is None:
import_name = module_name
try:
__import__(import_name)
print_status("ok", f"{module_name} 已安装")
return True
except ImportError:
print_status("error", f"{module_name} 未安装")
return False
def check_command(cmd):
"""检查命令是否可用"""
import shutil
if shutil.which(cmd):
# 尝试获取版本
import subprocess
try:
result = subprocess.run([cmd, "--version"],
capture_output=True,
text=True,
timeout=5)
version = result.stdout.split('\n')[0] if result.stdout else "unknown"
print_status("ok", f"{cmd} 已安装 ({version})")
except:
print_status("ok", f"{cmd} 已安装")
return True
else:
print_status("error", f"{cmd} 未找到")
return False
def check_mcp_config():
"""检查 MCP 配置"""
config_path = Path.home() / ".claude" / "config.json"
if not config_path.exists():
print_status("error", f"未找到 Claude 配置文件: {config_path}")
return False
try:
with open(config_path, 'r') as f:
config = json.load(f)
if "mcpServers" in config and "weixin-reader" in config["mcpServers"]:
print_status("ok", "MCP 服务器已配置")
return True
else:
print_status("warning", "MCP 服务器未配置(需要手动添加)")
return False
except Exception as e:
print_status("error", f"无法读取配置文件: {e}")
return False
def check_mcp_server():
"""检查 MCP 服务器文件"""
skill_dir = Path(__file__).parent
mcp_server = skill_dir / "wexin-read-mcp" / "src" / "server.py"
if mcp_server.exists():
print_status("ok", f"MCP 服务器文件存在")
return True
else:
print_status("error", f"MCP 服务器文件不存在: {mcp_server}")
return False
def check_notebooklm_auth():
"""检查 NotebookLM 认证状态"""
import subprocess
try:
result = subprocess.run(["notebooklm", "list"],
capture_output=True,
text=True,
timeout=10)
if result.returncode == 0:
print_status("ok", "NotebookLM 已认证")
return True
else:
print_status("warning", "NotebookLM 未认证(请运行 notebooklm login")
return False
except subprocess.TimeoutExpired:
print_status("warning", "NotebookLM 认证检查超时")
return False
except Exception as e:
print_status("error", f"NotebookLM 认证检查失败: {e}")
return False
def main():
print(f"\n{BLUE}========================================{NC}")
print(f"{BLUE} 环境检查 - anything-to-notebooklm{NC}")
print(f"{BLUE}========================================{NC}\n")
results = []
# 1. Python 版本
print(f"{YELLOW}[1/8] Python 版本{NC}")
results.append(check_python_version())
print()
# 2. 核心依赖
print(f"{YELLOW}[2/9] 核心 Python 依赖{NC}")
results.append(check_module("fastmcp"))
results.append(check_module("playwright"))
results.append(check_module("beautifulsoup4", "bs4"))
results.append(check_module("lxml"))
results.append(check_module("markitdown"))
print()
# 3. Playwright 浏览器
print(f"{YELLOW}[3/9] Playwright 可导入性{NC}")
try:
from playwright.sync_api import sync_playwright
print_status("ok", "Playwright 可以正常导入")
results.append(True)
except Exception as e:
print_status("error", f"Playwright 导入失败: {e}")
results.append(False)
print()
# 4. NotebookLM CLI
print(f"{YELLOW}[4/9] NotebookLM CLI{NC}")
results.append(check_command("notebooklm"))
print()
# 5. markitdown CLI
print(f"{YELLOW}[5/9] markitdown CLI{NC}")
results.append(check_command("markitdown"))
print()
# 6. Git 命令
print(f"{YELLOW}[6/9] Git 命令{NC}")
results.append(check_command("git"))
print()
# 7. MCP 服务器文件
print(f"{YELLOW}[7/9] MCP 服务器文件{NC}")
results.append(check_mcp_server())
print()
# 8. MCP 配置
print(f"{YELLOW}[8/9] MCP 配置{NC}")
results.append(check_mcp_config())
print()
# 9. NotebookLM 认证
print(f"{YELLOW}[9/9] NotebookLM 认证{NC}")
results.append(check_notebooklm_auth())
print()
# 总结
print(f"{BLUE}========================================{NC}")
passed = sum(results)
total = len(results)
if passed == total:
print(f"{GREEN}✅ 所有检查通过 ({passed}/{total})!环境配置完整。{NC}")
elif passed >= total * 0.8:
print(f"{YELLOW}⚠️ 大部分检查通过 ({passed}/{total}),但有些问题需要修复。{NC}")
else:
print(f"{RED}❌ 检查失败 ({passed}/{total}),请运行 install.sh 重新安装。{NC}")
print(f"{BLUE}========================================{NC}\n")
if passed < total:
print("💡 修复建议:")
print(" 1. 运行安装脚本:./install.sh")
print(" 2. 配置 MCP编辑 ~/.claude/config.json")
print(" 3. 认证 NotebookLMnotebooklm login")
print()
sys.exit(0 if passed == total else 1)
if __name__ == "__main__":
main()