danieldk's picture
danieldk HF Staff
Add Python dependency test kernel
0482f3d
Raw
History Blame Contribute Delete
1.03 kB
import ctypes
import sys
import importlib
from pathlib import Path
from types import ModuleType
def _import_from_path(file_path: Path) -> ModuleType:
# We cannot use the module name as-is, after adding it to `sys.modules`,
# it would also be used for other imports. So, we make a module name that
# depends on the path for it to be unique using the hex-encoded hash of
# the path.
path_hash = "{:x}".format(ctypes.c_size_t(hash(file_path.absolute())).value)
module_name = path_hash
spec = importlib.util.spec_from_file_location(module_name, file_path)
if spec is None:
raise ImportError(f"Cannot load spec for {module_name} from {file_path}")
module = importlib.util.module_from_spec(spec)
if module is None:
raise ImportError(f"Cannot load module {module_name} from spec")
sys.modules[module_name] = module
spec.loader.exec_module(module) # type: ignore
return module
globals().update(vars(_import_from_path(Path(__file__).parent.parent / "__init__.py")))