使用Python调用GymEnv库时出现Cython编译错误求助
解决mujoco_py编译错误(c_warning_callback/c_error_callback 类型不兼容)
1. 优先匹配兼容版本
mujoco_py和高版本GCC/C++编译器不兼容是核心问题,直接锁定修复过该问题的版本最省心:
- 针对GCC 10+版本,用
mujoco_py==2.1.2.14 - 执行卸载重装命令:
pip uninstall -y mujoco_py pip install mujoco_py==2.1.2.14 --no-cache-dir
2. 手动修改cymj.pyx的正确姿势(迫不得已时用)
别乱改代码,按以下步骤来:
- 找到mujoco_py安装路径下的
cymj.pyx(一般在Lib\site-packages\mujoco_py\cymj.pyx) - 定位到
c_warning_callback和c_error_callback函数,在声明末尾加上noexcept nogil:
原代码示例:
修改后:cdef void c_warning_callback(const char* msg): warnings.warn(msg.decode('utf-8'))
同样修改cdef void c_warning_callback(const char* msg) noexcept nogil: warnings.warn(msg.decode('utf-8'))c_error_callback函数 - 修改完重新编译:
cd <你的mujoco_py安装目录> python setup.py build_ext --inplace
3. 临时适配高版本编译器
不想改版本的话,临时设置编译参数跳过报错:
- Linux/macOS:
export CFLAGS="-Wno-error=deprecated-declarations -Wno-error=implicit-function-declaration" export CXXFLAGS="-Wno-error=deprecated-declarations -Wno-error=implicit-function-declaration" - Windows(PowerShell):
设置完直接重新运行你的PyTorchRL代码$env:CFLAGS="-Wno-error=deprecated-declarations -Wno-error=implicit-function-declaration" $env:CXXFLAGS="-Wno-error=deprecated-declarations -Wno-error=implicit-function-declaration"
4. 长期方案:换用官方MuJoCo库
mujoco_py已经停更,官方mujoco库更稳定,配合gymnasium(OpenAI Gym替代)迁移:
- 安装依赖:
pip install mujoco gymnasium - 替换代码中的环境初始化:
from gymnasium.envs.mujoco import InvertedDoublePendulumEnv base_env = InvertedDoublePendulumEnv(render_mode=None) # 需要适配PyTorchRL接口的话,封装成GymEnv兼容格式即可
内容的提问来源于stack exchange,提问作者Harrisino
相关产品推荐
相关产品推荐

