Skip to content

Commit 67f60bd

Browse files
committed
fix: remove deprecated distutils imports by local mode
1 parent d444b7b commit 67f60bd

File tree

5 files changed

+16
-10
lines changed

5 files changed

+16
-10
lines changed

src/sagemaker/local/image.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030
import tarfile
3131
import tempfile
3232

33-
from distutils.spawn import find_executable
3433
from threading import Thread
3534
from typing import Dict, List
3635
from six.moves.urllib.parse import urlparse
@@ -170,7 +169,7 @@ def _get_compose_cmd_prefix():
170169
compose_cmd_prefix.extend(["docker", "compose"])
171170
return compose_cmd_prefix
172171

173-
if find_executable("docker-compose") is not None:
172+
if shutil.which("docker-compose") is not None:
174173
logger.info("'Docker Compose' found using Docker Compose CLI.")
175174
compose_cmd_prefix.extend(["docker-compose"])
176175
return compose_cmd_prefix

src/sagemaker/local/utils.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import re
2222
import errno
2323

24-
from distutils.dir_util import copy_tree
2524
from six.moves.urllib.parse import urlparse
2625

2726
from sagemaker import s3
@@ -102,7 +101,7 @@ def move_to_destination(source, destination, job_name, sagemaker_session, prefix
102101

103102

104103
def recursive_copy(source, destination):
105-
"""A wrapper around distutils.dir_util.copy_tree.
104+
"""A wrapper around shutil.copy_tree.
106105
107106
This won't throw any exception when the source directory does not exist.
108107
@@ -111,7 +110,7 @@ def recursive_copy(source, destination):
111110
destination (str): destination path
112111
"""
113112
if os.path.isdir(source):
114-
copy_tree(source, destination)
113+
shutil.copytree(source, destination, dirs_exist_ok=True)
115114

116115

117116
def kill_child_processes(pid):

tests/unit/sagemaker/local/test_local_image.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ def test_get_compose_cmd_prefix_with_docker_cli():
160160
"subprocess.check_output",
161161
side_effect=subprocess.CalledProcessError(returncode=1, cmd="docker compose version"),
162162
)
163-
@patch("sagemaker.local.image.find_executable", Mock(return_value="/usr/bin/docker-compose"))
163+
@patch("sagemaker.local.image.shutil.which", Mock(return_value="/usr/bin/docker-compose"))
164164
def test_get_compose_cmd_prefix_with_docker_compose_cli(check_output):
165165
compose_cmd_prefix = _SageMakerContainer._get_compose_cmd_prefix()
166166
assert compose_cmd_prefix == ["docker-compose"]
@@ -170,7 +170,7 @@ def test_get_compose_cmd_prefix_with_docker_compose_cli(check_output):
170170
"subprocess.check_output",
171171
side_effect=subprocess.CalledProcessError(returncode=1, cmd="docker compose version"),
172172
)
173-
@patch("sagemaker.local.image.find_executable", Mock(return_value=None))
173+
@patch("sagemaker.local.image.shutil.which", Mock(return_value=None))
174174
def test_get_compose_cmd_prefix_raises_import_error(check_output):
175175
with pytest.raises(ImportError) as e:
176176
_SageMakerContainer._get_compose_cmd_prefix()

tests/unit/sagemaker/local/test_local_utils.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,11 +85,11 @@ def test_move_to_destination_illegal_destination():
8585

8686

8787
@patch("sagemaker.local.utils.os.path")
88-
@patch("sagemaker.local.utils.copy_tree")
88+
@patch("sagemaker.local.utils.shutil.copytree")
8989
def test_recursive_copy(copy_tree, m_os_path):
9090
m_os_path.isdir.return_value = True
9191
sagemaker.local.utils.recursive_copy("source", "destination")
92-
copy_tree.assert_called_with("source", "destination")
92+
copy_tree.assert_called_with("source", "destination", dirs_exist_ok=True)
9393

9494

9595
@patch("sagemaker.local.utils.os")

tests/unit/test_chainer.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,15 @@ def test_additional_hyperparameters(sagemaker_session, chainer_version, chainer_
174174
framework_version=chainer_version,
175175
py_version=chainer_py_version,
176176
)
177-
assert bool(strtobool(chainer.hyperparameters()["sagemaker_use_mpi"]))
177+
178+
assert chainer.hyperparameters()["sagemaker_use_mpi"].lower() in (
179+
"y",
180+
"yes",
181+
"t",
182+
"true",
183+
"on",
184+
"1",
185+
)
178186
assert int(chainer.hyperparameters()["sagemaker_num_processes"]) == 4
179187
assert int(chainer.hyperparameters()["sagemaker_process_slots_per_host"]) == 10
180188
assert (

0 commit comments

Comments
 (0)