不同版本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