Skip to content

Commit c8d93a4

Browse files
authored
[deps] Upgrade Bazel/environment dependencies and require Python 3.12 (#425)
## Description Upgrade EnvPool's Bazel dependencies, Python packages, and official environment oracles together. All physics families now share the published MuJoCo 3.11.0 baseline; Python 3.11 support is removed, leaving Python 3.12–3.14. Compared with `main`, 48 existing development-lock packages and 16 existing release-lock packages are upgraded. | Dependency / oracle | Previous | New | | --- | ---: | ---: | | EnvPool release | 1.2.5 | 1.2.6 | | MuJoCo | 3.6.0 | 3.11.0 | | MuJoCo MJX | 3.6.0 | 3.11.0 | | dm-control | 1.0.38 | 1.0.44 | | Arcade Learning Environment | 0.11.2 | 0.12.1 | | Gymnasium | 1.2.3 | 1.3.0 | | highway-env | 1.10.2 | 1.12.1 | | MiniGrid | 3.0.0 | 3.1.0 | | MyoSuite | 2.11.6 | 2.12.2 | | MetaWorld | 3.0.0 | 3.1.1 | | Jumanji | 1.1.1 | 1.1.2 | | rules_python | 1.6.3 | 2.3.2 | | pybind11 | 3.0.2 | 3.1.0 | | protobuf | 34.1 | 36.0 | | OpenCV | 4.13.0 | 4.14.0 | | FreeType | 2.13.3 | 2.14.3 | | PyTorch | 2.10.0 | 2.13.0 | | setuptools | 70.3.0 | 84.0.0 | ## Motivation and Context The original dependency refresh deliberately excluded environment oracles. Updating those packages together exposes compatibility changes that must be handled in the native implementations and existing official-oracle suites: - Remove Python 3.11 from package metadata, Bazel toolchains/hubs, release matrices, Docker builds, Ruff, and documentation. MuJoCo 3.11's C++ atomics require a macOS 11 minimum deployment target. - Extend Highway's native implementation to all 31 upstream environment IDs, including the newly registered generic merge/roundabout and multi-agent/continuous intersection variants. Preserve existing full-registry deterministic, step-by-step, and render alignment; only `merge-generic-v1` on Linux x86_64 needs a single `float64` epsilon (`2.22e-16`) for one near-zero lateral observation, while all other scenarios, rewards, and renders remain bitwise. - Implement Gymnasium's native Taxi-v4 rainy transitions, fickle passengers, `info:prob`, and action masks while retaining Taxi-v3 compatibility. Switch the Gymnasium rendering dependency from `pygame` to `pygame-ce`. - Add MiniGrid's new `MultiRoom-N4-S5-v1`, cover all 82 upstream MiniGrid IDs, update the existing WFC oracle shims for renamed registry entry points, and remove redundant hard-coded registry counts. - Migrate Jumanji's Connector to canonical `Connector-v3` while retaining the `Connector-v2` compatibility alias and preserving its long-rollout/render oracle checks. - Upgrade MyoSuite's source-based isolated oracle and all 398 native tasks to the same MuJoCo 3.11 engine. Keep its isolated oracle on upstream-compatible Gymnasium 1.2.3, add the newly required `imageio` dependency, and replace removed simulation accessors with MuJoCo's current `mj_model`/`mj_data` APIs. - Upgrade MetaWorld's source-backed oracle, fix the changed wall-button `tcp_closed` reward behavior, and match official NumPy `float32` action scaling before moving the mocap body. The official Linux MuJoCo wheel is compiled with Clang 20 while the native engine uses GCC 13; their contact solver diverges only on `door-lock-v3` and `door-unlock-v3`, so measured 128-step observation residuals are scoped to those two Linux x86_64 tasks only (`5e-6` / `1.5e-5`), with `2e-6` limited to their reward and the two affected continuous reward-info fields. All other tasks, platforms, binary info, and render assertions retain their existing thresholds. - Reuse a single Bazel-built MuJoCo library for macOS/Windows official contact-heavy oracles. Match NumPy's non-fused velocity arithmetic in native Franka Kitchen, eliminating a demonstrated 280-step contact bifurcation without widening tolerances. - Include MuJoCo 3.11's OBJ/STL decoder plugins in its shared library and delete obsolete Windows plugin-entry wrappers and the upstreamed MyoSuite MjSpec patch. - Preserve the existing rules_python extras/platform-marker fixes, Windows/OpenCV compatibility, PGX sharding, packaged Jumanji renderer/database assets, Linux EGL/OpenGL loading, and clang-tidy failure propagation. Pin the previously unverified `rules_boost` archive with its actual SHA-256. - Keep Matplotlib 3.10.8 and the `<3.11` runtime bound because Matplotlib 3.11 still regresses the Jumanji MMST renderer. Bazel remains at 8.6.0. MyoSuite's published metadata currently caps MuJoCo below 3.7 and Gymnasium below 1.3. EnvPool therefore continues using the already-existing isolated, pinned source oracle instead of forcing incompatible package metadata into its public runtime. All 398 task alignments and render checks execute against MuJoCo 3.11. MetaWorld is likewise checked from its pinned official source against the unified engine. - [ ] I have raised an issue to propose this change ([required](https://envpool.readthedocs.io/en/latest/pages/contributing.html) for new features and bug fixes) Dependency maintenance and compatibility migration; no separate issue was opened. ## Types of changes - [x] Bug fix (non-breaking change which fixes an issue) - [x] New feature (non-breaking change which adds core functionality) - [ ] New environment (non-breaking change which adds 3rd-party environment) - [x] Breaking change (Python 3.11 support is removed) - [x] Documentation (update in the documentation) - [x] Example (update in the folder of example) ## Implemented Tasks - [x] Upgrade the Bazel/PyPI dependencies and every requested environment oracle. - [x] Unify MuJoCo/MJX/dm-control/MyoSuite/MetaWorld on published MuJoCo 3.11.0. - [x] Remove Python 3.11 from build, packaging, release, and documentation paths. - [x] Cover every newly registered Highway, MiniGrid, Taxi, and Jumanji task ID. - [x] Keep native C++ runtime logic and existing strict deterministic/alignment/render checks. - [x] Validate Python 3.12–3.14 binary dependency resolution on Linux x64/ARM64, macOS ARM64, and Windows x64. - [x] Complete full local macOS and Linux-devbox lint, tests, coverage, release builds, and installed-wheel release checks. - [ ] Complete actual hosted GitHub Actions jobs after the repository-account billing lock is resolved. ## Checklist - [x] I have read the [CONTRIBUTION](https://envpool.readthedocs.io/en/latest/pages/contributing.html) guide (**required**) - [x] My change requires a change to the documentation. - [x] I have updated the tests accordingly (*required for a bug fix or a new feature*). - [x] I have updated the documentation accordingly. - [x] I have verified formatting using the individual formatter checks (**required**). - [x] I have checked the code using the `make lint` components, run individually (**required**). - [x] I have ensured existing and new upstream task IDs are covered by deterministic/alignment/render checks. ### Verification Final source commit: `508effd64fa7ab4c9409101049405881c7145f87`. The complete macOS/Linux suites below passed on `782d5b442068811de151fd2a0af31a531f5aa6e6`, immediately before the two-line release-version bump; the complete macOS installed-wheel release path was rerun on the final 1.2.6 commit. On **both macOS ARM64 and Linux x86_64 devbox**, run all formatting/static/documentation/spelling checks; all **98 Bazel test targets uncached**; a development wheel; a Python 3.12 release wheel; isolated wheel installation; `uv pip check`; and the complete installed-wheel `make release-test`. Linux additionally runs `clang-tidy`, full Bazel coverage, coverage reporting, and both Qt-absent Procgen import modes. - **macOS ARM64:** all lint checks, **98/98 uncached Bazel targets**, development wheel, release wheel, clean-venv installation/`uv pip check`, and installed-wheel `make release-test` passed on the full-suite baseline (7.9 minutes of recorded validation). The final commit additionally built `envpool-1.2.6-cp312-cp312-macosx_11_0_arm64.whl`, installed it into a fresh virtual environment, passed `uv pip check`, reran the complete installed-wheel `make release-test`, and verified version `1.2.6` plus `Requires-Python: >=3.12`. - **Linux x86_64 devbox (full-suite baseline):** all lint checks, **98/98 uncached Bazel targets**, development wheel, release wheel (`envpool-1.2.5-cp312-cp312-manylinux_2_38_x86_64.manylinux_2_39_x86_64.whl`), clean-venv installation/`uv pip check`, and installed-wheel `make release-test` passed; full clang-tidy, coverage, and Qt-absent release checks passed (54.7 minutes of recorded validation). Release-lock and wheel-runtime requirements additionally resolve from **binary wheels only** for Python 3.12, 3.13, and 3.14 across Linux x86_64, Linux aarch64, macOS arm64, and Windows x86_64: **24/24 successful resolution checks**. These are dependency-resolution checks, not execution on every platform. - **Coverage:** the full uncached Linux LCOV report passed with **91.14% overall line coverage**, **93.65% C/C++**, and **86.65% Python**. ### Remaining CI / platform gaps - **GitHub Actions remains blocked before runner startup by repository billing:** GitHub reports, "The job was not started because your account is locked due to a billing issue." This is not a failing test result; hosted checks must be rerun after repository billing is restored. The devbox uses native Ubuntu rather than the actual `manylinux_2_28` release container. Hosted Linux aarch64, Windows, macOS GitHub runners, and the broader Python execution matrix remain CI validation gaps until GitHub Actions can start. ## New Environment Checklist No new environment family is introduced; the existing Highway, MiniGrid, Taxi, and Jumanji upstream families are extended. - [x] Runtime logic is native C++ and does not bridge to the official Python environment. - [x] All newly intended upstream task IDs/scenarios are registered, documented, and covered. - [x] Official upstream versions are pinned, and existing tests verify actual upstream registry coverage. - [x] Determinism checks cover reset and multi-step rollouts across the registered task families. - [x] Oracle checks compare step-level observations, rewards, done/truncation, info, and available renders; unavoidable cross-compiler contact residuals are measured and scoped only to the two affected Linux x86_64 tasks/fields. - [x] Existing render suites cover reset, multi-step, batched render, and upstream frame alignment. - [x] `envpool/make_test.py`, release packaging, docs, and README support lists reflect the migrated task families.
1 parent 6d9e1a2 commit c8d93a4

97 files changed

Lines changed: 1466 additions & 884 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.bazelrc

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
# rules_python 2.x uses symlink-based runfiles on Windows.
2+
startup --windows_enable_symlinks
3+
14
common --enable_workspace
25
common --noenable_bzlmod
36
common --noincompatible_disallow_empty_glob
@@ -21,9 +24,9 @@ build:linux --action_env=LD_LIBRARY_PATH=/usr/local/lib:/usr/lib/nvidia
2124
build:macos --cxxopt=-std=c++17
2225
build:macos --host_cxxopt=-std=c++17
2326
build:macos --client_env=BAZEL_CXXOPTS=-std=c++17
24-
build:macos --action_env=MACOSX_DEPLOYMENT_TARGET=10.15
25-
build:macos --copt=-mmacosx-version-min=10.15
26-
build:macos --linkopt=-mmacosx-version-min=10.15
27+
build:macos --action_env=MACOSX_DEPLOYMENT_TARGET=11.0
28+
build:macos --copt=-mmacosx-version-min=11.0
29+
build:macos --linkopt=-mmacosx-version-min=11.0
2730
test:macos --test_env=PATH=/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
2831

2932
build:windows --cxxopt=/std:c++20

.github/workflows/release.yml

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ jobs:
2323
python-version: >-
2424
${{ fromJSON(
2525
(github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/v'))
26-
&& '["3.11", "3.12", "3.13", "3.14"]'
26+
&& '["3.12", "3.13", "3.14"]'
2727
|| '["3.12"]'
2828
) }}
2929
env:
@@ -95,14 +95,13 @@ jobs:
9595
LIBGL_ALWAYS_SOFTWARE: "1"
9696
MESA_LOADER_DRIVER_OVERRIDE: llvmpipe
9797
GALLIUM_DRIVER: llvmpipe
98-
ENVPOOL_SKIP_MUJOCO_RENDER_SMOKE: "1"
9998
strategy:
10099
fail-fast: false
101100
matrix:
102101
include: >-
103102
${{ fromJSON(
104103
(github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/v'))
105-
&& '[{"arch":"x86_64","runner":"ubuntu-24.04","container":"quay.io/pypa/manylinux_2_28_x86_64","auditwheel-plat":"manylinux_2_28_x86_64","python-version":"3.11"},{"arch":"x86_64","runner":"ubuntu-24.04","container":"quay.io/pypa/manylinux_2_28_x86_64","auditwheel-plat":"manylinux_2_28_x86_64","python-version":"3.12"},{"arch":"x86_64","runner":"ubuntu-24.04","container":"quay.io/pypa/manylinux_2_28_x86_64","auditwheel-plat":"manylinux_2_28_x86_64","python-version":"3.13"},{"arch":"x86_64","runner":"ubuntu-24.04","container":"quay.io/pypa/manylinux_2_28_x86_64","auditwheel-plat":"manylinux_2_28_x86_64","python-version":"3.14"},{"arch":"aarch64","runner":"ubuntu-24.04-arm","container":"quay.io/pypa/manylinux_2_28_aarch64","auditwheel-plat":"manylinux_2_28_aarch64","python-version":"3.11"},{"arch":"aarch64","runner":"ubuntu-24.04-arm","container":"quay.io/pypa/manylinux_2_28_aarch64","auditwheel-plat":"manylinux_2_28_aarch64","python-version":"3.12"},{"arch":"aarch64","runner":"ubuntu-24.04-arm","container":"quay.io/pypa/manylinux_2_28_aarch64","auditwheel-plat":"manylinux_2_28_aarch64","python-version":"3.13"},{"arch":"aarch64","runner":"ubuntu-24.04-arm","container":"quay.io/pypa/manylinux_2_28_aarch64","auditwheel-plat":"manylinux_2_28_aarch64","python-version":"3.14"}]'
104+
&& '[{"arch":"x86_64","runner":"ubuntu-24.04","container":"quay.io/pypa/manylinux_2_28_x86_64","auditwheel-plat":"manylinux_2_28_x86_64","python-version":"3.12"},{"arch":"x86_64","runner":"ubuntu-24.04","container":"quay.io/pypa/manylinux_2_28_x86_64","auditwheel-plat":"manylinux_2_28_x86_64","python-version":"3.13"},{"arch":"x86_64","runner":"ubuntu-24.04","container":"quay.io/pypa/manylinux_2_28_x86_64","auditwheel-plat":"manylinux_2_28_x86_64","python-version":"3.14"},{"arch":"aarch64","runner":"ubuntu-24.04-arm","container":"quay.io/pypa/manylinux_2_28_aarch64","auditwheel-plat":"manylinux_2_28_aarch64","python-version":"3.12"},{"arch":"aarch64","runner":"ubuntu-24.04-arm","container":"quay.io/pypa/manylinux_2_28_aarch64","auditwheel-plat":"manylinux_2_28_aarch64","python-version":"3.13"},{"arch":"aarch64","runner":"ubuntu-24.04-arm","container":"quay.io/pypa/manylinux_2_28_aarch64","auditwheel-plat":"manylinux_2_28_aarch64","python-version":"3.14"}]'
106105
|| '[{"arch":"x86_64","runner":"ubuntu-24.04","container":"quay.io/pypa/manylinux_2_28_x86_64","auditwheel-plat":"manylinux_2_28_x86_64","python-version":"3.12"},{"arch":"aarch64","runner":"ubuntu-24.04-arm","container":"quay.io/pypa/manylinux_2_28_aarch64","auditwheel-plat":"manylinux_2_28_aarch64","python-version":"3.12"}]'
107106
) }}
108107
steps:
@@ -123,7 +122,6 @@ jobs:
123122
shell: bash
124123
run: |
125124
case "${{ matrix.python-version }}" in
126-
3.11) PYBIN=/opt/python/cp311-cp311/bin ;;
127125
3.12) PYBIN=/opt/python/cp312-cp312/bin ;;
128126
3.13) PYBIN=/opt/python/cp313-cp313/bin ;;
129127
3.14) PYBIN=/opt/python/cp314-cp314/bin ;;
@@ -176,7 +174,7 @@ jobs:
176174
python-version: >-
177175
${{ fromJSON(
178176
(github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/v'))
179-
&& '["3.11", "3.12", "3.13", "3.14"]'
177+
&& '["3.12", "3.13", "3.14"]'
180178
|| '["3.12"]'
181179
) }}
182180
env:

BUILD

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
load("@python_versions//3.11:defs.bzl", py_binary_311 = "py_binary")
21
load("@python_versions//3.12:defs.bzl", py_binary_312 = "py_binary")
32
load("@python_versions//3.13:defs.bzl", py_binary_313 = "py_binary")
43
load("@python_versions//3.14:defs.bzl", py_binary_314 = "py_binary")
@@ -67,14 +66,6 @@ py_binary(
6766
deps = _SETUP_DEPS,
6867
)
6968

70-
py_binary_311(
71-
name = "setup_py311",
72-
srcs = _SETUP_SRCS,
73-
data = _SETUP_DATA,
74-
main = "setup.py",
75-
deps = _SETUP_DEPS,
76-
)
77-
7869
py_binary_312(
7970
name = "setup_py312",
8071
srcs = _SETUP_SRCS,

Makefile

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,11 @@ RELEASE_PYTHON ?= $(shell python3 -c 'import sys; print("{}.{}".format(sys.versi
2626
RELEASE_SETUP_TARGET = //:setup_py$(subst .,,$(RELEASE_PYTHON))
2727
PYPI_WHEEL_PLAT ?= manylinux_2_28_x86_64
2828
WHEEL_SIZE_LIMIT_BYTES ?= 100000000
29-
# Procgen links Qt, but vendoring Qt pulls a large Qt/ICU stack into
30-
# envpool.libs. Linux release wheels expect the system Qt runtime instead.
31-
AUDITWHEEL_EXCLUDE_LIBS ?= libQt5Core.so.5 libQt5Gui.so.5
29+
# Linux wheels use system Qt to avoid vendoring its large Qt/ICU stack.
30+
# Keep EGL/OpenGL on the system GL dispatch stack too: MuJoCo's GL loader
31+
# does not recognize auditwheel's renamed EGL library.
32+
AUDITWHEEL_EXCLUDE_LIBS ?= libQt5Core.so.5 libQt5Gui.so.5 \
33+
libEGL.so.1 libOpenGL.so.0 libGLdispatch.so.0
3234
AUDITWHEEL_EXCLUDE_FLAGS = $(foreach lib,$(AUDITWHEEL_EXCLUDE_LIBS),--exclude $(lib))
3335
CLANG_TIDY_MAJOR = 18
3436
CLANG_TIDY_BIN = clang-tidy-$(CLANG_TIDY_MAJOR)
@@ -160,6 +162,7 @@ bazel-pip-requirement-release:
160162
cd third_party/pip_requirements && (cmp -s requirements.txt requirements-release-lock.txt || (rm -f requirements.txt && cp -f requirements-release-lock.txt requirements.txt))
161163

162164
clang-tidy: clang-tidy-install bazel-pip-requirement-dev
165+
set -eo pipefail; \
163166
targets="$${CLANG_TIDY_TARGETS:-$$($(CLANG_TIDY_TARGET_RESOLVER) | tr '\n' ' ')}"; \
164167
if [ -z "$$targets" ]; then \
165168
echo "No clang-tidy-relevant C++ changes detected; skipping."; \
@@ -259,7 +262,8 @@ pypi-wheel: $(PYPI_WHEEL_PREREQS) bazel-release
259262
release-test1:
260263
tmpdir=$$(python3 -c 'import tempfile; print(tempfile.mkdtemp(prefix="envpool-release-test-"))'); \
261264
cd "$$tmpdir" && PYTHONPATH= python3 "$(CURDIR)/scripts/release_installed_wheel_smoke.py" --source-root "$(CURDIR)" && \
262-
cd "$$tmpdir" && PYTHONPATH= python3 "$(CURDIR)/envpool/make_test.py"
265+
cd "$$tmpdir" && PYTHONPATH= python3 "$(CURDIR)/envpool/make_test.py" && \
266+
cd "$$tmpdir" && PYTHONPATH= python3 "$(CURDIR)/envpool/jumanji/jumanji_registry_test.py"
263267

264268
release-test2:
265269
cd examples && python3 make_env.py && python3 env_step.py

README.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828

2929
Here are EnvPool's several highlights:
3030

31-
- **All-platform support: Linux, macOS, and Windows** wheels for Python 3.11-3.14;
31+
- **All-platform support: Linux, macOS, and Windows** wheels for Python 3.12-3.14;
3232
- **Built-in rendering** with batched `rgb_array` output and `human` display mode;
3333
- Compatible with [`gymnasium`](https://github.com/Farama-Foundation/Gymnasium) APIs and DeepMind `dm_env` APIs;
3434
- Manage a pool of envs, interact with the envs in batched APIs by default;
@@ -53,7 +53,7 @@ Check out our [arXiv paper](https://arxiv.org/abs/2206.10558) for more details!
5353

5454
### PyPI
5555

56-
EnvPool is currently hosted on [PyPI](https://pypi.org/project/envpool/). It supports Python 3.11-3.14 on Linux, macOS, and Windows.
56+
EnvPool is currently hosted on [PyPI](https://pypi.org/project/envpool/). It supports Python 3.12-3.14 on Linux, macOS, and Windows.
5757

5858
You can simply install EnvPool with the following command:
5959

@@ -72,6 +72,8 @@ If no error occurs, you have successfully installed EnvPool.
7272

7373
Platform notes:
7474

75+
- Linux MuJoCo wheels use the system EGL/OpenGL runtime. For Mesa on Ubuntu,
76+
install `libegl1 libopengl0 libgl1-mesa-dri`.
7577
- Linux Procgen wheels intentionally do not vendor Qt. If making a Procgen
7678
environment reports missing `libQt5Core.so.5` or `libQt5Gui.so.5`, install
7779
the system Qt 5 runtime, for example with `apt install qtbase5-dev` or

benchmark/requirements.txt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
gymnasium[atari,box2d,mujoco]==1.2.3
2-
ale-py==0.11.2
3-
mujoco==3.6.0
1+
gymnasium[atari,box2d,mujoco]==1.3.0
2+
ale-py==0.12.1
3+
mujoco==3.11.0
44
tqdm
55
opencv-python-headless>=4.13.0.92
6-
dm_control==1.0.38
6+
dm_control==1.0.44

docker/release.dockerfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ COPY . .
2323

2424
# cache bazel build (cpp only)
2525

26-
RUN PATH=/opt/python/cp311-cp311/bin:$PATH bazel build //envpool/utils:image_process_test --config=release
27-
RUN PATH=/opt/python/cp311-cp311/bin:$PATH bazel build //envpool/vizdoom/bin:vizdoom_bin --config=release
26+
RUN PATH=/opt/python/cp312-cp312/bin:$PATH bazel build //envpool/utils:image_process_test --config=release
27+
RUN PATH=/opt/python/cp312-cp312/bin:$PATH bazel build //envpool/vizdoom/bin:vizdoom_bin --config=release
2828

2929
WORKDIR /app

docs/content/build.rst

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ Build From Source
22
=================
33

44
We recommend developing EnvPool on Ubuntu 24.04. Release wheels are built for
5-
Python 3.11-3.14 in ``manylinux_2_28_x86_64`` and
5+
Python 3.12-3.14 in ``manylinux_2_28_x86_64`` and
66
``manylinux_2_28_aarch64`` environments for Linux, on ``macos-14`` for
77
macOS, and on ``windows-2022`` for Windows.
88

@@ -71,7 +71,7 @@ Install Other Dependencies
7171

7272
EnvPool source builds share a few common requirements across platforms:
7373

74-
- **Python >= 3.11**
74+
- **Python >= 3.12**
7575
- **Java 17**
7676
- **Go >= 1.22** plus ``bazelisk`` / ``bazel``
7777
- **SWIG**
@@ -147,8 +147,8 @@ EnvPool loads ``libglapi.dll``, ``libgallium_wgl.dll``, and
147147
``opengl32.dll`` from ``ENVPOOL_DLL_DIR`` before the Windows MuJoCo render
148148
tests and before the GLFW-backed render path.
149149

150-
Qt runtime in wheels
151-
^^^^^^^^^^^^^^^^^^^^
150+
Graphics runtime in wheels
151+
^^^^^^^^^^^^^^^^^^^^^^^^^^
152152

153153
Linux release wheels intentionally exclude the Qt shared libraries used by
154154
Procgen (``libQt5Core.so.5`` and ``libQt5Gui.so.5``) from ``auditwheel``
@@ -161,6 +161,12 @@ Procgen (``Qt5Core.dll`` and ``Qt5Gui.dll``) directly next to
161161
``procgen_envpool.pyd``. End users installing the wheel do **not** need a
162162
separate Qt installation at runtime on Windows.
163163

164+
Linux MuJoCo wheels also use system EGL and OpenGL libraries (``libEGL.so.1``,
165+
``libOpenGL.so.0``, and ``libGLdispatch.so.0``). Keeping these on the system GL
166+
dispatch stack avoids ``auditwheel`` renaming EGL libraries that MuJoCo's GL
167+
loader needs to recognize. For Mesa on Ubuntu, install
168+
``libegl1 libopengl0 libgl1-mesa-dri``.
169+
164170
Source builds still require a local Qt 5 installation so Bazel can compile and
165171
link against Qt. Linux and macOS continue to rely on system Qt packages at
166172
build time.

docs/content/new_env.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -709,7 +709,7 @@ If we want to add ``tianshou`` as a build dependency, in ``setup.cfg``:
709709
710710
[options]
711711
packages = find:
712-
python_requires = >=3.11
712+
python_requires = >=3.12
713713
install_requires =
714714
dm-env>=1.4
715715
gymnasium>=0.26

docs/env/box2d.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ Box2D
22
=====
33

44
EnvPool's Box2D implementation follows ``box2d==2.4.2``. The current Python
5-
baseline checks compare against Gymnasium ``1.2.3`` Box2D environments backed
5+
baseline checks compare against Gymnasium ``1.3.0`` Box2D environments backed
66
by the ``box2d`` wheel.
77

88

0 commit comments

Comments
 (0)