#!/usr/bin/env python3 """Empacota a pasta de um jogo de pygame como .pgapp (o molde do arquivo do pygbag), de forma deterministica. python3 -I pgapp.py O zip leva tudo da pasta sob "assets/" (o main.py fica em assets/main.py), em ordem alfabetica, com data e permissoes fixas (mesmo sha256 a cada execucao). Ficam de fora __pycache__, *.pyc e arquivos de editor (.swp, ~). """ import os import sys import zipfile src, dest = sys.argv[1:] src = os.path.abspath(src) if not os.path.isfile(os.path.join(src, "main.py")): raise SystemExit(f"main.py nao existe em {src}") files = {} for base, dirs, names in os.walk(src): dirs[:] = [d for d in dirs if d != "__pycache__"] for name in names: if name.endswith((".pyc", ".swp", "~")) or name == ".DS_Store": continue rel = os.path.relpath(os.path.join(base, name), src).replace(os.sep, "/") files[f"assets/{rel}"] = os.path.join(base, name) with zipfile.ZipFile(dest, "w", zipfile.ZIP_DEFLATED, compresslevel=9) as z: for arcname in sorted(files): info = zipfile.ZipInfo(arcname, (1980, 1, 1, 0, 0, 0)) info.compress_type = zipfile.ZIP_DEFLATED info.external_attr = 0o644 << 16 info.create_system = 3 with open(files[arcname], "rb") as fh: z.writestr(info, fh.read(), compresslevel=9)