#3579·mujoco

Studio 原生查看器在 macOS 上无法启动: NSWindow 在主线程之外创建

作者: larrygao001创建于 2026年9月14日更新于 2026年9月17日
标签bug
  •      介绍

顿!

我用MujoCo来进行无头物理模拟和外屏渲染, 这让我进入实验/研究。

我的设置

  • MujoCo 3.13.0,安装在PyPI轮上
  • API:PythonH(英语:
  • 建筑:arm64(Apple M2 Pro)
  • OS: macOS 26.6.2
  • Python 3.11.5号机车

这是怎么回事? 你想怎样?

发射-被动'和发射-本土'在工人线上创建取景窗口。 macOS 需要在进程主线上创建“ NSWindow ” , 例如 macOS 窗口从不创建,查看器也不运行。

是什么使得这很难处理 而不是仅仅打破:

  1. ** 没有提出例外。 ** 错误通过本地代码打印为 stderr,以及 `发射-被动 ' 通常返回。
  2. 失败后立即返回 ' handle.is running() ',所以 电话民意调查被误导
  3. 然后,在第一个`andle.sync () ' 期间,程序以退出状态1而终止。 循环。脚本结尾处的“打印(“正常完成的”)”从未运行。

观察输出 :

启动  被动返回, 是  运行: true
错误: 创建窗口出错 : NSWindow 只应在主线程上被即时执行 !

退出状态 1.

我期待一个工作浏览器窗口, 或者一个提高的例外识别 平台限制,以便呼叫者可以退后。

因为...

启动-原生 ' 代表参加启动-线',将观众放在工人身上 线程并留下主线程上的 sim :

2zz
# Python/mujoco/实验/studio/发射 thread.py.
def 启动 thread(目标 fn, *, sim plugins=无):
查看器   端点, sim  endpoint = make thread endpoints ()
线程=线程. 线索( 目标=目标  fn, args= (viewer endpoint,), 守护进程= True)
线程. start ()

`目标-fn'是观众。 X11和Windows上的安排很好,不能 在 macOS 上的工作,其中 AppKit 只为主线程上创建的 UI 对象服务. 经典取景器解决了"mjpython"发射装置的同样问题,而"mjpython"发射装置的"Mjpython"则解决了同样的问题. 在主线上保持Cocoa运行回路; Studio没有对应的.

建议改正

两种选择,在`发射-原生'内:

  1. 向呼叫者提供与线条相并列的阻断主线发射器 不需要控制主线。 这对每个 平台,所以它不需要是macOS的特异性。
  2. 在 " 发射-被动 " / " 发射-内在 " 中检测出macOS并倒置线程。 这个 更改合同,因为呼叫 变得阻断,所以引起一个明显的错误 与改变行为相比,在阻断发射器的点数可能更好 寂然无相.

无论是哪种情况,只要提高目前的路径,而不是打印和退出,就会使 一个呼叫者检测到情况。

备选方案1在下面的最后一个编码区块中得到了实施。 我很高兴 打开您喜欢的形状的 PR 。

  • 复制步骤
  1. 在macOS上安装 " pip sirm mujoco =3.13.0 " 。
  2. 节省`最小.xml' . . . . . . .

内容来源: google-deepmind/mujoco