Doiiars

MindSpider: 安装MediaCrawler依赖时自动探测pip/uv可用性并回退

@@ -230,23 +230,27 @@ class MindSpider: @@ -230,23 +230,27 @@ class MindSpider:
230 return True 230 return True
231 231
232 logger.info("正在安装MediaCrawler依赖...") 232 logger.info("正在安装MediaCrawler依赖...")
  233 + install_commands = [
  234 + [sys.executable, "-m", "pip", "install", "-r", str(mediacrawler_req), "-q"],
  235 + ["uv", "pip", "install", "-r", str(mediacrawler_req), "-q"],
  236 + ]
233 try: 237 try:
234 - result = subprocess.run(  
235 - [sys.executable, "-m", "pip", "install", "-r", str(mediacrawler_req), "-q"],  
236 - capture_output=True,  
237 - text=True,  
238 - timeout=300 # 5分钟超时  
239 - )  
240 -  
241 - if result.returncode == 0:  
242 - # 创建标记文件  
243 - marker_file.touch()  
244 - logger.info("MediaCrawler依赖安装成功")  
245 - return True  
246 - else:  
247 - logger.error(f"MediaCrawler依赖安装失败: {result.stderr}")  
248 - return False  
249 - 238 + for cmd in install_commands:
  239 + result = subprocess.run(
  240 + cmd,
  241 + capture_output=True,
  242 + text=True,
  243 + timeout=300 # 5分钟超时
  244 + )
  245 + if result.returncode == 0:
  246 + marker_file.touch()
  247 + logger.info(f"MediaCrawler依赖安装成功 (via {cmd[0]})")
  248 + return True
  249 + logger.debug(f"{cmd[0]} 安装失败,尝试下一种方式: {result.stderr.strip()}")
  250 +
  251 + logger.error("MediaCrawler依赖安装失败:所有安装方式均不可用")
  252 + return False
  253 +
250 except subprocess.TimeoutExpired: 254 except subprocess.TimeoutExpired:
251 logger.error("MediaCrawler依赖安装超时") 255 logger.error("MediaCrawler依赖安装超时")
252 return False 256 return False