1import os.path
2import sys
3import itertools
4
5from setuptools import find_packages, setup
6
7# Don't import gym module here, since deps may not be installed
8sys.path.insert(0, os.path.join(os.path.dirname(__file__), "gym"))
9from version import VERSION
10
11# Environment-specific dependencies.
12extras = {
13    "atari": ["ale-py~=0.7.1"],
14    "accept-rom-license": ["autorom[accept-rom-license]~=0.4.2"],
15    "box2d": ["box2d-py==2.3.5", "pyglet>=1.4.0"],
16    "classic_control": ["pyglet>=1.4.0"],
17    "mujoco": ["mujoco_py>=1.50, <2.0"],
18    "robotics": ["mujoco_py>=1.50, <2.0"],
19    "toy_text": ["scipy>=1.4.1"],
20    "other": ["lz4>=3.1.0", "opencv-python>=3."],
21}
22
23# Meta dependency groups.
24nomujoco_blacklist = set(["mujoco", "robotics", "accept-rom-license"])
25nomujoco_groups = set(extras.keys()) - nomujoco_blacklist
26
27extras["nomujoco"] = list(
28    itertools.chain.from_iterable(map(lambda group: extras[group], nomujoco_groups))
29)
30
31
32all_blacklist = set(["accept-rom-license"])
33all_groups = set(extras.keys()) - all_blacklist
34
35extras["all"] = list(
36    itertools.chain.from_iterable(map(lambda group: extras[group], all_groups))
37)
38
39setup(
40    name="gym",
41    version=VERSION,
42    description="Gym: A universal API for reinforcement learning environments.",
43    url="https://github.com/openai/gym",
44    author="OpenAI",
45    author_email="jkterry@umd.edu",
46    license="",
47    packages=[package for package in find_packages() if package.startswith("gym")],
48    zip_safe=False,
49    install_requires=[
50        "numpy>=1.18.0",
51        "cloudpickle>=1.2.0",
52        "importlib_metadata>=4.8.1; python_version < '3.8'",
53    ],
54    extras_require=extras,
55    package_data={
56        "gym": [
57            "envs/mujoco/assets/*.xml",
58            "envs/classic_control/assets/*.png",
59            "envs/robotics/assets/LICENSE.md",
60            "envs/robotics/assets/fetch/*.xml",
61            "envs/robotics/assets/hand/*.xml",
62            "envs/robotics/assets/stls/fetch/*.stl",
63            "envs/robotics/assets/stls/hand/*.stl",
64            "envs/robotics/assets/textures/*.png",
65        ]
66    },
67    tests_require=["pytest", "mock"],
68    python_requires=">=3.6",
69    classifiers=[
70        "Programming Language :: Python :: 3",
71        "Programming Language :: Python :: 3.6",
72        "Programming Language :: Python :: 3.7",
73        "Programming Language :: Python :: 3.8",
74        "Programming Language :: Python :: 3.9",
75    ],
76)
77