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

mujoco-py修改xml后Hopper-v4仍加载原模型的路径问题排查

核心原因

Hopper-v4是Gym(现Gymnasium)内置的MuJoCo环境,它的默认模型资源是打包在Python环境的gym安装包内部的,不会读取你项目目录下自行放置/修改的同名hopper.xml文件。哪怕你删掉项目里的xml,只要gym包本身的资源没动,加载的就永远是内置的原版模型。
部分场景下mujoco-py会生成预编译的模型二进制缓存,就算你改了对应路径的xml,缓存没清的话也会直接加载旧模型,不会重新读xml。

定位实际加载的模型路径

执行以下代码可以直接打印当前环境真实读取的xml文件位置:

import gymnasium as gym
env = gym.make("Hopper-v4")
print(env.unwrapped.model_path)

正常输出路径会在你当前Python环境的site-packages/gymnasium/envs/mujoco/assets/目录下,和你自己项目文件夹里的文件没有关联。
mujoco-py的默认缓存路径在当前用户目录的.mujoco/文件夹下,预编译的模型缓存会存放在该目录的子文件夹中,触发时会跳过xml解析步骤直接加载旧模型。

自定义模型的正确实现方式

不要直接替换内置环境的默认文件,用以下两种方式加载自定义xml即可:

  • 直接初始化时传参覆盖默认xml路径,不需要额外注册:
env = gym.make(
    "Hopper-v4",
    xml_file="your/custom/hopper.xml的绝对路径"
)
  • 注册独立的自定义环境id,避免和内置环境冲突:
import gymnasium as gym
from gymnasium.envs.mujoco.hopper_v4 import HopperEnv

gym.register(
    id="CustomHopper-v0",
    entry_point=HopperEnv,
    kwargs={"xml_file": "your/custom/hopper.xml的绝对路径"}
)
env = gym.make("CustomHopper-v0")

缓存清理方法:如果修改对应位置的xml后依然加载旧模型,直接删除用户目录下.mujoco/pyxb/、.mujoco/mjpc/两个子文件夹内的所有文件,重启Python进程后就会重新解析xml生成新模型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 11:18:15