← retour aux snippets

zipfile: archives reproductibles (timestamps fixes)

Fixer date_time pour des sorties zip déterministes.

objectif

Fixer date_time pour des sorties zip déterministes.

code minimal

import zipfile, io
def build():
    buf = io.BytesIO()
    with zipfile.ZipFile(buf, "w", compression=zipfile.ZIP_DEFLATED, compresslevel=6) as z:
        zi = zipfile.ZipInfo("a.txt", date_time=(1980,1,1,0,0,0))
        z.writestr(zi, "x")
    return buf.getvalue()
a, b = build(), build()
print(a == b)  # attendu: True

utilisation

import zipfile, io
buf = io.BytesIO()
with zipfile.ZipFile(buf, "w", compression=zipfile.ZIP_STORED) as z:
    zi = zipfile.ZipInfo("b.txt", date_time=(1980,1,1,0,0,0))
    z.writestr(zi, "y")
print(len(buf.getvalue()) > 0)

variante(s) utile(s)

import zipfile
print(hasattr(zipfile, "ZipInfo"))

notes

  • Définissez aussi l’ordre des entrées et le niveau de compression.
  • Pour une reproductibilité totale, fixez contenu, nom, permissions, date_time.