Compilat onefile amb Nuitka (app.py + zstandard) i rutes en mode onefile

This commit is contained in:
2026-05-29 22:52:28 +02:00
parent 667eade660
commit 021e865179
4 changed files with 106 additions and 20 deletions
Regular → Executable
+58 -14
View File
@@ -1,19 +1,63 @@
#!/usr/bin/env bash
# Compila jlauncher a un binario nativo (C, vía Nuitka).
# Requiere: pip install nuitka PySide6
# Compila jlauncher a un binario standalone con Nuitka y empaqueta un tar.gz de release.
# Requisitos del sistema: python3-dev, gcc, patchelf (ver README).
set -euo pipefail
cd "$(dirname "$0")"
HERE="$(cd "$(dirname "$0")" && pwd)"
cd "$HERE"
python -m nuitka \
--standalone \
--assume-yes-for-downloads \
--enable-plugin=pyside6 \
--output-dir=dist \
--output-filename=jlauncher \
--include-data-files=games.toml=games.toml \
jlauncher
VERSION="$(sed -n 's/^__version__[[:space:]]*=[[:space:]]*"\([^"]*\)".*/\1/p' jlauncher/__init__.py | head -n1)"
if [ -z "$VERSION" ]; then
echo "[build] no se pudo leer __version__ de jlauncher/__init__.py" >&2
exit 1
fi
ARCH="$(uname -m)"
OS="$(uname -s | tr '[:upper:]' '[:lower:]')"
RELEASE_NAME="jlauncher-v${VERSION}-${OS}-${ARCH}"
echo
echo "Listo. Binario en: dist/jlauncher.dist/jlauncher"
echo "games.toml se incluye junto al binario; jlauncher_data/ se creará al lado al ejecutar."
if [ ! -d .venv ]; then
echo "[build] creando venv…"
python3 -m venv .venv
.venv/bin/pip install --quiet --upgrade pip
fi
echo "[build] sincronizando dependencias…"
.venv/bin/pip install --quiet -r requirements.txt
if ! .venv/bin/python -c "import nuitka" 2>/dev/null; then
echo "[build] instalando nuitka en el venv…"
.venv/bin/pip install --quiet "nuitka[onefile]"
fi
# zstandard habilita la compresión del onefile (binario mucho más pequeño).
if ! .venv/bin/python -c "import zstandard" 2>/dev/null; then
echo "[build] instalando zstandard (compresión onefile)…"
.venv/bin/pip install --quiet zstandard
fi
echo "[build] versión: v${VERSION}"
echo "[build] limpiando artefactos previos…"
rm -rf dist build app.build app.dist app.onefile-build
echo "[build] compilando (PySide6 onefile; puede tardar varios minutos)…"
.venv/bin/python -m nuitka \
--onefile \
--assume-yes-for-downloads \
--enable-plugin=pyside6 \
--include-package=jlauncher \
--output-dir=dist \
--output-filename=jlauncher \
--remove-output \
--lto=yes \
app.py
echo "[build] copiando games.toml junto al binario…"
cp games.toml dist/games.toml
echo "[build] empaquetando release ${RELEASE_NAME}.tar.gz…"
tar -czf "dist/${RELEASE_NAME}.tar.gz" -C dist jlauncher games.toml
echo "[build] hecho:"
ls -lh "dist/jlauncher" "dist/games.toml" "dist/${RELEASE_NAME}.tar.gz"
echo "[build] el binario crea jlauncher_data/ y settings.json junto a sí mismo."
echo "[build] distribuir: descomprimir el tar.gz (jlauncher + games.toml juntos)."