Skip to content

Commit 05d52cf

Browse files
authored
Fix mujoco_py only installation (#3072)
Only import `mujoco_rendering` when `mujoco` installed. Otherwise the `try import` code in `gym.envs.mujoco.mujoco_env` is useless.
1 parent eca535e commit 05d52cf

File tree

3 files changed

+14
-18
lines changed

3 files changed

+14
-18
lines changed

gym/envs/mujoco/__init__.py

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,5 @@
11
from gym.envs.mujoco.mujoco_env import MujocoEnv, MuJocoPyEnv # isort:skip
2-
from gym.envs.mujoco.mujoco_rendering import ( # isort:skip
3-
RenderContextOffscreen,
4-
Viewer,
5-
)
62

7-
# ^^^^^ so that user gets the correct error
8-
# message if mujoco is not installed correctly
93
from gym.envs.mujoco.ant import AntEnv
104
from gym.envs.mujoco.half_cheetah import HalfCheetahEnv
115
from gym.envs.mujoco.hopper import HopperEnv

gym/envs/mujoco/mujoco_env.py

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,19 @@
77
from gym import error, logger, spaces
88
from gym.spaces import Space
99

10-
MUJOCO_PY_NOT_INSTALLED = False
11-
MUJOCO_NOT_INSTALLED = False
12-
1310
try:
1411
import mujoco_py
1512
except ImportError as e:
1613
MUJOCO_PY_IMPORT_ERROR = e
17-
MUJOCO_PY_NOT_INSTALLED = True
14+
else:
15+
MUJOCO_PY_IMPORT_ERROR = None
1816

1917
try:
2018
import mujoco
2119
except ImportError as e:
2220
MUJOCO_IMPORT_ERROR = e
23-
MUJOCO_NOT_INSTALLED = True
21+
else:
22+
MUJOCO_IMPORT_ERROR = None
2423

2524

2625
DEFAULT_SIZE = 480
@@ -183,7 +182,7 @@ def __init__(
183182
camera_id: Optional[int] = None,
184183
camera_name: Optional[str] = None,
185184
):
186-
if MUJOCO_PY_NOT_INSTALLED:
185+
if MUJOCO_PY_IMPORT_ERROR is not None:
187186
raise error.DependencyNotInstalled(
188187
f"{MUJOCO_PY_IMPORT_ERROR}. (HINT: you need to install mujoco_py, and also perform the setup instructions here: https://github.com/openai/mujoco-py/.)"
189188
)
@@ -305,7 +304,7 @@ def __init__(
305304
camera_id: Optional[int] = None,
306305
camera_name: Optional[str] = None,
307306
):
308-
if MUJOCO_NOT_INSTALLED:
307+
if MUJOCO_IMPORT_ERROR is not None:
309308
raise error.DependencyNotInstalled(
310309
f"{MUJOCO_IMPORT_ERROR}. (HINT: you need to install mujoco)"
311310
)
@@ -395,15 +394,18 @@ def close(self):
395394

396395
def _get_viewer(
397396
self, mode
398-
) -> Union["gym.envs.mujoco.Viewer", "gym.envs.mujoco.RenderContextOffscreen"]:
397+
) -> Union[
398+
"gym.envs.mujoco.mujoco_rendering.Viewer",
399+
"gym.envs.mujoco.mujoco_rendering.RenderContextOffscreen",
400+
]:
399401
self.viewer = self._viewers.get(mode)
400402
if self.viewer is None:
401403
if mode == "human":
402-
from gym.envs.mujoco import Viewer
404+
from gym.envs.mujoco.mujoco_rendering import Viewer
403405

404406
self.viewer = Viewer(self.model, self.data)
405407
elif mode in {"rgb_array", "depth_array"}:
406-
from gym.envs.mujoco import RenderContextOffscreen
408+
from gym.envs.mujoco.mujoco_rendering import RenderContextOffscreen
407409

408410
self.viewer = RenderContextOffscreen(self.model, self.data)
409411
else:

tests/envs/utils.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import numpy as np
55

66
import gym
7-
from gym import logger
7+
from gym import error, logger
88
from gym.envs.registration import EnvSpec
99

1010

@@ -17,7 +17,7 @@ def try_make_env(env_spec: EnvSpec) -> Optional[gym.Env]:
1717
if "gym.envs." in env_spec.entry_point:
1818
try:
1919
return env_spec.make(disable_env_checker=True).unwrapped
20-
except ImportError as e:
20+
except (ImportError, error.DependencyNotInstalled) as e:
2121
logger.warn(f"Not testing {env_spec.id} due to error: {e}")
2222
return None
2323

0 commit comments

Comments
 (0)