少女祈祷中...

配置Gym环境的血泪史.

[!attention]
先说结论: 如果你想要学习强化学习, 并因此想要配备 gym环境, 那么只用看文章的前面很小一部分就可以了. 后面的绝大部分内容都只是一个走错路的人无用而绝望的记录而已.

gymnasium 的官方文档, 简要记录了其拥有的各种环境, 同时介绍了安装的方法.
https://github.com/Farama-Foundation/Gymnasium

用于指导的官方文档
https://gymnasium.farama.org/environments/mujoco/

此处采用的系统是 Ubuntu22.04 .

对于gymnasium本体的安装, 只需要运行命令

1
pip install gymnasium

就可以了. 这是一种轻量化的方式, 如果你只是想要尝试gym里的一些简单环境, 那么这样就够了.

但是倘若你想要尝试更多复杂的内容, 那么就运行

1
2
pip install swig
pip install "gymnasium[all]

ok. 这就足够了. 不需要环境变量, 不需要别的命令行, 不需要各种文档, 教程和报错. 就这两行就够了!!!

很多教程中, 我们会需要进入 mujoco官网下载mujoco本体, 再下载一个mujoco_py文件, 之后进入文件夹运行 python setup.py install, 然后解决一大堆一大堆的报错… 现在不需要了!!! 时间流逝版本更新, 现在我们用的是全新的 gymnasium 和 mujoco python !!! 不是gym, 不是mujoco, 也不是 mujoco_py. (那些旧的环境依然在使用mujoco_py. 但是它们往往有着相同功能的, 且不依赖mujoco_py的, 基于mujoco python 的新版本. )

我不知道在windows系统上是否还是这样, 我也不知道有没有那些配置是我在之前就折腾好的, 我只知道, 我在一个新环境中运行上面两行命令, 等待了一会, 一个崭新的RL实验环境就配好了.

如果大家遇到了别的报错或者什么问题, 并且开始在网络上寻找答案, 一定一定记得: 1. 找官方文档优先!!! 2. 找近期的消息优先!!! 在这个环境的配置上, 消息的时效性太重要了!!


[!missing]
从这里开始都是安装 mujoco_py 的过程. 对于真正配备gym环境没有指导价值.

参考资料

https://gymnasium.farama.org/introduction/basic_usage/

https://blog.csdn.net/zjh2883/article/details/136037838

[!caution]
使用pip而不是conda安装. 只有这样才能下载gym[all]中的所有依赖, 正常运行其中的环境

[!caution]
下载gym[box2d]时, 会报错提示 swig异常. 此时安装swig即可.

运行CartPoleJax-v0时, 提示
No module named 'jax'

运行
Reacher-v2

提示gymnasium.error.DependencyNotInstalled: No module named 'mujoco_py'.


下载mujoco

按照教程![https://github.com/openai/mujoco-py?tab=readme-ov-file]

https://blog.csdn.net/weixin_42571906/article/details/131855836

的前半段. 做到 python setup.py install后停止.

setup完毕

尝试运行.

报错

1
Mujoco-py is incompatible with cython 3 (Cannot assign type 'void (const char *) except * nogil' to 'void (*)(const char *) noexcept nogil) #773

https://github.com/openai/mujoco-py/issues/773 中发现要安装 “cython < 3”

运行. 报错

1
2
3
4
fatal error: GL/osmesa.h: No such file or directory
1 | #include <GL/osmesa.h>
| ^~~~~~~~~~~~~
compilation terminated.

底下还有一大坨 exception.

根据
https://askubuntu.com/questions/306703/compile-opengl-program-missing-gl-gl-h
的高赞回答, 获取并更新了
apt-file, 运行了apt-file search "/usr/include/GL/gl.h. 找到了
libgl-dev: /usr/include/GL/gl.h , 然后运行了
apt-get install libgl-dev

该报错解决.

提示添加环境变量. 但是环境变量已经添加了啊?

重新运行, 又提示

1
2
3
4
fatal error: GL/osmesa.h: No such file or directory
1 | #include <GL/osmesa.h>
| ^~~~~~~~~~~~~
compilation terminated.

于是才发现前面搜索名字搜错了. 重新搜索找到了 apt-file search "osmesa.h"
进行添加sudo apt-get install libosmesa6-dev


在pychram直接运行时, 提示未添加环境变量.

在终端运行时, 提示

1
gymnasium.error.DependencyNotInstalled: No module named 'mujoco'. (HINT: you need to install mujoco, run `pip install gymnasium[mujoco]

于是运行添加.

提示:

1
2
3
4
5
6
7
8
xkbcommon: ERROR: failed to add default include path /home/rikka/anaconda3/envs/RLenv/share/X11/xkb
/home/rikka/anaconda3/envs/RLenv/lib/python3.10/site-packages/glfw-2.7.0-py3.10-linux-x86_64.egg/glfw/__init__.py:914: GLFWError: (65544) b'Wayland: Failed to initialize xkb context'
warnings.warn(message, GLFWError)
/home/rikka/anaconda3/envs/RLenv/lib/python3.10/site-packages/glfw-2.7.0-py3.10-linux-x86_64.egg/glfw/__init__.py:914: GLFWError: (65537) b'The GLFW library is not initialized'
warnings.warn(message, GLFWError)
python: /builds/florianrhiem/pyGLFW/glfw-3.3.9/src/monitor.c:445: glfwGetVideoMode: Assertion `monitor != ((void *)0)' failed.
Aborted (core dumped)

没有找到这个问题的解决方法.


后面重新找了一篇教程, 跟着一步一步做. 于是

这个报错那篇教程的方法不管用
mujoco_py.cymj.GlfwError: Failed to initialize GLFW

于是参照了这个教程.
https://zhuanlan.zhihu.com/p/606587933

但是怎么样也解决不了. 最终痛定思痛, 选择了

https://zhuanlan.zhihu.com/p/426053896

重头来过一版mujoco2.0.0


终于, 根据指引仔细求索, 中间还搞了点显卡的东西, 然后发现这些玩意和显卡无关. 最后成功导入了mujoco.

然后, 发现大部分最新的模型根本运行不了. 而旧的模型也由于老旧导致报了各种错误. 终结下来没一个能跑的

哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈

然后, 提示里说要求mujoco版本在2.3以上, 我才发现原来mojoco_py很麻烦, 但是mojoco python 是可以直接pip的.

哈哈哈哈哈哈哈哈哈哈哈哈