From 586c65961f8154619ebec3a54dd69060e2e4395d Mon Sep 17 00:00:00 2001 From: YunLiu <55491388+KumoLiu@users.noreply.github.com> Date: Fri, 28 Jun 2024 00:21:51 +0800 Subject: [PATCH] Fix 'load_module()' deprecated in Python 3.12 (#7881) Fixes #7880 ### Description use `exec_module` instead. ### Types of changes <!--- Put an `x` in all the boxes that apply, and remove the not applicable items --> - [x] Non-breaking change (fix or new feature that would not break existing functionality). - [ ] Breaking change (fix or new feature that would cause existing functionality to change). - [ ] New tests added to cover the changes. - [ ] Integration tests passed locally by running `./runtests.sh -f -u --net --coverage`. - [ ] Quick tests passed locally by running `./runtests.sh --quick --unittests --disttests`. - [ ] In-line docstrings updated. - [ ] Documentation updated, tested `make html` command in the `docs/` folder. --------- Signed-off-by: YunLiu <55491388+KumoLiu@users.noreply.github.com> --- monai/utils/module.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/monai/utils/module.py b/monai/utils/module.py index 6f301d8067..4d28f8d986 100644 --- a/monai/utils/module.py +++ b/monai/utils/module.py @@ -13,6 +13,7 @@ import enum import functools +import importlib.util import os import pdb import re @@ -208,9 +209,11 @@ def load_submodules( ): if (is_pkg or load_all) and name not in sys.modules and match(exclude_pattern, name) is None: try: - mod = import_module(name) - importer.find_spec(name).loader.load_module(name) # type: ignore - submodules.append(mod) + mod_spec = importer.find_spec(name) # type: ignore + if mod_spec and mod_spec.loader: + mod = importlib.util.module_from_spec(mod_spec) + mod_spec.loader.exec_module(mod) + submodules.append(mod) except OptionalImportError: pass # could not import the optional deps., they are ignored except ImportError as e: