objectif
Importer dynamiquement un module .py par son chemin de fichier.
code minimal
import importlib.util, tempfile, pathlib
code = "VALUE = 7\n"
with tempfile.TemporaryDirectory() as tmp:
p = pathlib.Path(tmp) / "mod.py"
p.write_text(code, encoding="utf-8")
spec = importlib.util.spec_from_file_location("mod", p)
m = importlib.util.module_from_spec(spec)
assert spec.loader is not None
spec.loader.exec_module(m)
print(getattr(m, "VALUE", 0) == 7) # attendu: True
utilisation
import importlib.util, tempfile, pathlib
with tempfile.TemporaryDirectory() as tmp:
p = pathlib.Path(tmp)/"x.py"; p.write_text("def f(): return 3\n")
spec = importlib.util.spec_from_file_location("x", p)
m = importlib.util.module_from_spec(spec); spec.loader.exec_module(m)
print(m.f() == 3)
variante(s) utile(s)
import importlib.util
print(callable(importlib.util.spec_from_file_location))
notes
- Idéal pour plugins simples sans installer de package.
- Veillez à des noms uniques pour éviter des collisions dans sys.modules.