← retour aux snippets

importlib.util: charger un module depuis un chemin

Importer dynamiquement un module .py par son chemin de fichier.

python import #module#dynamic

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.