自從deepmind收購Mujoco后,之前在服務器上配置的Mujoco就出現問題了,加之因offlinerl需安裝d4rl,依賴mujoco,因此如果mujoco安裝失敗,后續的安裝難以開展。
經過多番嘗試,終於首先在本地ubuntu上安裝成功mujoco,為后續在服務器上安裝探索了路徑。
環境:ubuntu 18.04.5 LTS, Anaconda, python 3.8
前提:安裝anaconda
一、安裝mujoco
1.在Anaconda中創建虛擬環境 anaconda create -n d4rl python=3.8(這里使用python3.8,是因為網上說后續安裝gym需要3.8)
2.創建好后通過conda activate d4rl 切換到配置的環境下,注意通過 python --version 查看當前創建的python 環境版本是否是3.8,否則會報錯。可能需要關閉zsh,再重新打開,否則雖然切換到d4rl下了,但實際上可能只是base環境。這個問題可能是我的.zshrc文件中的某些設置引發的,暫時未找到原因。
3.雖然mujoco已經更新到mujoco210,但實踐中發現,其實mujoco200是匹配的版本。但deepmind的github官網上只有最新版本的mujoco,並沒有歷史版本的,因此需要在原來的Mujoco頁面(roboti.us/download.html)Download下下載 mujoco200 linux(不再需要mjkey文件,mujoco150之前的版本還需要)。
4.在本地機器 /home/zlf 路徑下創建隱藏文件夾 .mujoco
5.把下載好的mujoco200 linux 通過 cp ~/Download/mujoco200 linux ~/.mujoco 復制到創建的.mujoco文件夾下。
6.通過解壓指令解壓mujoco200 linux,並把解壓出的文件夾通過指令 mv mujoco200 linux mujoco200, 即把文件夾名稱修改為mujoco200
7.通過vim .zshrc 打開 .zshrc文件,並添加路徑名稱:
export MUJOCO_KEY_PATH=~/.mujoco${MUJOCO_KEY_PATH}
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/(用戶名)/.mujoco/mujoco200/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/nvidia
8.wq指令保存后,source ~/.zshrc 啟動修改
9.到這里Mujoco就配置好了,可以檢查一下:
cd ~/.mujoco/mujoco200/bin
./simulate ../model/humanoid.xml
這里可能simulate會報錯,上網查一下好像用chmod 777 simulate就可以解決。
當然顯卡驅動版本太低的話,只會出現一個黑框,沒有圖像。
我本人的機器確實只顯示了一個黑框:
黑框關閉后出現了一句:

至此,mujoco安裝完成。
(注意:如果是提示需要安裝mikey.txt,則下載mjkey.txt后cp 到mujoco200和mujoco200/bin,即可)
二、安裝mujoco_py
1. 在配置環境(python 3.8)下, pip install mujoco_py==2.0.2.10
2.安裝好后,python---import mujoco_py,出現報錯:
>>> import mujoco_py
Compiling /home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/mujoco_py/cymj.pyx because it depends on /home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/mujoco_py/pxd/mujoco.pxd.
[1/1] Cythonizing /home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/mujoco_py/cymj.pyx
running build_ext
building 'mujoco_py.cymj' extension
creating /home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/mujoco_py/generated/_pyxbld_2.0.2.10_38_linuxcpuextensionbuilder
creating /home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/mujoco_py/generated/_pyxbld_2.0.2.10_38_linuxcpuextensionbuilder/temp.linux-x86_64-3.8
creating /home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/mujoco_py/generated/_pyxbld_2.0.2.10_38_linuxcpuextensionbuilder/temp.linux-x86_64-3.8/home
creating /home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/mujoco_py/generated/_pyxbld_2.0.2.10_38_linuxcpuextensionbuilder/temp.linux-x86_64-3.8/home/zlf
creating /home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/mujoco_py/generated/_pyxbld_2.0.2.10_38_linuxcpuextensionbuilder/temp.linux-x86_64-3.8/home/zlf/anaconda3
creating /home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/mujoco_py/generated/_pyxbld_2.0.2.10_38_linuxcpuextensionbuilder/temp.linux-x86_64-3.8/home/zlf/anaconda3/envs
creating /home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/mujoco_py/generated/_pyxbld_2.0.2.10_38_linuxcpuextensionbuilder/temp.linux-x86_64-3.8/home/zlf/anaconda3/envs/d4rl
creating /home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/mujoco_py/generated/_pyxbld_2.0.2.10_38_linuxcpuextensionbuilder/temp.linux-x86_64-3.8/home/zlf/anaconda3/envs/d4rl/lib
creating /home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/mujoco_py/generated/_pyxbld_2.0.2.10_38_linuxcpuextensionbuilder/temp.linux-x86_64-3.8/home/zlf/anaconda3/envs/d4rl/lib/python3.8
creating /home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/mujoco_py/generated/_pyxbld_2.0.2.10_38_linuxcpuextensionbuilder/temp.linux-x86_64-3.8/home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages
creating /home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/mujoco_py/generated/_pyxbld_2.0.2.10_38_linuxcpuextensionbuilder/temp.linux-x86_64-3.8/home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/mujoco_py
creating /home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/mujoco_py/generated/_pyxbld_2.0.2.10_38_linuxcpuextensionbuilder/temp.linux-x86_64-3.8/home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/mujoco_py/gl
gcc -pthread -B /home/zlf/anaconda3/envs/d4rl/compiler_compat -Wl,--sysroot=/ -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC -I/home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/mujoco_py -I/home/zlf/.mujoco/mujoco200/include -I/home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/numpy/core/include -I/home/zlf/anaconda3/envs/d4rl/include/python3.8 -c /home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/mujoco_py/cymj.c -o /home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/mujoco_py/generated/_pyxbld_2.0.2.10_38_linuxcpuextensionbuilder/temp.linux-x86_64-3.8/home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/mujoco_py/cymj.o -fopenmp -w
gcc -pthread -B /home/zlf/anaconda3/envs/d4rl/compiler_compat -Wl,--sysroot=/ -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC -I/home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/mujoco_py -I/home/zlf/.mujoco/mujoco200/include -I/home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/numpy/core/include -I/home/zlf/anaconda3/envs/d4rl/include/python3.8 -c /home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/mujoco_py/gl/osmesashim.c -o /home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/mujoco_py/generated/_pyxbld_2.0.2.10_38_linuxcpuextensionbuilder/temp.linux-x86_64-3.8/home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/mujoco_py/gl/osmesashim.o -fopenmp -w
creating /home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/mujoco_py/generated/_pyxbld_2.0.2.10_38_linuxcpuextensionbuilder/lib.linux-x86_64-3.8
creating /home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/mujoco_py/generated/_pyxbld_2.0.2.10_38_linuxcpuextensionbuilder/lib.linux-x86_64-3.8/mujoco_py
gcc -pthread -shared -B /home/zlf/anaconda3/envs/d4rl/compiler_compat -L/home/zlf/anaconda3/envs/d4rl/lib -Wl,-rpath=/home/zlf/anaconda3/envs/d4rl/lib -Wl,--no-as-needed -Wl,--sysroot=/ /home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/mujoco_py/generated/_pyxbld_2.0.2.10_38_linuxcpuextensionbuilder/temp.linux-x86_64-3.8/home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/mujoco_py/cymj.o /home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/mujoco_py/generated/_pyxbld_2.0.2.10_38_linuxcpuextensionbuilder/temp.linux-x86_64-3.8/home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/mujoco_py/gl/osmesashim.o -L/home/zlf/.mujoco/mujoco200/bin -Wl,-R/home/zlf/.mujoco/mujoco200/bin -lmujoco200 -lglewosmesa -lOSMesa -lGL -o /home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/mujoco_py/generated/_pyxbld_2.0.2.10_38_linuxcpuextensionbuilder/lib.linux-x86_64-3.8/mujoco_py/cymj.cpython-38-x86_64-linux-gnu.so -fopenmp
/home/zlf/anaconda3/envs/d4rl/compiler_compat/ld: cannot find -lGL
collect2: error: ld returned 1 exit status
Traceback (most recent call last):
File "/home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/setuptools/_distutils/unixccompiler.py", line 249, in link
self.spawn(linker + ld_args)
File "/home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/setuptools/_distutils/ccompiler.py", line 917, in spawn
spawn(cmd, dry_run=self.dry_run, **kwargs)
File "/home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/setuptools/_distutils/spawn.py", line 68, in spawn
raise DistutilsExecError(
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 "<stdin>", line 1, in <module>
File "/home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/mujoco_py/__init__.py", line 3, in <module>
from mujoco_py.builder import cymj, ignore_mujoco_warnings, functions, MujocoException
File "/home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/mujoco_py/builder.py", line 510, in <module>
cymj = load_cython_ext(mujoco_path)
File "/home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/mujoco_py/builder.py", line 105, in load_cython_ext
cext_so_path = builder.build()
File "/home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/mujoco_py/builder.py", line 221, in build
built_so_file_path = self._build_impl()
File "/home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/mujoco_py/builder.py", line 273, in _build_impl
so_file_path = super()._build_impl()
File "/home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/mujoco_py/builder.py", line 244, in _build_impl
dist.run_commands()
File "/home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/setuptools/_distutils/dist.py", line 967, in run_commands
self.run_command(cmd)
File "/home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/setuptools/dist.py", line 1214, in run_command
super().run_command(command)
File "/home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/setuptools/_distutils/dist.py", line 986, in run_command
cmd_obj.run()
File "/home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/Cython/Distutils/old_build_ext.py", line 186, in run
_build_ext.build_ext.run(self)
File "/home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/setuptools/_distutils/command/build_ext.py", line 339, in run
self.build_extensions()
File "/home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/mujoco_py/builder.py", line 144, in build_extensions
build_ext.build_extensions(self)
File "/home/zlf/anaconda3/envs/d4rl/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/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/setuptools/_distutils/command/build_ext.py", line 448, in build_extensions
self._build_extensions_serial()
File "/home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/setuptools/_distutils/command/build_ext.py", line 473, in _build_extensions_serial
self.build_extension(ext)
File "/home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/setuptools/_distutils/command/build_ext.py", line 550, in build_extension
self.compiler.link_shared_object(
File "/home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/setuptools/_distutils/ccompiler.py", line 713, in link_shared_object
self.link(CCompiler.SHARED_OBJECT, objects,
File "/home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/setuptools/_distutils/unixccompiler.py", line 251, in link
raise LinkError(msg)
distutils.errors.LinkError: command '/usr/bin/gcc' failed with exit code 1
3. 這是因為缺少包,安裝:sudo apt-get install libgl1-mesa-dev ,即可。
4. 再輸入 python ---- import mujoco_py,出現如下:
>>> import mujoco_py
running build_ext
building 'mujoco_py.cymj' extension
gcc -pthread -B /home/zlf/anaconda3/envs/d4rl/compiler_compat -Wl,--sysroot=/ -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC -I/home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/mujoco_py -I/home/zlf/.mujoco/mujoco200/include -I/home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/numpy/core/include -I/home/zlf/anaconda3/envs/d4rl/include/python3.8 -c /home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/mujoco_py/cymj.c -o /home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/mujoco_py/generated/_pyxbld_2.0.2.10_38_linuxcpuextensionbuilder/temp.linux-x86_64-3.8/home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/mujoco_py/cymj.o -fopenmp -w
gcc -pthread -B /home/zlf/anaconda3/envs/d4rl/compiler_compat -Wl,--sysroot=/ -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC -I/home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/mujoco_py -I/home/zlf/.mujoco/mujoco200/include -I/home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/numpy/core/include -I/home/zlf/anaconda3/envs/d4rl/include/python3.8 -c /home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/mujoco_py/gl/osmesashim.c -o /home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/mujoco_py/generated/_pyxbld_2.0.2.10_38_linuxcpuextensionbuilder/temp.linux-x86_64-3.8/home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/mujoco_py/gl/osmesashim.o -fopenmp -w
gcc -pthread -shared -B /home/zlf/anaconda3/envs/d4rl/compiler_compat -L/home/zlf/anaconda3/envs/d4rl/lib -Wl,-rpath=/home/zlf/anaconda3/envs/d4rl/lib -Wl,--no-as-needed -Wl,--sysroot=/ /home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/mujoco_py/generated/_pyxbld_2.0.2.10_38_linuxcpuextensionbuilder/temp.linux-x86_64-3.8/home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/mujoco_py/cymj.o /home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/mujoco_py/generated/_pyxbld_2.0.2.10_38_linuxcpuextensionbuilder/temp.linux-x86_64-3.8/home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/mujoco_py/gl/osmesashim.o -L/home/zlf/.mujoco/mujoco200/bin -Wl,-R/home/zlf/.mujoco/mujoco200/bin -lmujoco200 -lglewosmesa -lOSMesa -lGL -o /home/zlf/anaconda3/envs/d4rl/lib/python3.8/site-packages/mujoco_py/generated/_pyxbld_2.0.2.10_38_linuxcpuextensionbuilder/lib.linux-x86_64-3.8/mujoco_py/cymj.cpython-38-x86_64-linux-gnu.so -fopenmp
即證明mujoco_py 安裝成功
5.安裝好mujoco_py之后可以用python檢查一下:(直接在命令行輸入python,然后輸入以下代碼):
import mujoco_py # 這里第一次import mujoco_py可能要等待一下,會有一些顯示,等完成之后再import一次
import os
mj_path, _ = mujoco_py.utils.discover_mujoco() # 這里好像修改了?改成mj_path = mujoco_py.utils.discover_mujoco()
xml_path = os.path.join(mj_path, 'model', 'humanoid.xml')
model = mujoco_py.load_model_from_path(xml_path)
sim = mujoco_py.MjSim(model)
print(sim.data.qpos)
# [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
sim.step()
print(sim.data.qpos)
# [-2.09531783e-19 2.72130735e-05 6.14480786e-22 -3.45474715e-06
# 7.42993721e-06 -1.40711141e-04 -3.04253586e-04 -2.07559344e-04
# 8.50646247e-05 -3.45474715e-06 7.42993721e-06 -1.40711141e-04
# -3.04253586e-04 -2.07559344e-04 -8.50646247e-05 1.11317030e-04
# -7.03465386e-05 -2.22862221e-05 -1.11317030e-04 7.03465386e-05
# -2.22862221e-05]
沒問題,即mujoco_py安裝完畢。
參考文獻:
1. 安裝Mujoco、Mujoco_py、D4RL、gym、d3rlpy以及Pycharm遠程連接服務器問題 (https://zhuanlan.zhihu.com/p/434073300)
2. 安裝mujoco_py出現:anaconda3/compiler_compat/ld: cannot find -lGL (https://blog.csdn.net/jiangjiang_jian/article/details/100986205)
3. Anaconda-用conda創建python虛擬環境 (zhuanlan.zhihu.com/p/94744929)
4. Import error. Trying to rebuild mujoco_py. running build_ext building 'mujoco_py.cymj' extension distutils.errors.CompileError: command '/usr/local/bin/gcc-9' failed with exit status 1 #539 (https://github.com/openai/mujoco-py/issues/539)