import gym from ray.rllib.env.env_context import EnvContext from ray.rllib.utils.error import ERR_MSG_INVALID_ENV_DESCRIPTOR, EnvError def _gym_env_creator(env_context: EnvContext, env_descriptor: str) -> gym.Env: """Tries to create a gym env given an EnvContext object and descriptor. Note: This function tries to construct the env from a string descriptor only using possibly installed RL env packages (such as gym, pybullet_envs, vizdoomgym, etc..). These packages are no installation requirements for RLlib. In case you would like to support more such env packages, add the necessary imports and construction logic below. Args: env_context: The env context object to configure the env. Note that this is a config dict, plus the properties: `worker_index`, `vector_index`, and `remote`. env_descriptor: The env descriptor, e.g. CartPole-v0, MsPacmanNoFrameskip-v4, VizdoomBasic-v0, or CartPoleContinuousBulletEnv-v0. Returns: The actual gym environment object. Raises: gym.error.Error: If the env cannot be constructed. """ # Allow for PyBullet or VizdoomGym envs to be used as well # (via string). This allows for doing things like # `env=CartPoleContinuousBulletEnv-v0` or # `env=VizdoomBasic-v0`. try: import pybullet_envs pybullet_envs.getList() except (ModuleNotFoundError, ImportError): pass try: import vizdoomgym vizdoomgym.__name__ # trick LINTer. except (ModuleNotFoundError, ImportError): pass # Try creating a gym env. If this fails we can output a # decent error message. try: return gym.make(env_descriptor, **env_context) except gym.error.Error: raise EnvError(ERR_MSG_INVALID_ENV_DESCRIPTOR.format(env_descriptor))