Doiiars

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

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