diff --git a/.travis.yml b/.travis.yml index 345427e36..c7d4b3a24 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,11 +5,11 @@ dist: xenial matrix: include: - os: linux - env: BAZEL_PYTHON_VERSION=PY3 PYTHON=3.5 PYTHONWARNINGS=ignore + env: PYTHON=3.5 PYTHONWARNINGS=ignore - os: osx osx_image: xcode7 - env: BAZEL_PYTHON_VERSION=PY3 PYTHON=3.5 PYTHONWARNINGS=ignore + env: PYTHON=3.5 PYTHONWARNINGS=ignore - os: linux env: @@ -32,7 +32,6 @@ matrix: - TESTSUITE=streaming - JDK='Oracle JDK 8' - RAY_INSTALL_JAVA=1 - - BAZEL_PYTHON_VERSION=PY3 - PYTHON=3.5 PYTHONWARNINGS=ignore install: - python $TRAVIS_BUILD_DIR/ci/travis/determine_tests_to_run.py @@ -143,16 +142,14 @@ script: - ./ci/suppress_output bazel test --build_tests_only --show_progress_rate_limit=100 --test_output=errors //:all # ray serve tests - - if [ $RAY_CI_SERVE_AFFECTED == "1" ]; then python -c 'import sys;exit(sys.version_info>=(3,5))' || python -m pytest -v --durations=5 --timeout=300 python/ray/experimental/serve/tests; fi - - if [ $RAY_CI_SERVE_AFFECTED == "1" ]; then python -c 'import sys;exit(sys.version_info>=(3,5))' || ./ci/suppress_output python python/ray/experimental/serve/examples/echo_full.py; fi + - if [ $RAY_CI_SERVE_AFFECTED == "1" ]; then python -m pytest -v --durations=5 --timeout=300 python/ray/experimental/serve/tests; fi + - if [ $RAY_CI_SERVE_AFFECTED == "1" ]; then ./ci/suppress_output python python/ray/experimental/serve/examples/echo_full.py; fi # ray tests - # Python3.5+ only. Otherwise we will get `SyntaxError` regardless of how we set the tester. - - if [ $RAY_CI_PYTHON_AFFECTED == "1" ]; then python -c 'import sys;exit(sys.version_info>=(3,5))' || RAY_FORCE_DIRECT=0 python -m pytest -v --durations=5 --timeout=300 python/ray/experimental/test/async_test.py; fi - - if [ $RAY_CI_PYTHON_AFFECTED == "1" ]; then python -c 'import sys;exit(sys.version_info>=(3,5))' || RAY_FORCE_DIRECT=0 python -m pytest -v --durations=5 --timeout=300 python/ray/tests/py3_test.py; fi + - if [ $RAY_CI_PYTHON_AFFECTED == "1" ]; then RAY_FORCE_DIRECT=0 python -m pytest -v --durations=5 --timeout=300 python/ray/experimental/test/async_test.py; fi + - if [ $RAY_CI_PYTHON_AFFECTED == "1" ]; then RAY_FORCE_DIRECT=0 python -m pytest -v --durations=5 --timeout=300 python/ray/tests/py3_test.py; fi - # py bazel tests, run using local strategy since PY2 breaks with sandbox - - ./ci/keep_alive bazel test --spawn_strategy=local --flaky_test_attempts=3 --python_version=$BAZEL_PYTHON_VERSION --nocache_test_results --test_verbose_timeout_warnings --incompatible_allow_python_version_transitions=false --incompatible_py3_is_default=false --progress_report_interval=100 --show_progress_rate_limit=100 --show_timestamps --test_output=errors --test_tag_filters=-jenkins_only python/ray/... + - ./ci/keep_alive bazel test --spawn_strategy=local --flaky_test_attempts=3 --nocache_test_results --test_verbose_timeout_warnings --progress_report_interval=100 --show_progress_rate_limit=100 --show_timestamps --test_output=errors --test_tag_filters=-jenkins_only python/ray/... deploy: - provider: s3 diff --git a/python/ray/experimental/serve/__init__.py b/python/ray/experimental/serve/__init__.py index 4d86ca222..e4af4c373 100644 --- a/python/ray/experimental/serve/__init__.py +++ b/python/ray/experimental/serve/__init__.py @@ -1,12 +1,9 @@ -import sys from ray.experimental.serve.backend_config import BackendConfig from ray.experimental.serve.policy import RoutePolicy -if sys.version_info < (3, 0): - raise ImportError("serve is Python 3 only.") - from ray.experimental.serve.api import ( init, create_backend, create_endpoint, link, split, get_handle, stat, set_backend_config, get_backend_config, accept_batch) # noqa: E402 + __all__ = [ "init", "create_backend", "create_endpoint", "link", "split", "get_handle", "stat", "set_backend_config", "get_backend_config", "BackendConfig", diff --git a/python/ray/experimental/sgd/tests/test_pytorch_runner.py b/python/ray/experimental/sgd/tests/test_pytorch_runner.py index e41474b40..13c5ee550 100644 --- a/python/ray/experimental/sgd/tests/test_pytorch_runner.py +++ b/python/ray/experimental/sgd/tests/test_pytorch_runner.py @@ -3,18 +3,13 @@ from __future__ import division from __future__ import print_function import numpy as np -import sys import torch import torch.nn as nn import unittest +from unittest.mock import MagicMock from ray.experimental.sgd.pytorch.pytorch_runner import PyTorchRunner -if sys.version_info >= (3, 3): - from unittest.mock import MagicMock -else: - from mock import MagicMock - class LinearDataset(torch.utils.data.Dataset): """y = a * x + b""" diff --git a/python/ray/function_manager.py b/python/ray/function_manager.py index eecda0d8c..bd9b2bf8c 100644 --- a/python/ray/function_manager.py +++ b/python/ray/function_manager.py @@ -326,17 +326,14 @@ class FunctionActorManager(object): unnecessarily or fail to give warnings, but the application's behavior won't change. """ - if sys.version_info[0] >= 3: - import io - string_file = io.StringIO() - if sys.version_info[1] >= 7: - dis.dis(function_or_class, file=string_file, depth=2) - else: - dis.dis(function_or_class, file=string_file) - collision_identifier = ( - function_or_class.__name__ + ":" + string_file.getvalue()) + import io + string_file = io.StringIO() + if sys.version_info[1] >= 7: + dis.dis(function_or_class, file=string_file, depth=2) else: - collision_identifier = function_or_class.__name__ + dis.dis(function_or_class, file=string_file) + collision_identifier = ( + function_or_class.__name__ + ":" + string_file.getvalue()) # Return a hash of the identifier in case it is too large. return hashlib.sha1(collision_identifier.encode("ascii")).digest() diff --git a/python/ray/node.py b/python/ray/node.py index 0c17ef8f1..811709048 100644 --- a/python/ray/node.py +++ b/python/ray/node.py @@ -27,7 +27,6 @@ from ray.utils import try_to_create_directory, try_to_symlink # using logging.basicConfig in its entry/init points. logger = logging.getLogger(__name__) -PY3 = sys.version_info.major >= 3 SESSION_LATEST = "session_latest" @@ -599,12 +598,10 @@ class Node(object): self.start_redis() self.start_monitor() self.start_raylet_monitor() - # The dashboard is Python3.x only. - if PY3: - if self._ray_params.include_webui: - self.start_dashboard(require_webui=True) - elif self._ray_params.include_webui is None: - self.start_dashboard(require_webui=False) + if self._ray_params.include_webui: + self.start_dashboard(require_webui=True) + elif self._ray_params.include_webui is None: + self.start_dashboard(require_webui=False) def start_ray_processes(self): """Start all of the processes on the node.""" @@ -614,8 +611,7 @@ class Node(object): self.start_plasma_store() self.start_raylet() - if PY3: - self.start_reporter() + self.start_reporter() if self._ray_params.include_log_monitor: self.start_log_monitor() @@ -755,10 +751,8 @@ class Node(object): check_alive (bool): Raise an exception if the process was already dead. """ - # reporter is started only in PY3. - if PY3: - self._kill_process_type( - ray_constants.PROCESS_TYPE_REPORTER, check_alive=check_alive) + self._kill_process_type( + ray_constants.PROCESS_TYPE_REPORTER, check_alive=check_alive) def kill_dashboard(self, check_alive=True): """Kill the dashboard. diff --git a/python/ray/services.py b/python/ray/services.py index ccb134d5f..b85354919 100644 --- a/python/ray/services.py +++ b/python/ray/services.py @@ -446,9 +446,7 @@ def start_ray_process(command, # in interactive sessions. This is only supported in Python 3.3 and above. def block_sigint(): import signal - import sys - if sys.version_info >= (3, 3): - signal.pthread_sigmask(signal.SIG_BLOCK, {signal.SIGINT}) + signal.pthread_sigmask(signal.SIG_BLOCK, {signal.SIGINT}) process = subprocess.Popen( command, @@ -1068,9 +1066,6 @@ def start_dashboard(require_webui, if redis_password: command += ["--redis-password", redis_password] - if sys.version_info <= (3, 0): - return None, None - webui_dependencies_present = True try: import aiohttp # noqa: F401 diff --git a/python/ray/tests/test_actor.py b/python/ray/tests/test_actor.py index a79dd9f9a..77a9b900f 100644 --- a/python/ray/tests/test_actor.py +++ b/python/ray/tests/test_actor.py @@ -38,16 +38,6 @@ def test_actor_init_error_propagated(ray_start_regular): ray.get(actor.foo.remote()) -@pytest.mark.skipif( - sys.version_info >= (3, 0), reason="This test requires Python 2.") -def test_old_style_error(ray_start_regular): - with pytest.raises(TypeError): - - @ray.remote - class Actor: - pass - - def test_keyword_args(ray_start_regular): @ray.remote class Actor(object): @@ -189,8 +179,6 @@ def test_custom_classes(ray_start_regular): assert results2[2].x == 3 -@pytest.mark.skipif( - sys.version_info < (3, 0), reason="This test requires Python 3.") def test_actor_class_attributes(ray_start_regular): class Grandparent(object): GRANDPARENT = 2 @@ -423,8 +411,6 @@ def test_actor_deletion(ray_start_regular): [ray.test_utils.wait_for_pid_to_exit(pid) for pid in pids] -@pytest.mark.skipif( - sys.version_info < (3, 0), reason="This test requires Python 3.") def test_actor_method_deletion(ray_start_regular): @ray.remote class Actor(object): @@ -1497,5 +1483,4 @@ def test_actor_creation_task_crash(ray_start_regular): if __name__ == "__main__": import pytest - import sys sys.exit(pytest.main(["-v", __file__])) diff --git a/python/ray/tests/test_actor_resources.py b/python/ray/tests/test_actor_resources.py index f19d265c2..2ea3bac8a 100644 --- a/python/ray/tests/test_actor_resources.py +++ b/python/ray/tests/test_actor_resources.py @@ -403,8 +403,6 @@ def test_actor_multiple_gpus_from_multiple_tasks(ray_start_cluster): assert ready_ids == [] -@pytest.mark.skipif( - sys.version_info < (3, 0), reason="This test requires Python 3.") def test_actors_and_tasks_with_gpus(ray_start_cluster): cluster = ray_start_cluster num_nodes = 3 @@ -638,9 +636,6 @@ def test_blocking_actor_task(shutdown_only): assert remaining_ids == [x_id] -@pytest.mark.skipif( - sys.version_info < (3, 0), - reason="This test is currently failing on Python 2.7.") def test_lifetime_and_transient_resources(ray_start_regular): # This actor acquires resources only when running methods. @ray.remote @@ -743,5 +738,4 @@ def test_creating_more_actors_than_resources(shutdown_only): if __name__ == "__main__": import pytest - import sys sys.exit(pytest.main(["-v", __file__])) diff --git a/python/ray/tests/test_advanced_3.py b/python/ray/tests/test_advanced_3.py index 6db1e96d1..52089844c 100644 --- a/python/ray/tests/test_advanced_3.py +++ b/python/ray/tests/test_advanced_3.py @@ -272,14 +272,9 @@ class CaptureOutputAndError(object): """ def __init__(self, captured_output_and_error): - if sys.version_info >= (3, 0): - import io - self.output_buffer = io.StringIO() - self.error_buffer = io.StringIO() - else: - import cStringIO - self.output_buffer = cStringIO.StringIO() - self.error_buffer = cStringIO.StringIO() + import io + self.output_buffer = io.StringIO() + self.error_buffer = io.StringIO() self.captured_output_and_error = captured_output_and_error def __enter__(self): diff --git a/python/ray/tests/test_array.py b/python/ray/tests/test_array.py index 688b2a878..d50d394d7 100644 --- a/python/ray/tests/test_array.py +++ b/python/ray/tests/test_array.py @@ -2,6 +2,7 @@ from __future__ import absolute_import from __future__ import division from __future__ import print_function +from importlib import reload import numpy as np from numpy.testing import assert_equal, assert_almost_equal import pytest @@ -12,9 +13,6 @@ import ray.experimental.array.remote as ra import ray.experimental.array.distributed as da import ray.cluster_utils -if sys.version_info >= (3, 0): - from importlib import reload - @pytest.fixture def reload_modules(): @@ -220,5 +218,4 @@ def test_distributed_array_methods(ray_start_cluster_2_nodes, reload_modules): if __name__ == "__main__": import pytest - import sys sys.exit(pytest.main(["-v", __file__])) diff --git a/python/ray/tests/test_basic.py b/python/ray/tests/test_basic.py index 8130f37df..3eac6047a 100644 --- a/python/ray/tests/test_basic.py +++ b/python/ray/tests/test_basic.py @@ -63,9 +63,6 @@ def test_simple_serialization(ray_start_regular): np.float64(1.9), ] - if sys.version_info < (3, 0): - primitive_objects.append(long(0)) # noqa: E501,F821 - composite_objects = ( [[obj] for obj in primitive_objects] + [(obj, ) @@ -185,17 +182,7 @@ def complex_serialization(use_pickle): assert obj1 == obj2, "Objects {} and {} are different.".format( obj1, obj2) - if sys.version_info >= (3, 0): - long_extras = [0, np.array([["hi", u"hi"], [1.3, 1]])] - else: - - long_extras = [ - long(0), # noqa: E501,F821 - np.array([ - ["hi", u"hi"], - [1.3, long(1)] # noqa: E501,F821 - ]) - ] + long_extras = [0, np.array([["hi", u"hi"], [1.3, 1]])] PRIMITIVE_OBJECTS = [ 0, 0.0, 0.9, 1 << 62, 1 << 100, 1 << 999, [1 << 100, [1 << 100]], "a", @@ -810,8 +797,6 @@ def test_keyword_args(ray_start_regular): assert ray.get(f3.remote(4)) == 4 -@pytest.mark.skipif( - sys.version_info < (3, 0), reason="This test requires Python 3.") @pytest.mark.parametrize( "ray_start_regular", [{ "local_mode": True @@ -847,8 +832,6 @@ def test_args_starkwargs(ray_start_regular): ray.get(remote_test_function.remote(local_method, actor_method)) -@pytest.mark.skipif( - sys.version_info < (3, 0), reason="This test requires Python 3.") @pytest.mark.parametrize( "ray_start_regular", [{ "local_mode": True @@ -890,8 +873,6 @@ def test_args_named_and_star(ray_start_regular): ray.get(remote_test_function.remote(local_method, actor_method)) -@pytest.mark.skipif( - sys.version_info < (3, 0), reason="This test requires Python 3.") @pytest.mark.parametrize( "ray_start_regular", [{ "local_mode": True @@ -1655,5 +1636,4 @@ def test_wait(ray_start_regular): if __name__ == "__main__": import pytest - import sys sys.exit(pytest.main(["-v", __file__])) diff --git a/python/ray/tests/test_debug_tools.py b/python/ray/tests/test_debug_tools.py index 45a694627..44a0cc7ae 100644 --- a/python/ray/tests/test_debug_tools.py +++ b/python/ray/tests/test_debug_tools.py @@ -51,7 +51,6 @@ def test_raylet_gdb(ray_gdb_start): if __name__ == "__main__": import pytest - import sys # Make subprocess happy in bazel. os.environ["LC_ALL"] = "en_US.UTF-8" os.environ["LANG"] = "en_US.UTF-8" diff --git a/python/ray/tests/test_failure.py b/python/ray/tests/test_failure.py index b74b67f00..680d27ed8 100644 --- a/python/ray/tests/test_failure.py +++ b/python/ray/tests/test_failure.py @@ -644,8 +644,6 @@ def test_warning_for_too_many_nested_tasks(shutdown_only): wait_for_errors(ray_constants.WORKER_POOL_LARGE_ERROR, 1) -@pytest.mark.skipif( - sys.version_info < (3, 0), reason="This test requires Python 3.") def test_warning_for_many_duplicate_remote_functions_and_actors(shutdown_only): ray.init(num_cpus=1) diff --git a/python/ray/tests/test_projects.py b/python/ray/tests/test_projects.py index 0b836e594..7816aa964 100644 --- a/python/ray/tests/test_projects.py +++ b/python/ray/tests/test_projects.py @@ -9,17 +9,13 @@ import subprocess import yaml from click.testing import CliRunner import sys +from unittest.mock import patch, DEFAULT from contextlib import contextmanager from ray.projects.scripts import session_start, session_execute import ray -if sys.version_info >= (3, 3): - from unittest.mock import patch, DEFAULT -else: - from mock import patch, DEFAULT - TEST_DIR = os.path.join( os.path.dirname(os.path.abspath(__file__)), "project_files") @@ -240,7 +236,6 @@ def test_session_create_multiple(): if __name__ == "__main__": - import sys # Make subprocess happy in bazel. os.environ["LC_ALL"] = "en_US.UTF-8" os.environ["LANG"] = "en_US.UTF-8" diff --git a/python/ray/tests/test_stress_failure.py b/python/ray/tests/test_stress_failure.py index 2b8ab89e5..1e5009dd0 100644 --- a/python/ray/tests/test_stress_failure.py +++ b/python/ray/tests/test_stress_failure.py @@ -299,8 +299,6 @@ def test_nondeterministic_task(ray_start_reconstruction): @pytest.mark.skipif( os.environ.get("RAY_USE_NEW_GCS") == "on", reason="Failing with new GCS API on Linux.") -@pytest.mark.skipif( - sys.version_info < (3, 0), reason="This test requires Python 3.") @pytest.mark.parametrize( "ray_start_object_store_memory", [10**9], indirect=True) def test_driver_put_errors(ray_start_object_store_memory): @@ -375,5 +373,4 @@ def test_driver_put_errors(ray_start_object_store_memory): if __name__ == "__main__": import pytest - import sys sys.exit(pytest.main(["-v", __file__])) diff --git a/python/ray/tune/function_runner.py b/python/ray/tune/function_runner.py index 9a8218796..6787ad6cf 100644 --- a/python/ray/tune/function_runner.py +++ b/python/ray/tune/function_runner.py @@ -7,7 +7,6 @@ import time import inspect import threading import traceback -import sys from six.moves import queue from ray.tune import track @@ -249,10 +248,7 @@ def wrap_function(train_func): use_track = False try: - if sys.version_info >= (3, 3): - func_args = inspect.getfullargspec(train_func).args - else: - func_args = inspect.getargspec(train_func).args + func_args = inspect.getfullargspec(train_func).args use_track = ("reporter" not in func_args and len(func_args) == 1) if use_track: logger.info("tune.track signature detected.") diff --git a/python/ray/tune/tests/test_checkpoint_manager.py b/python/ray/tune/tests/test_checkpoint_manager.py index 9211607b8..312aca3dc 100644 --- a/python/ray/tune/tests/test_checkpoint_manager.py +++ b/python/ray/tune/tests/test_checkpoint_manager.py @@ -6,14 +6,10 @@ from __future__ import print_function import random import sys import unittest +from unittest.mock import patch from ray.tune.checkpoint_manager import Checkpoint, CheckpointManager, logger -if sys.version_info >= (3, 3): - from unittest.mock import patch -else: - from mock import patch - class CheckpointManagerTest(unittest.TestCase): @staticmethod @@ -108,5 +104,4 @@ class CheckpointManagerTest(unittest.TestCase): if __name__ == "__main__": import pytest - import sys sys.exit(pytest.main(["-v", __file__])) diff --git a/python/ray/tune/tests/test_cluster.py b/python/ray/tune/tests/test_cluster.py index ebfd96e91..aa6b9c8e1 100644 --- a/python/ray/tune/tests/test_cluster.py +++ b/python/ray/tune/tests/test_cluster.py @@ -9,6 +9,7 @@ import os import pytest import shutil import sys +from unittest.mock import MagicMock import ray from ray import tune @@ -23,11 +24,6 @@ from ray.tune.resources import Resources from ray.tune.trial_runner import TrialRunner from ray.tune.suggest import BasicVariantGenerator -if sys.version_info >= (3, 3): - from unittest.mock import MagicMock -else: - from mock import MagicMock - def _start_new_cluster(): cluster = Cluster( @@ -599,5 +595,4 @@ tune.run( if __name__ == "__main__": import pytest - import sys sys.exit(pytest.main(["-v", __file__])) diff --git a/python/ray/tune/tests/test_progress_reporter.py b/python/ray/tune/tests/test_progress_reporter.py index c8407ae5f..210cf0d37 100644 --- a/python/ray/tune/tests/test_progress_reporter.py +++ b/python/ray/tune/tests/test_progress_reporter.py @@ -3,18 +3,13 @@ from __future__ import division from __future__ import print_function import collections -import sys import time import unittest +from unittest.mock import MagicMock from ray.tune.trial import Trial from ray.tune.progress_reporter import _fair_filter_trials -if sys.version_info >= (3, 3): - from unittest.mock import MagicMock -else: - from mock import MagicMock - class ProgressReporterTest(unittest.TestCase): def mock_trial(self, status, start_time): diff --git a/python/ray/tune/tests/test_ray_trial_executor.py b/python/ray/tune/tests/test_ray_trial_executor.py index fa12d7ddf..f3c7223e9 100644 --- a/python/ray/tune/tests/test_ray_trial_executor.py +++ b/python/ray/tune/tests/test_ray_trial_executor.py @@ -6,6 +6,7 @@ from __future__ import print_function import json import sys import unittest +from unittest.mock import patch import ray from ray.exceptions import RayTimeoutError @@ -18,11 +19,6 @@ from ray.tune.trial import Trial, Checkpoint from ray.tune.resources import Resources from ray.cluster_utils import Cluster -if sys.version_info >= (3, 3): - from unittest.mock import patch -else: - from mock import patch - class RayTrialExecutorTest(unittest.TestCase): def setUp(self): @@ -220,5 +216,4 @@ class LocalModeExecutorTest(RayTrialExecutorTest): if __name__ == "__main__": import pytest - import sys sys.exit(pytest.main(["-v", __file__])) diff --git a/python/ray/tune/tests/test_sync.py b/python/ray/tune/tests/test_sync.py index 85c36470b..25609a3d6 100644 --- a/python/ray/tune/tests/test_sync.py +++ b/python/ray/tune/tests/test_sync.py @@ -8,6 +8,7 @@ import shutil import sys import tempfile import unittest +from unittest.mock import patch import ray from ray.rllib import _register_all @@ -16,11 +17,6 @@ from ray import tune from ray.tune import TuneError from ray.tune.syncer import CommandBasedClient -if sys.version_info >= (3, 3): - from unittest.mock import patch -else: - from mock import patch - class TestSyncFunctionality(unittest.TestCase): def setUp(self): @@ -214,5 +210,4 @@ class TestSyncFunctionality(unittest.TestCase): if __name__ == "__main__": import pytest - import sys sys.exit(pytest.main(["-v", __file__])) diff --git a/python/ray/tune/tests/test_trial_runner_2.py b/python/ray/tune/tests/test_trial_runner_2.py index a782e19a9..60ea44301 100644 --- a/python/ray/tune/tests/test_trial_runner_2.py +++ b/python/ray/tune/tests/test_trial_runner_2.py @@ -5,6 +5,7 @@ from __future__ import print_function import os import sys import unittest +from unittest.mock import patch import ray from ray.rllib import _register_all @@ -18,11 +19,6 @@ from ray.tune.trial_runner import TrialRunner from ray.tune.resources import Resources from ray.tune.suggest import BasicVariantGenerator -if sys.version_info >= (3, 3): - from unittest.mock import patch -else: - from mock import patch - def create_mock_components(): class _MockScheduler(FIFOScheduler): @@ -330,5 +326,4 @@ class TrialRunnerTest2(unittest.TestCase): if __name__ == "__main__": import pytest - import sys sys.exit(pytest.main(["-v", __file__])) diff --git a/python/ray/tune/tests/test_trial_scheduler.py b/python/ray/tune/tests/test_trial_scheduler.py index 245f0b585..863b8b588 100644 --- a/python/ray/tune/tests/test_trial_scheduler.py +++ b/python/ray/tune/tests/test_trial_scheduler.py @@ -10,8 +10,9 @@ import numpy as np import sys import tempfile import shutil -import ray +from unittest.mock import MagicMock +import ray from ray.tune.result import TRAINING_ITERATION from ray.tune.schedulers import (HyperBandScheduler, AsyncHyperBandScheduler, PopulationBasedTraining, MedianStoppingRule, @@ -25,11 +26,6 @@ from ray.tune.resources import Resources from ray.rllib import _register_all _register_all() -if sys.version_info >= (3, 3): - from unittest.mock import MagicMock -else: - from mock import MagicMock - def result(t, rew): return dict( @@ -1195,5 +1191,4 @@ class AsyncHyperBandSuite(unittest.TestCase): if __name__ == "__main__": import pytest - import sys sys.exit(pytest.main(["-v", __file__])) diff --git a/python/ray/tune/web_server.py b/python/ray/tune/web_server.py index af1acae94..b7e8783f2 100644 --- a/python/ray/tune/web_server.py +++ b/python/ray/tune/web_server.py @@ -4,22 +4,16 @@ from __future__ import print_function import json import logging -import sys import threading +from urllib.parse import urljoin, urlparse +from http.server import SimpleHTTPRequestHandler, HTTPServer + import ray.cloudpickle as cloudpickle from ray.tune import TuneError from ray.tune.suggest import BasicVariantGenerator from ray.utils import binary_to_hex, hex_to_binary -if sys.version_info[0] == 2: - from urlparse import urljoin, urlparse - from SimpleHTTPServer import SimpleHTTPRequestHandler - from SocketServer import TCPServer as HTTPServer -elif sys.version_info[0] == 3: - from urllib.parse import urljoin, urlparse - from http.server import SimpleHTTPRequestHandler, HTTPServer - logger = logging.getLogger(__name__) try: diff --git a/python/ray/worker.py b/python/ray/worker.py index bffffe8b5..13a2593a7 100644 --- a/python/ray/worker.py +++ b/python/ray/worker.py @@ -61,8 +61,6 @@ LOCAL_MODE = 2 ERROR_KEY_PREFIX = b"Error:" -PY3 = sys.version_info.major >= 3 - # Logger for this module. It should be configured at the entry point # into the program using Ray. Ray provides a default configuration at # entry/init points. @@ -1456,7 +1454,7 @@ def get(object_ids, timeout=None): worker = global_worker worker.check_connected() - if PY3 and hasattr( + if hasattr( worker, "core_worker") and worker.core_worker.current_actor_is_asyncio(): raise RayError("Using blocking ray.get inside async actor. " @@ -1575,7 +1573,7 @@ def wait(object_ids, num_returns=1, timeout=None): """ worker = global_worker - if PY3 and hasattr( + if hasattr( worker, "core_worker") and worker.core_worker.current_actor_is_asyncio(): raise RayError("Using blocking ray.wait inside async method. " diff --git a/rllib/__init__.py b/rllib/__init__.py index 6a0e8c684..de15d530a 100644 --- a/rllib/__init__.py +++ b/rllib/__init__.py @@ -3,7 +3,6 @@ from __future__ import division from __future__ import print_function import logging -import sys # Note: do not introduce unnecessary library dependencies here, e.g. gym. # This file is imported from the tune module in order to register RLlib agents. @@ -31,11 +30,6 @@ def _setup_logger(): logger.addHandler(handler) logger.propagate = False - if sys.version_info[0] < 3: - logger.warning( - "RLlib Python 2 support is deprecated, and will be removed " - "in a future release.") - def _register_all(): from ray.rllib.agents.trainer import Trainer, with_common_config diff --git a/rllib/utils/policy_server.py b/rllib/utils/policy_server.py index ad8da0bf4..fe359ca8d 100644 --- a/rllib/utils/policy_server.py +++ b/rllib/utils/policy_server.py @@ -3,20 +3,14 @@ from __future__ import division from __future__ import print_function import pickle -import sys import traceback +from http.server import SimpleHTTPRequestHandler, HTTPServer +from socketserver import ThreadingMixIn + from ray.rllib.utils.annotations import PublicAPI from ray.rllib.utils.policy_client import PolicyClient -if sys.version_info[0] == 2: - from SimpleHTTPServer import SimpleHTTPRequestHandler - from SocketServer import TCPServer as HTTPServer - from SocketServer import ThreadingMixIn -elif sys.version_info[0] == 3: - from http.server import SimpleHTTPRequestHandler, HTTPServer - from socketserver import ThreadingMixIn - @PublicAPI class PolicyServer(ThreadingMixIn, HTTPServer):