diff --git a/mmengine/config/config.py b/mmengine/config/config.py index f9925dd70406c0d9a140461877983cd11abc75f4..71d1bf68f60719ab5239657888c6ab44de4d5e0d 100644 --- a/mmengine/config/config.py +++ b/mmengine/config/config.py @@ -5,6 +5,7 @@ import os import os.path as osp import platform import shutil +import sys import tempfile import types import uuid @@ -180,7 +181,15 @@ class Config: try: import_modules_from_strings(**cfg_dict['custom_imports']) except ImportError as e: - raise ImportError('Failed to custom import!') from e + err_msg = ( + 'Failed to import custom modules from ' + f"{cfg_dict['custom_imports']}, the current sys.path is: ") + for p in sys.path: + err_msg += f'\n {p}' + err_msg += ( + '\nYou should set `PYTHONPATH` to make `sys.path` include ' + 'the directory which contains your custom module') + raise ImportError(err_msg) from e return Config( cfg_dict, cfg_text=cfg_text, diff --git a/tests/test_config/test_config.py b/tests/test_config/test_config.py index d784c5d97c01246b294d1e85cbffd7c42f65ed52..36a47bc6dd7801de767d7bf298e280cf07f6a9ed 100644 --- a/tests/test_config/test_config.py +++ b/tests/test_config/test_config.py @@ -65,8 +65,14 @@ class TestConfig: # If import successfully, os.environ[''TEST_VALUE''] will be # set to 'test' assert os.environ.pop('TEST_VALUE') == 'test' + sys.path.pop() + Config.fromfile(cfg_file, import_custom_modules=False) assert 'TEST_VALUE' not in os.environ + sys.modules.pop('test_custom_import_module') + with pytest.raises( + ImportError, match='Failed to import custom modules from'): + Config.fromfile(cfg_file, import_custom_modules=True) @pytest.mark.parametrize('file_format', ['py', 'json', 'yaml']) def test_fromstring(self, file_format):