You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MacOS(arm64)下Colab中Cytoscape Automation脚本连接失败求助

MacOS ARM64 下 Google Colab 无法连接本地 Cytoscape 问题排查与解决

问题概述

  • 在MacOS(arm64)设备上,Google Colab中的Cytoscape Automation脚本无法连接本地运行的Cytoscape;Windows 11上可正常运行的Overview-of-py4cytoscape.ipynb示例,在MacBook(ARM)上完全失效。
  • 本地Cytoscape可正常启动,但调用p4c.cytoscape_version_info()函数时,Colab持续抛出RequestException: Cannot find local or remote Cytoscape错误。

环境信息

  • Cytoscape版本:3.10.1
  • Java版本:17.0.5 by Eclipse Adoptium
  • Java Home:/Applications/Cytoscape_v3.10.1/.install4j/jre.bundle/Contents/Home
  • 操作系统:Mac OS X 14.1.1 - aarch64

错误日志

RequestException                          Traceback (most recent call last)
<ipython-input-3-aac4e79c4feb> in <cell line: 1>()
----> 1 p4c.cytoscape_version_info()

9 frames
/usr/local/lib/python3.10/dist-packages/py4cytoscape/py4cytoscape_logger.py in wrapper_log(*args, **kwargs)
    131             return log_return(func, value)
    132         except Exception as e:
--> 133             log_exception(func, e)
    134         finally:
    135             log_finally()

/usr/local/lib/python3.10/dist-packages/py4cytoscape/py4cytoscape_logger.py in wrapper_log(*args, **kwargs)
    128         log_incoming(func, *args, **kwargs)
    129         try:
--> 130             value = func(*args, **kwargs) # Call function being logged
    131             return log_return(func, value)
    132         except Exception as e:

/usr/local/lib/python3.10/dist-packages/py4cytoscape/cytoscape_system.py in cytoscape_version_info(base_url)
     79         {'apiVersion': 'v1', 'cytoscapeVersion': '3.8.1', 'automationAPIVersion': '0.0.0', 'py4cytoscapeVersion': '0.0.2'}
     80     """
---> 81     versions = commands.cyrest_get('version', base_url=base_url)
     82     if len(versions) == 0:
     83         raise CyError('CyREST connection problem. py4cytoscape cannot continue!')

/usr/local/lib/python3.10/dist-packages/py4cytoscape/py4cytoscape_logger.py in wrapper_log(*args, **kwargs)
    131             return log_return(func, value)
    132         except Exception as e:
--> 133             log_exception(func, e)
    134         finally:
    135             log_finally()

/usr/local/lib/python3.10/dist-packages/py4cytoscape/py4cytoscape_logger.py in wrapper_log(*args, **kwargs)
    128         log_incoming(func, *args, **kwargs)
    129         try:
--> 130             value = func(*args, **kwargs) # Call function being logged
    131             return log_return(func, value)
    132         except Exception as e:

/usr/local/lib/python3.10/dist-packages/py4cytoscape/commands.py in cyrest_get(operation, parameters, base_url, require_json, raw_get)
    157                 return r.text
    158     except requests.exceptions.RequestException as e:
--> 159         _handle_error(e)
    160 
    161 

/usr/local/lib/python3.10/dist-packages/py4cytoscape/commands.py in cyrest_get(operation, parameters, base_url, require_json, raw_get)
    147     try:
    148         url = build_url(base_url, operation)
--> 149         r = _do_request('GET', url, params=parameters, base_url=base_url, raw_request=raw_get)
    150         r.raise_for_status()
    151         try:

/usr/local/lib/python3.10/dist-packages/py4cytoscape/commands.py in _do_request(method, url, base_url, raw_request, **kwargs)
    693 def _do_request(method, url, base_url=DEFAULT_BASE_URL, raw_request=False, **kwargs):
    694     # Determine whether actual call is local or remote
--> 695     requester, default_sandbox = _get_requester(base_url)
    696 
    697     if not raw_request:

/usr/local/lib/python3.10/dist-packages/py4cytoscape/commands.py in _get_requester(base_url)
    777 def _get_requester(base_url):
    778     # Figure out whether CyREST available only via Jupyter-Bridge and what the default sandbox should be
--> 779     environment = _find_execution_environment(base_url)
    780     if environment == ExecutionEnvironment.REMOTE_JUPYTER_BRIDGE:
    781         default_sandbox = set_default_sandbox(**sandbox_initializer(sandboxName=PREDEFINED_SANDBOX_NAME))

/usr/local/lib/python3.10/dist-packages/py4cytoscape/commands.py in _find_execution_environment(base_url)
    801     environment = check_execution_environment(base_url)
    802     if environment == ExecutionEnvironment.UNKNOWN:
--> 803         raise requests.exceptions.RequestException('Cannot find local or remote Cytoscape. Start Cytoscape and then proceed.')
    804     return environment

RequestException: Cannot find local or remote Cytoscape. Start Cytoscape and then proceed.

排查与解决方案

1. 确认CyREST服务端口可达

  • 在本地浏览器访问http://localhost:1234/v1/version,检查是否能返回Cytoscape版本信息。若无法访问,说明CyREST服务未正常启动,重启Cytoscape后重试。
  • 检查MacOS防火墙设置,确保允许Cytoscape接收本地连接,或临时关闭防火墙测试。

2. 强制指定本地连接地址

在Colab脚本中显式传入base_url参数,跳过环境自动检测逻辑:

import py4cytoscape as p4c
# 强制指向本地CyREST服务地址
p4c.cytoscape_version_info(base_url='http://localhost:1234/v1')

3. 修复ARM架构下的JAVA_HOME配置

尽管已配置JAVA_HOME,但ARM架构可能存在路径识别问题:

  • 在终端执行echo $JAVA_HOME,确认输出为/Applications/Cytoscape_v3.10.1/.install4j/jre.bundle/Contents/Home。
  • 若未正确设置,编辑~/.zshrc(或~/.bash_profile)添加:
export JAVA_HOME="/Applications/Cytoscape_v3.10.1/.install4j/jre.bundle/Contents/Home"
export PATH="$JAVA_HOME/bin:$PATH"
  • 执行source ~/.zshrc使配置生效,重启Cytoscape。

4. 匹配py4cytoscape与Cytoscape版本

Colab默认安装的py4cytoscape版本可能与Cytoscape 3.10.1不兼容:

# 查看当前py4cytoscape版本
!pip show py4cytoscape
# 安装兼容版本(建议选择1.0.1及以上适配Cytoscape 3.10.x)
!pip install py4cytoscape==1.2.1

5. 云端到本地的端口映射

Colab运行在云端,需通过端口映射工具让云端脚本访问本地Cytoscape:

  • 使用端口映射工具将本地1234端口映射到公网,修改Colab中的base_url为映射后的地址:
p4c.cytoscape_version_info(base_url='https://<映射公网ID>.ngrok.io/v1')

注意:需保持映射工具在终端持续运行,会话过期后需重新生成地址。


内容的提问来源于stack exchange,提问作者dtek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 01:19:52