# For illustrative purposes.
name = 'itertools'
- spec = importlib.util.find_spec(name)
- if spec is None:
- print("can't find the itertools module")
+ if name in sys.modules:
+ print(f"{name!r} already in sys.modules")
+ elif (spec := importlib.util.find_spec(name)) is None:
+ print(f"can't find the {name!r} module")
else:
# If you chose to perform the actual import ...
module = importlib.util.module_from_spec(spec)
- spec.loader.exec_module(module)
- # Adding the module to sys.modules is optional.
sys.modules[name] = module
+ spec.loader.exec_module(module)
+ print(f"{name!r} has been imported")
Importing a source file directly
spec = importlib.util.spec_from_file_location(module_name, file_path)
module = importlib.util.module_from_spec(spec)
- spec.loader.exec_module(module)
- # Optional; only necessary if you want to be able to import the module
- # by name later.
sys.modules[module_name] = module
+ spec.loader.exec_module(module)
+
Setting up an importer
msg = f'No module named {absolute_name!r}'
raise ModuleNotFoundError(msg, name=absolute_name)
module = importlib.util.module_from_spec(spec)
- spec.loader.exec_module(module)
sys.modules[absolute_name] = module
+ spec.loader.exec_module(module)
if path is not None:
setattr(parent_module, child_name, module)
return module