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
窗口从不创建,查看器也不运行。
是什么使得这很难处理 而不是仅仅打破:
- ** 没有提出例外。 ** 错误通过本地代码打印为 stderr,以及 `发射-被动 ' 通常返回。
- 失败后立即返回 ' handle.is running() ',所以 电话民意调查被误导
- 然后,在第一个`andle.sync () ' 期间,程序以退出状态1而终止。 循环。脚本结尾处的“打印(“正常完成的”)”从未运行。
观察输出 :
启动 被动返回, 是 运行: true
错误: 创建窗口出错 : NSWindow 只应在主线程上被即时执行 !退出状态 1.
我期待一个工作浏览器窗口, 或者一个提高的例外识别 平台限制,以便呼叫者可以退后。
因为...
启动-原生 ' 代表参加启动-线',将观众放在工人身上
线程并留下主线程上的 sim :
# 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没有对应的.
建议改正
两种选择,在`发射-原生'内:
- 向呼叫者提供与线条相并列的阻断主线发射器 不需要控制主线。 这对每个 平台,所以它不需要是macOS的特异性。
- 在 " 发射-被动 " / " 发射-内在 " 中检测出macOS并倒置线程。 这个 更改合同,因为呼叫 变得阻断,所以引起一个明显的错误 与改变行为相比,在阻断发射器的点数可能更好 寂然无相.
无论是哪种情况,只要提高目前的路径,而不是打印和退出,就会使 一个呼叫者检测到情况。
备选方案1在下面的最后一个编码区块中得到了实施。 我很高兴 打开您喜欢的形状的 PR 。
- 复制步骤
- 在macOS上安装 " pip sirm mujoco =3.13.0 " 。
- 节省`最小.xml' . . . . . . .
内容来源: google-deepmind/mujoco