objectif
Lire un fichier de données packagé, même depuis une wheel/zip.
code minimal
import importlib.resources as ir, types, tempfile, pathlib, sys
# Crée un package temporaire avec une ressource
with tempfile.TemporaryDirectory() as tmp:
pkg_dir = pathlib.Path(tmp)/"mypkg"; pkg_dir.mkdir()
(pkg_dir/"__init__.py").write_text("", encoding="utf-8")
(pkg_dir/"data.txt").write_text("hello", encoding="utf-8")
sys.path.insert(0, tmp)
try:
pkg = __import__("mypkg")
path = ir.files(pkg) / "data.txt"
with ir.as_file(path) as p:
print(p.read_text() == "hello") # attendu: True
finally:
sys.path.remove(tmp)
utilisation
import importlib.resources as ir, sys, tempfile, pathlib
with tempfile.TemporaryDirectory() as tmp:
d = pathlib.Path(tmp)/"p"; d.mkdir(); (d/"__init__.py").write_text("")
(d/"f.txt").write_text("x")
sys.path.insert(0, tmp)
try:
pmod = __import__("p")
print((ir.files(pmod)/"f.txt").name == "f.txt")
finally:
sys.path.remove(tmp)
variante(s) utile(s)
import importlib.resources as ir
print(hasattr(ir, "files") and hasattr(ir, "as_file"))
notes
- Préférez files()/as_file aux chemins relatifs; compatible zipimport.
- Évitez d’accéder à file directement pour des données packagées.