体质原因,我安装系统、软件、跑代码一般都会出各种错误,涉足各式各样稀奇古怪的坑(除了对的那个)。查找过很多资料,解决了一些,没解决一些,做个记录以免之后再次遇到,也为各位遇到相似麻烦的小伙伴提供一些解决方案和建议。有什么问题欢迎交流!
因为ubuntu系统崩溃重装的原因,我一共装了四次mujoco_py,最终成功存活了两次(第一次和最后一次)。建议先浏览一下全文再动手处理你的报错问题。如果还有什么更稀奇古怪的关于mujoco-py的问题,不仅限于安装问题,还有使用问题巴拉巴拉,推荐两个地方,一个是Stack Overflow,另一个就是mujoco-py的讨论交流区
先说一下我的整体环境(一定要创建一个虚拟环境,然后装mujoco_py,我是用conda创建的环境)
Ubuntu20.04 LTS
gcc 7.5.0
(很重要!!!;gcc 9也有办法,下面有说)
conda创建的虚拟环境,python3.7(其他版本的python3没太试过,应该也行)
mujoco_200
mujoco_py 2.0
再说一下怎么解决安装mujoco_py中的报错,因为这里报错都是一长串的字符代码,真的让人头大,要冷静,要有耐心。然后去看哪里出了问题,从上往下看,因为可能会报好几个错误,都是由不同错误引起,但最后一行显示的错误却都相同command ‘gcc‘ failed with exit status 1
,即gcc错误,要警惕,要对症下药。
安装mujoco_py过程中最棘手的就是gcc错误了,有各种变体,所以最好提前就准备好gcc编译器的安装处理。
最好是安装gcc 7,在7版本gcc下我出的错最好解决,gcc 9版本太高(但应该是可以的,我在gcc 9 下装成功了一次,但是后面ubuntu系统又崩了,又重装了。。),mujoco_py有点适应不过来(毕竟好几年没更新了。。。),具体安装和切换gcc不同版本可以参考这个gcc安装教程,写得很棒。
我们应该差不多,
$ cd mujoco-py
$ pip3 install -r requirements.txt
$ pip3 install -r requirements.dev.txt
$ python3 setup.py install
到这里一切风平浪静,然后开始测试是否安装成功,
$ python3
$ import mujoco_py
等待一会,正式开始进入报错环节(嗒当!)
提前说一下,下面有的错误是我之前几次装的时候遇到的,但没有截图记录,所以可能有点记忆模糊,见谅。
再强调一下,看报错说明,从上到下,对症下药。
command ‘gcc‘ failed with exit status 1
这个问题是我之前装mujoco_py时遇到的,刚装了系统,没有装gcc编译器,因此报错,具体描述没有记录下来,大概意思就是这个(白字报错)。查看是否安装了gcc,以及安装的版本,
$ gcc --version
没有安装的话,安装系统默认版本的gcc,
$ sudo apt-get install gcc
ubuntu20.04应该会下载gcc 9,能用……
继续测试是否安装成功,失败,报错
fatal error:limits.h:没有那个文件或目录
,引起command ‘gcc‘ failed with exit status 1
fatal error: limits.h: 没有那个文件或目录
这个有点麻烦的 ,我当时尝试了两个操作解决了,我觉得第二步更重要,可以试一下直接进行第二步。
第一步,更新一下python版本到3.8,然后重新安装一下mujoco_py,
$ python3 setup.py install
第二步,
$ sudo apt-get install python3-devel
可能会报错,无法安装依赖,下列软件包有未满足的依赖关系
,可以参考本文下面第三点里的措施。
(个人感觉是因为gcc 9与python3.7,mujoco_py 2.0这三者的环境依赖要求冲突造成,没有太多实际根据,我也是linux小白)
再次测试是否安装成功,答:没有,继续报错
缺少GL/osmesa.h文件
,由此引起command ‘gcc‘ failed with exit status 1
fatal error: GL/osmesa.h: 没有那个文件或目录
这个可以按照mujoco-py官网给出的解决方法处理。
我这里只安装了libosmesa6-dev
便可以了
$ sudo apt install libosmesa6-dev
可能会报错下列软件包有未满足的依赖关系
,无法直接安装。这是因为你所要安装的包的依赖项版本要求比较严格,通常是低于你的系统(或环境)已经安装了的相同依赖项的版本,需要手动换成低版本的依赖包,根据报错提示所需的依赖项版本,直接
$ sudo apt install xxx(依赖项名称)=xxx(所需版本) # 注意等号=前后没有空格
而且友善的提醒,你可能需要安装好多相关后续的低版本依赖项,不哭。大概溯源式安装四五个依赖包个就差不多了。
网上还有另外一种方法,就是利用aptitude
来解决上述版本不匹配引起的无法安装的问题,如
$ sudo aptitude install libosmesa6-dev
如果你没有安装过aptitude
则用以下指令安装
$ sudo apt install aptitude
aptitude
这个安装指令会自动降级安装替换依赖项,以兼容不同的依赖环境,但我试了没有解决fatal error: GL/osmesa.h: 没有那个文件或目录
这个问题,你们有兴趣可以试一下,成功了的话教教我咋回事。
再次测试,再次报错
FileNotFoundError: [Errno 2] No such file or directory: 'patchelf': 'patchelf'
正常的话,import mujoco_py
不会报上面gcc错误了……而是,报另一个错误
FileNotFoundError: [Errno 2] No such file or directory: ‘patchelf’: ‘patchelf’
$ sudo apt-get update -y
$ sudo apt-get install -y patchelf
ERROR: GLEW initalization error: Missing GL version'
& Missing path to your environment variable.
运行使用mujoco_py的代码时,如果有调用可视化窗口env.render()
,可能会有如下报错
Creating window glfw
ERROR: GLEW initalization error: Missing GL version
根据其他大神的解决方法,这是因为程序运行的时候和显卡没有动态链接,不影响代码运行,只是无法可视化。
解决方法为:
先安装package
$ sudo apt-get install libglew-dev
(可能会出现依赖项无法安装等等,同上依次手动安装)
然后在~/.bashrc
文件中添加如下路径
export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libGLEW.so
然后在终端
$ source ~/.bashrc
如此,便可以在终端运行相关程序代码。
但是如果在pycharm中,可能还是会报错,它不会识别调用该路径,包括安装的mujoco_200的路径也无法识别调用,会报错
Missing path to your environment variable.
Current values LD_LIBRARY_PATH=
Please add following line to .bashrc:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/dreamer/.mujoco/mujoco200/bin
需要手动添加路径,在pycharm中,
Run ——> Edit Configurations ——> Environment variables
然后,添加路径:
Name: LD_LIBRARY_PATH
Value: $LD_LIBRARY_PATH:/home/(用户名)/.mujoco/mujoco200/bin
Name: LD_PRELOAD
Value: /usr/lib/x86_64-linux-gnu/libGLEW.so
此报错解决方案参考:
【1】深度强化学习系列(2): ERROR: GLEW initalization error: Missing GL version
【2】Mujoco&Mujoco-py安装教程
done