← retour aux snippets

zipapp: packager un dossier en application .pyz

Créer une archive exécutable contenant __main__.py.

python packaging #zipapp#pyz

objectif

Créer une archive exécutable contenant main.py.

code minimal

import zipapp, tempfile, pathlib
with tempfile.TemporaryDirectory() as tmp:
    d = pathlib.Path(tmp)/"app"; d.mkdir()
    (d/"__main__.py").write_text("print('hi')\n", encoding="utf-8")
    out = pathlib.Path(tmp)/"app.pyz"
    zipapp.create_archive(d, target=out)
    print(out.exists())  # attendu: True

utilisation

import zipapp, tempfile, pathlib, sys, subprocess
with tempfile.TemporaryDirectory() as tmp:
    d = pathlib.Path(tmp)/"cli"; d.mkdir()
    (d/"__main__.py").write_text("print('ok')\n", encoding="utf-8")
    z = pathlib.Path(tmp)/"cli.pyz"
    zipapp.create_archive(d, target=z, interpreter=sys.executable)
    print(z.suffix == ".pyz")

variante(s) utile(s)

import zipapp
print(callable(zipapp.create_archive))

notes

  • Ajoutez un shebang/interpreter pour rendre l’archive exécutable.
  • Par défaut, la compression n’est pas activée (stock); ajustez si besoin.