From 39c1bd512dfd1f8e51cb07ccd8d48a02a256347c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Mollier?= Date: Wed, 16 Oct 2024 13:38:35 +0200 Subject: [PATCH] Replace imports of distutils. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit As reported in [Debian bug #1083070], the Python module distutils is going to be removed entirely from the upcoming Debian release, following the deprecation on Python side of the distutils module. Removal of distutils is causing test failures in bmtk though: Traceback: /usr/lib/python3.12/importlib/__init__.py:90: in import_module return _bootstrap._gcd_import(name[level:], package, level) tests/simulator/filternet/test_filternet_movies.py:5: in from bmtk.utils.sim_setup import build_env_filternet /usr/lib/python3/dist-packages/bmtk/utils/sim_setup.py:32: in from distutils.dir_util import copy_tree E ModuleNotFoundError: No module named 'distutils' These changes replace copy_tree invocations by shutil.copytree, with the option to clobber existing directories by default, as otherwise the refusal of erasing the target directory will cause other test regressions. The version sort invocation perusing LooseVersion is replaced by invocations of the bare packaging.version.Version. [Debian bug #1083070]: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1083070 Signed-off-by: Étienne Mollier --- bmtk/analyzer/spikes_analyzer.py | 4 ++-- bmtk/utils/compile_mechanisms/compile_mechanisms.py | 4 ++-- bmtk/utils/create_environment/env_builder.py | 4 ++-- bmtk/utils/sim_setup.py | 6 +++--- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/bmtk/analyzer/spikes_analyzer.py b/bmtk/analyzer/spikes_analyzer.py index af77187a6..f03778f9d 100644 --- a/bmtk/analyzer/spikes_analyzer.py +++ b/bmtk/analyzer/spikes_analyzer.py @@ -24,8 +24,8 @@ import numpy as np try: - from distutils.version import LooseVersion - use_sort_values = LooseVersion(pd.__version__) >= LooseVersion('0.19.0') + from packaging.version import Version + use_sort_values = Version(pd.__version__) >= Version('0.19.0') except: use_sort_values = False diff --git a/bmtk/utils/compile_mechanisms/compile_mechanisms.py b/bmtk/utils/compile_mechanisms/compile_mechanisms.py index c8b72f890..25951054f 100644 --- a/bmtk/utils/compile_mechanisms/compile_mechanisms.py +++ b/bmtk/utils/compile_mechanisms/compile_mechanisms.py @@ -1,7 +1,7 @@ import os import logging from subprocess import call -from distutils.dir_util import copy_tree +from shutil import copytree logger = logging.getLogger(__name__) @@ -28,4 +28,4 @@ def copy_modfiles(mechanisms_dir, cached_dir=None): cached_dir = os.path.join(local_path, '..', 'scripts/bionet/mechanisms') logger.info('Copying mod files from {} to {}'.format(cached_dir, mechanisms_dir)) - copy_tree(cached_dir, mechanisms_dir) + copytree(cached_dir, mechanisms_dir, dirs_exist_ok=True) diff --git a/bmtk/utils/create_environment/env_builder.py b/bmtk/utils/create_environment/env_builder.py index 8705de731..c7194d1be 100644 --- a/bmtk/utils/create_environment/env_builder.py +++ b/bmtk/utils/create_environment/env_builder.py @@ -27,7 +27,7 @@ from subprocess import call from collections import OrderedDict import logging -from distutils.dir_util import copy_tree +from shutil import copytree from bmtk.utils.compile_mechanisms import copy_modfiles, compile_mechanisms @@ -270,7 +270,7 @@ def _create_components_dir(self, components_dir, with_examples=True): if with_examples: logger.info(' Copying files from {}.'.format(src_dir)) - copy_tree(src_dir, trg_dir) + copytree(src_dir, trg_dir, dirs_exist_ok=True) # return components_config self._circuit_config['components'] = components_config diff --git a/bmtk/utils/sim_setup.py b/bmtk/utils/sim_setup.py index 3bd061efd..6fe97142f 100644 --- a/bmtk/utils/sim_setup.py +++ b/bmtk/utils/sim_setup.py @@ -29,7 +29,7 @@ from optparse import OptionParser from collections import OrderedDict import logging -from distutils.dir_util import copy_tree +from shutil import copytree logger = logging.getLogger(__name__) @@ -248,7 +248,7 @@ def _create_components_dir(self, components_dir, with_examples=True): if with_examples: logger.info(' Copying files from {}.'.format(src_dir)) - copy_tree(src_dir, trg_dir) + copytree(src_dir, trg_dir, dirs_exist_ok=True) # return components_config self._circuit_config['components'] = components_config @@ -852,4 +852,4 @@ def membrane_report_parser(option, opt, value, parser): elif target_sim == 'filternet': build_env_filternet(base_dir=base_dir, network_dir=options.network_dir, tstop=options.tstop, include_examples=options.include_examples, - config_file=options.config_file) \ No newline at end of file + config_file=options.config_file)