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