Ubuntu安装mujoco报错问题以及解决方案

不同版本mujoco版本对应的mujoco-py版本

  • Mujoco150对应的Mujoco-py版本
pip install mujoco-py==1.50.1.68
  • Mujoco200对应的Mujoco-py版本
pip install mujoco-py==2.0.2.8
  • Mujoco210对应的Mujoco-py版本
pip install mujoco-py==2.1.2.14

第一个问题

(py38) (base) smi@smi-MS-7D90:~$ /home/smi/anaconda3/envs/py38/bin/python /home/smi/Code_SS/surrogate_L_hopper/rbf_keras/test.py
Compiling /home/smi/anaconda3/envs/py38/lib/python3.8/site-packages/mujoco_py/cymj.pyx because it changed.
[1/1] Cythonizing /home/smi/anaconda3/envs/py38/lib/python3.8/site-packages/mujoco_py/cymj.pyx
performance hint: anaconda3/envs/py38/lib/python3.8/site-packages/mujoco_py/cymj.pyx:67:5: Exception check on 'c_warning_callback' will always require the GIL to be acquired.
Possible solutions:
1. Declare 'c_warning_callback' as 'noexcept' if you control the definition and you're sure you don't want the function to raise exceptions.
2. Use an 'int' return type on 'c_warning_callback' to allow an error code to be returned.
performance hint: anaconda3/envs/py38/lib/python3.8/site-packages/mujoco_py/cymj.pyx:104:5: Exception check on 'c_error_callback' will always require the GIL to be acquired.
Possible solutions:
1. Declare 'c_error_callback' as 'noexcept' if you control the definition and you're sure you don't want the function to raise exceptions.
2. Use an 'int' return type on 'c_error_callback' to allow an error code to be returned.

Error compiling Cython file:
------------------------------------------------------------
...
See c_warning_callback, which is the C wrapper to the user defined function
'''
global py_warning_callback
global mju_user_warning
py_warning_callback = warn
mju_user_warning = c_warning_callback
^
------------------------------------------------------------

anaconda3/envs/py38/lib/python3.8/site-packages/mujoco_py/cymj.pyx:92:23: Cannot assign type 'void (const char *) except * nogil' to 'void (*)(const char *) noexcept nogil'. Exception values are incompatible. Suggest adding 'noexcept' to the type of 'c_warning_callback'.

Error compiling Cython file:
------------------------------------------------------------
...
See c_warning_callback, which is the C wrapper to the user defined function
'''
global py_error_callback
global mju_user_error
py_error_callback = err_callback
mju_user_error = c_error_callback
^
------------------------------------------------------------

anaconda3/envs/py38/lib/python3.8/site-packages/mujoco_py/cymj.pyx:127:21: Cannot assign type 'void (const char *) except * nogil' to 'void (*)(const char *) noexcept nogil'. Exception values are incompatible. Suggest adding 'noexcept' to the type of 'c_error_callback'.
Traceback (most recent call last):
File "/home/smi/Code_SS/surrogate_L_hopper/rbf_keras/test.py", line 1, in <module>
import mujoco_py
File "/home/smi/anaconda3/envs/py38/lib/python3.8/site-packages/mujoco_py/__init__.py", line 2, in <module>
from mujoco_py.builder import cymj, ignore_mujoco_warnings, functions, MujocoException
File "/home/smi/anaconda3/envs/py38/lib/python3.8/site-packages/mujoco_py/builder.py", line 504, in <module>
cymj = load_cython_ext(mujoco_path)
File "/home/smi/anaconda3/envs/py38/lib/python3.8/site-packages/mujoco_py/builder.py", line 110, in load_cython_ext
cext_so_path = builder.build()
File "/home/smi/anaconda3/envs/py38/lib/python3.8/site-packages/mujoco_py/builder.py", line 226, in build
built_so_file_path = self._build_impl()
File "/home/smi/anaconda3/envs/py38/lib/python3.8/site-packages/mujoco_py/builder.py", line 296, in _build_impl
so_file_path = super()._build_impl()
File "/home/smi/anaconda3/envs/py38/lib/python3.8/site-packages/mujoco_py/builder.py", line 239, in _build_impl
dist.ext_modules = cythonize([self.extension])
File "/home/smi/anaconda3/envs/py38/lib/python3.8/site-packages/Cython/Build/Dependencies.py", line 1154, in cythonize
cythonize_one(*args)
File "/home/smi/anaconda3/envs/py38/lib/python3.8/site-packages/Cython/Build/Dependencies.py", line 1321, in cythonize_one
raise CompileError(None, pyx_file)
Cython.Compiler.Errors.CompileError: /home/smi/anaconda3/envs/py38/lib/python3.8/site-packages/mujoco_py/cymj.pyx

这个问题的原因是Cython与mujoco-py的版本不匹配,解决方法是安装与mujoco-py版本匹配的Cython版本,具体方法如下:

多尝试一个Cython版本

pip uninstall Cython
pip install Cython==0.29.14

如果还是报错

distutils.errors.CompileError: command '/usr/bin/gcc' failed with exit code 1

可能是Gcc版本不匹配,可以尝试安装gcc-7或者gcc-9(根据系统版本)

sudo update-alternatives --config gcc

第二个问题

(py38) (base) smi@smi-MS-7D90:~$ /home/smi/anaconda3/envs/py38/bin/python /home/smi/Code_SS/surrogate_L_hopper/rbf_keras/test.py
Compiling /home/smi/anaconda3/envs/py38/lib/python3.8/site-packages/mujoco_py/cymj.pyx because it changed.
[1/1] Cythonizing /home/smi/anaconda3/envs/py38/lib/python3.8/site-packages/mujoco_py/cymj.pyx
/home/smi/anaconda3/envs/py38/lib/python3.8/site-packages/mujoco_py/gl/eglshim.c:4:10: fatal error: GL/glew.h: 没有那个文件或目录
4 | #include <GL/glew.h>
|          ^~~~~~~~~~~
compilation terminated.
Traceback (most recent call last):
File "/home/smi/anaconda3/envs/py38/lib/python3.8/site-packages/setuptools/_distutils/unixccompiler.py", line 188, in _compile
self.spawn(compiler_so + cc_args + [src, '-o', obj] + extra_postargs)
File "/home/smi/anaconda3/envs/py38/lib/python3.8/site-packages/setuptools/_distutils/ccompiler.py", line 1041, in spawn
spawn(cmd, dry_run=self.dry_run, **kwargs)
File "/home/smi/anaconda3/envs/py38/lib/python3.8/site-packages/setuptools/_distutils/spawn.py", line 68, in spawn
raise DistutilsExecError(f"command {cmd!r} failed with exit code {exitcode}")
distutils.errors.DistutilsExecError: command '/usr/bin/gcc' failed with exit code 1
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/smi/Code_SS/surrogate_L_hopper/rbf_keras/test.py", line 1, in <module>
import mujoco_py
File "/home/smi/anaconda3/envs/py38/lib/python3.8/site-packages/mujoco_py/__init__.py", line 2, in <module>
from mujoco_py.builder import cymj, ignore_mujoco_warnings, functions, MujocoException
File "/home/smi/anaconda3/envs/py38/lib/python3.8/site-packages/mujoco_py/builder.py", line 504, in <module>
cymj = load_cython_ext(mujoco_path)
File "/home/smi/anaconda3/envs/py38/lib/python3.8/site-packages/mujoco_py/builder.py", line 110, in load_cython_ext
cext_so_path = builder.build()
File "/home/smi/anaconda3/envs/py38/lib/python3.8/site-packages/mujoco_py/builder.py", line 226, in build
built_so_file_path = self._build_impl()
File "/home/smi/anaconda3/envs/py38/lib/python3.8/site-packages/mujoco_py/builder.py", line 296, in _build_impl
so_file_path = super()._build_impl()
File "/home/smi/anaconda3/envs/py38/lib/python3.8/site-packages/mujoco_py/builder.py", line 249, in _build_impl
dist.run_commands()
File "/home/smi/anaconda3/envs/py38/lib/python3.8/site-packages/setuptools/_distutils/dist.py", line 969, in run_commands
self.run_command(cmd)
File "/home/smi/anaconda3/envs/py38/lib/python3.8/site-packages/setuptools/dist.py", line 967, in run_command
super().run_command(command)
File "/home/smi/anaconda3/envs/py38/lib/python3.8/site-packages/setuptools/_distutils/dist.py", line 988, in run_command
cmd_obj.run()
File "/home/smi/anaconda3/envs/py38/lib/python3.8/site-packages/Cython/Distutils/old_build_ext.py", line 186, in run
_build_ext.build_ext.run(self)
File "/home/smi/anaconda3/envs/py38/lib/python3.8/site-packages/setuptools/_distutils/command/build_ext.py", line 359, in run
self.build_extensions()
File "/home/smi/anaconda3/envs/py38/lib/python3.8/site-packages/mujoco_py/builder.py", line 149, in build_extensions
build_ext.build_extensions(self)
File "/home/smi/anaconda3/envs/py38/lib/python3.8/site-packages/Cython/Distutils/old_build_ext.py", line 195, in build_extensions
_build_ext.build_ext.build_extensions(self)
File "/home/smi/anaconda3/envs/py38/lib/python3.8/site-packages/setuptools/_distutils/command/build_ext.py", line 479, in build_extensions
self._build_extensions_serial()
File "/home/smi/anaconda3/envs/py38/lib/python3.8/site-packages/setuptools/_distutils/command/build_ext.py", line 505, in _build_extensions_serial
self.build_extension(ext)
File "/home/smi/anaconda3/envs/py38/lib/python3.8/site-packages/setuptools/_distutils/command/build_ext.py", line 560, in build_extension
objects = self.compiler.compile(
File "/home/smi/anaconda3/envs/py38/lib/python3.8/site-packages/setuptools/_distutils/ccompiler.py", line 600, in compile
self._compile(obj, src, ext, cc_args, extra_postargs, pp_opts)
File "/home/smi/anaconda3/envs/py38/lib/python3.8/site-packages/setuptools/_distutils/unixccompiler.py", line 190, in _compile
raise CompileError(msg)
distutils.errors.CompileError: command '/usr/bin/gcc' failed with exit code 1

这个问题一般是mujoco-py 在编译时找不到 GL/glew.h 文件,解决方法是安装glew

  • 确保系统中安装了 libglew-dev 和其他必要的依赖项:
sudo apt-get update
sudo apt-get install build-essential libosmesa6-dev libglew-dev patchelf
  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值