安装 D4RL 和 mujoco-py

本文撰写于 2025 年 6 月 13 日,文章中的内容具有时效性,当你看到这篇文章时它可能已经过时。

D4RL 包括一系列在离线强化学习中广泛使用的环境和数据集,mujoco-py 是一个用于与 MuJoCo 物理引擎交互的 Python 包,是 D4RL 的重要依赖之一。这两个包已经很久没有更新和维护,在安装时可能遇到一系列问题,但是它们仍然是离线强化学习领域的重要工具。本文以 Ubuntu 下的 conda 环境为例,介绍如何安装 D4RL 和 mujoco-py 库。如果你正在使用其他 Linux 发行版、使用 venv 或在容器中安装,可能需要根据实际情况进行调整。

创建环境和安装 pip 包

首先创建和激活环境。注意指定了 Python 版本 (D4RL 要求 >=3.7, <3.11):

1
2
conda create -n d4rl python=3.10 numpy tqdm
conda activate d4rl

安装 pip 包,注意 mujoco-py 和 cython 3 不兼容,因此指定了 cython<3

1
2
pip install git+https://github.com/Farama-Foundation/d4rl@master#egg=d4rl
pip install opencv-python "cython<3"

为 mujoco-py 准备依赖

安装 MuJoCo 引擎

根据 mujoco-py 文档 进行安装:

1
2
3
4
5
6
7
cd ~
wget https://mujoco.org/download/mujoco210-linux-x86_64.tar.gz
tar -xzf mujoco210-linux-x86_64.tar.gz
mkdir ~/.mujoco
mv mujoco210 .mujoco/
wget -O ~/.mujoco/mjkey.txt https://www.roboti.us/file/mjkey.txt
cd -1

为 mujoco-py 的编译准备依赖

在编译 mujoco-py 时通常会遇到四类问题:

  1. cython 版本不兼容导致的编译错误,上面已经通过指定 cython<3 解决
  2. 缺少 OpenGL 相关的依赖
  3. 缺少 patchelf
  4. 找不到 GLIBCXX_3.4.30

为了解决这些问题,我们需要安装一些系统依赖和 conda 包。下面的命令中

  • 第一行解决了缺少 openGL 的问题
  • 第二行解决了缺少 patchelf 的问题
  • 第三行解决了找不到 GLIBCXX_3.4.30 的问题。非 conda 环境或者 conda 源为 forge 可能不会出现问题,可以遇到问题了再执行
    • 这里使用 conda 而非 apt 是为了将 glibc 版本的更改限制在 conda 环境内,避免对系统内其他程序造成影响。如果是在虚拟机/容器/notebook下可以直接 apt 安装
    • 这一步可能会比较久。可以直接通过 rm $CONDA_PREFIX/lib/libstdc++.so.6 && ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6 $CONDA_PREFIX/lib/libstdc++.so.6 来解决。我用了很久了都没出现问题。
1
2
3
sudo apt install libgl1-mesa-dev libgl1-mesa-glx libglew-dev libosmesa6-dev software-properties-common net-tools xpra xserver-xorg-dev
sudo apt-get install patchelf
conda install -c conda-forge libstdcxx-ng=12

安装 mujoco-py 并编译

安装 mujoco-py:

1
pip install 'mujoco-py<2.2,>=2.1'

最后进入 python 交互式终端并尝试 import d4rl ,在此过程中会导入 mujoco 并进行编译。检查编译是否成功。

参考资料

  1. D4RL
  2. mujoco-py
  3. MuJoCo 物理引擎
  4. GitHub Issue - Mujoco-py is incompatible with cython 3
  5. MuJoCo License
作者

Cao Mingjun

发布于

2025-06-13

更新于

2025-06-13

许可协议

评论