From 901d8f695aa142b3f8c06b6630b00bad62885f67 Mon Sep 17 00:00:00 2001 From: Ralph Mayola Date: Sun, 23 Aug 2026 20:08:20 +0200 Subject: [PATCH] Scripts d'installation, et requirements avec marqueurs de plateforme MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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) --- install.ps1 | 66 ++++++++++++++++++++++++++++++++++++++++++++++++ install.sh | 66 ++++++++++++++++++++++++++++++++++++++++++++++++ requirements.txt | 32 ++++++++++++++++++----- 3 files changed, 157 insertions(+), 7 deletions(-) create mode 100644 install.ps1 create mode 100755 install.sh diff --git a/install.ps1 b/install.ps1 new file mode 100644 index 0000000..4b7a866 --- /dev/null +++ b/install.ps1 @@ -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" diff --git a/install.sh b/install.sh new file mode 100755 index 0000000..8e86eb4 --- /dev/null +++ b/install.sh @@ -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" - <&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 diff --git a/requirements.txt b/requirements.txt index 3bced72..8f8f103 100644 --- a/requirements.txt +++ b/requirements.txt @@ -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