diff --git a/py.Dockerfile b/py.Dockerfile index 882fd34e0..0d4c290cb 100644 --- a/py.Dockerfile +++ b/py.Dockerfile @@ -14,7 +14,6 @@ ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/root/.mujoco/mujoco210/bin COPY . /usr/local/gym/ WORKDIR /usr/local/gym/ -RUN if [ python:$PYTHON_VERSION = "python:3.6.15" ] ; then pip install .[box2d,classic_control,toy_text,other] ; else pip install .[noatari] ; fi -RUN pip install -r test_requirements.txt +RUN if [ python:$PYTHON_VERSION = "python:3.6.15" ] ; then pip install .[box2d,classic_control,toy_text,other] pytest mock ; else pip install .[testing] ; fi ENTRYPOINT ["/usr/local/gym/bin/docker_entrypoint"] diff --git a/requirements.txt b/requirements.txt index 30b96b64b..dc40f83b4 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,9 +1,14 @@ -ale-py~=0.7.5 -opencv-python>=3.0 -box2d-py==2.3.5 -scipy>=1.4.1 numpy>=1.18.0 -pyglet>=1.4.0 cloudpickle>=1.2.0 +importlib_metadata>=4.8.0; python_version < '3.10' +gym_notices>=0.0.4 +dataclasses==0.8; python_version == '3.6' +opencv-python>=3.0 lz4>=3.1.0 +matplotlib>=3.0 +box2d-py==2.3.5 pygame==2.1.0 +ale-py~=0.7.5 +mujoco==2.2.0 +mujoco_py<2.2,>=2.1 +imageio>=2.14.1 \ No newline at end of file diff --git a/setup.py b/setup.py index ba93bcbb5..37e4d7cba 100644 --- a/setup.py +++ b/setup.py @@ -1,13 +1,15 @@ """Setups the project.""" import itertools -import os.path -import sys +import re from setuptools import find_packages, setup -# Don't import gym module here, since deps may not be installed -sys.path.insert(0, os.path.join(os.path.dirname(__file__), "gym")) -from version import VERSION # noqa:E402 +with open("gym/version.py") as file: + full_version = file.read() + assert ( + re.match(r'VERSION = "\d\.\d+\.\d+"\n', full_version).group(0) == full_version + ), f"Unexpected version: {full_version}" + VERSION = re.search(r"\d\.\d+\.\d+", full_version).group(0) # Environment-specific dependencies. extras = { @@ -17,29 +19,20 @@ extras = { "classic_control": ["pygame==2.1.0"], "mujoco_py": ["mujoco_py<2.2,>=2.1"], "mujoco": ["mujoco==2.2.0", "imageio>=2.14.1"], - "toy_text": ["pygame==2.1.0", "scipy>=1.4.1"], + "toy_text": ["pygame==2.1.0"], "other": ["lz4>=3.1.0", "opencv-python>=3.0", "matplotlib>=3.0"], } -# Meta dependency groups. -nomujoco_blacklist = {"mujoco_py", "mujoco", "accept-rom-license", "atari"} -nomujoco_groups = set(extras.keys()) - nomujoco_blacklist - -extras["nomujoco"] = list( - itertools.chain.from_iterable(map(lambda group: extras[group], nomujoco_groups)) -) - -noatari_blacklist = {"accept-rom-license", "atari"} -noatari_groups = set(extras.keys()) - noatari_blacklist -extras["noatari"] = list( - itertools.chain.from_iterable(map(lambda group: extras[group], noatari_groups)) -) - -all_blacklist = {"accept-rom-license"} -all_groups = set(extras.keys()) - all_blacklist +# Testing dependency groups. +testing_group = set(extras.keys()) - {"accept-rom-license", "atari"} +extras["testing"] = list( + set(itertools.chain.from_iterable(map(lambda group: extras[group], testing_group))) +) + ["pytest", "mock"] +# All dependency groups - accept rom license as requires user to run +all_groups = set(extras.keys()) - {"accept-rom-license"} extras["all"] = list( - itertools.chain.from_iterable(map(lambda group: extras[group], all_groups)) + set(itertools.chain.from_iterable(map(lambda group: extras[group], all_groups))) ) # Uses the readme as the description on PyPI @@ -55,25 +48,31 @@ with open("README.md") as fh: break setup( - name="gym", - version=VERSION, - description="Gym: A universal API for reinforcement learning environments", - url="https://www.gymlibrary.ml/", author="Gym Community", author_email="jkterry@umd.edu", + classifiers=[ + # Python 3.6 is minimally supported (only with basic gym environments and API) + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.6", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + ], + description="Gym: A universal API for reinforcement learning environments", + extras_require=extras, + install_requires=[ + "numpy >= 1.18.0", + "cloudpickle >= 1.2.0", + "importlib_metadata >= 4.8.0; python_version < '3.10'", + "gym_notices >= 0.0.4", + "dataclasses == 0.8; python_version == '3.6'", + ], license="MIT", - packages=[package for package in find_packages() if package.startswith("gym")], - zip_safe=False, long_description=long_description, long_description_content_type="text/markdown", - install_requires=[ - "numpy>=1.18.0", - "cloudpickle>=1.2.0", - "importlib_metadata>=4.8.0; python_version < '3.10'", - "gym_notices>=0.0.4", - "dataclasses==0.8; python_version == '3.6'", - ], - extras_require=extras, + name="gym", + packages=[package for package in find_packages() if package.startswith("gym")], package_data={ "gym": [ "envs/mujoco/assets/*.xml", @@ -83,14 +82,9 @@ setup( "py.typed", ] }, - tests_require=["pytest", "mock"], python_requires=">=3.6", - classifiers=[ - "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.6", - "Programming Language :: Python :: 3.7", - "Programming Language :: Python :: 3.8", - "Programming Language :: Python :: 3.9", - "Programming Language :: Python :: 3.10", - ], + tests_require=extras["testing"], + url="https://www.gymlibrary.ml/", + version=VERSION, + zip_safe=False, ) diff --git a/test_requirements.txt b/test_requirements.txt index 9c7e6956d..acacae8a0 100644 --- a/test_requirements.txt +++ b/test_requirements.txt @@ -1,2 +1,10 @@ -lz4~=3.1 -pytest~=6.2 +box2d-py==2.3.5 +lz4>=3.1.0 +opencv-python>=3.0 +mujoco==2.2.0 +matplotlib>=3.0 +imageio>=2.14.1 +pygame==2.1.0 +mujoco_py<2.2,>=2.1 +pytest +mock