Scripts d'installation, et requirements avec marqueurs de plateforme

requirements.txt installait mlx-whisper sans condition : l'installation aurait
echoue sur Windows, ou ce paquet n'existe pas. Et pyobjc n'y figurait PAS DU TOUT
alors que l'overlay macOS en depend — une installation neuve sur un autre Mac
aurait produit une Zonza qui ne demarre pas. Les marqueurs retiennent 13 paquets
sur Apple Silicon, 12 sur Mac Intel, 8 sur Windows.

install.sh construit l'app et lance le diagnostic. install.ps1 pose le lancement
au demarrage via pythonw (sans quoi une console resterait ouverte) et lance le
diagnostic. Ce dernier porte un avertissement : il n'a jamais tourne sur Windows.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Ralph Mayola 2026-08-23 20:08:20 +02:00
parent 96c1379621
commit 901d8f695a
3 changed files with 157 additions and 7 deletions

66
install.ps1 Normal file
View File

@ -0,0 +1,66 @@
# Installe Zonza sur Windows.
#
# powershell -ExecutionPolicy Bypass -File .\install.ps1
#
# Cree l'environnement, installe UNIQUEMENT ce qui sert a Windows (les marqueurs
# de requirements.txt ecartent MLX et pyobjc), pose le lancement au demarrage,
# puis lance le diagnostic.
#
# AVERTISSEMENT D'HONNETETE : ce script n'a JAMAIS ete execute sur une machine
# Windows. Il a ete ecrit depuis un Mac, d'apres la documentation. Le diagnostic
# de la derniere etape est justement la pour dire ce qui marche et ce qui casse.
$ErrorActionPreference = "Stop"
Set-Location -Path $PSScriptRoot
Write-Host "-> Verification de Python..."
$py = Get-Command python -ErrorAction SilentlyContinue
if (-not $py) { throw "Python introuvable. Installe-le depuis python.org, en cochant 'Add python.exe to PATH'." }
$version = & python -c "import sys; print('.'.join(map(str, sys.version_info[:3])))"
Write-Host " Python $version"
& python -c "import sys; sys.exit(0 if sys.version_info >= (3, 11) else 1)"
if ($LASTEXITCODE -ne 0) { throw "Python 3.11 minimum requis, trouve $version." }
if (-not (Test-Path ".venv")) {
Write-Host "-> Creation de l'environnement..."
& python -m venv .venv
} else {
Write-Host "-> Environnement deja present, on le reutilise."
}
Write-Host "-> Installation des dependances de CETTE machine..."
& .\.venv\Scripts\python.exe -m pip install --quiet --upgrade pip
& .\.venv\Scripts\python.exe -m pip install --quiet -r requirements.txt
if ($LASTEXITCODE -ne 0) { throw "L'installation des dependances a echoue." }
Write-Host "-> Lancement au demarrage..."
# pythonw.exe : sans lui, une console noire resterait ouverte en permanence.
$demarrage = [Environment]::GetFolderPath("Startup")
$raccourci = Join-Path $demarrage "Zonza.lnk"
$shell = New-Object -ComObject WScript.Shell
$lien = $shell.CreateShortcut($raccourci)
$lien.TargetPath = (Resolve-Path ".\.venv\Scripts\pythonw.exe").Path
$lien.Arguments = '"' + (Resolve-Path ".\lanceur_qt.py").Path + '"'
$lien.WorkingDirectory = $PSScriptRoot
$lien.Description = "Zonza - dictee vocale locale"
$lien.Save()
Write-Host " $raccourci"
Write-Host "-> Diagnostic..."
& .\.venv\Scripts\python.exe app.py --diagnostic
if ($LASTEXITCODE -ne 0) {
Write-Host ""
Write-Host "Le diagnostic signale un probleme. Rien n'est casse : les lignes"
Write-Host "ci-dessus disent laquelle des epreuves a echoue."
exit 1
}
Write-Host ""
Write-Host "Installe."
Write-Host ""
Write-Host "Usage : Ctrl+Alt+D pour demarrer et arreter la dictee."
Write-Host "Journal : %LOCALAPPDATA%\Zonza\Zonza.log"
Write-Host "Lancer maintenant, sans redemarrer : .\.venv\Scripts\pythonw.exe lanceur_qt.py"
Write-Host ""
Write-Host "Si le raccourci ne repond pas, relance le diagnostic :"
Write-Host " .\.venv\Scripts\python.exe app.py --diagnostic"

66
install.sh Executable file
View File

@ -0,0 +1,66 @@
#!/usr/bin/env bash
#
# Installe Zonza sur macOS (et Linux, pour la partie portable).
#
# ./install.sh
#
# Cree l'environnement, installe UNIQUEMENT ce qui sert a cette machine (les
# marqueurs de requirements.txt s'en chargent), construit l'app macOS, puis lance
# le diagnostic. Il ne masque aucune erreur : si une etape echoue, il s'arrete.
set -euo pipefail
cd "$(dirname "$0")"
MINIMUM="3.11"
PY="${PYTHON:-python3}"
echo "→ Verification de Python…"
command -v "$PY" >/dev/null || { echo "✗ '$PY' introuvable. Installe Python $MINIMUM ou plus, ou renseigne PYTHON=/chemin/vers/python3." >&2; exit 1; }
"$PY" - <<PYCODE || { echo "✗ Python $MINIMUM minimum requis." >&2; exit 1; }
import sys
raise SystemExit(0 if sys.version_info >= tuple(int(n) for n in "$MINIMUM".split(".")) else 1)
PYCODE
echo " $("$PY" --version)"
if [[ ! -d .venv ]]; then
echo "→ Creation de l'environnement…"
"$PY" -m venv .venv
else
echo "→ Environnement deja present, on le reutilise."
fi
echo "→ Installation des dependances de CETTE machine…"
.venv/bin/python -m pip install --quiet --upgrade pip
.venv/bin/python -m pip install --quiet -r requirements.txt
echo " $(.venv/bin/python -m pip list 2>/dev/null | wc -l | tr -d ' ') paquets installes"
if [[ "$(uname)" == "Darwin" ]]; then
echo "→ Construction de Zonza.app…"
./build_app.sh
fi
echo "→ Diagnostic…"
.venv/bin/python app.py --diagnostic || {
echo
echo "✗ Le diagnostic signale un probleme. Rien n'est casse : lis les lignes"
echo " ci-dessus, elles disent laquelle des epreuves a echoue." >&2
exit 1
}
cat <<'FIN'
✓ Installe.
Il reste UNE chose que seul toi peux faire, et sans elle le raccourci ne
fonctionnera pas : accorder les autorisations macOS.
Reglages systeme > Confidentialite et securite
• Accessibilite → ajoute /Applications/Zonza.app, puis active
• Surveillance de l'entree → la meme chose
Puis quitte Zonza par son icone 🎙️ et relance-la : l'autorisation n'est lue
qu'au demarrage.
Usage : Cmd+Ctrl+D pour demarrer et arreter la dictee.
Journal : ~/Library/Logs/Zonza.log
FIN

View File

@ -1,14 +1,32 @@
# mlx-whisper : GPU Apple Silicon uniquement (moteur "mlx", machine actuelle).
mlx-whisper>=0.4.3
# faster-whisper : coeur CTranslate2, tourne partout (Mac Intel, Windows avec ou
# sans GPU). Les deux coexistent car aucun des deux ne couvre a lui seul toutes
# les plateformes visees par le portage — cf moteur/__init__.py::nom_moteur_pour.
# Zonza — dependances, avec marqueurs de plateforme.
#
# `pip install -r requirements.txt` n'installe QUE ce qui sert a la machine :
# MLX et pyobjc sont propres a macOS, PySide6 sert l'overlay Qt. Sans ces
# marqueurs, l'installation echouerait sur Windows (mlx-whisper n'y existe pas).
# --- transcription -------------------------------------------------------
# Deux moteurs, car aucun ne couvre a lui seul les plateformes visees
# (cf moteur/__init__.py::nom_moteur_pour).
mlx-whisper>=0.4.3; sys_platform == "darwin" and platform_machine == "arm64"
faster-whisper>=1.0
# --- interface -----------------------------------------------------------
# Cocoa sert l'overlay macOS. Ces paquets n'etaient PAS declares ici : une
# installation neuve sur un autre Mac aurait produit une Zonza qui ne demarre pas.
pyobjc-core>=12.2; sys_platform == "darwin"
pyobjc-framework-Cocoa>=12.2; sys_platform == "darwin"
pyobjc-framework-Quartz>=12.2; sys_platform == "darwin"
pyobjc-framework-ApplicationServices>=12.2; sys_platform == "darwin"
# Qt sert l'overlay partout ailleurs. Installe aussi sur macOS : la suite de
# tests y eprouve les DEUX interfaces, c'est ce qui protege le portage.
PySide6>=6.11
# --- capture, collage, calcul --------------------------------------------
sounddevice>=0.5.5
numpy>=2.4
pynput>=1.8.2
pyperclip>=1.11
pillow>=11
# --- developpement -------------------------------------------------------
pytest>=8.0
# PySide6 : uniquement hors macOS (Cocoa/pyobjc y sert deja l'overlay) — cf interface/qt.py.
PySide6>=6.11