Compare commits
2 Commits
96c1379621
...
5eedda0467
| Author | SHA1 | Date | |
|---|---|---|---|
| 5eedda0467 | |||
| 901d8f695a |
66
install.ps1
Normal file
66
install.ps1
Normal 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"
|
||||
101
install.sh
Executable file
101
install.sh
Executable file
@ -0,0 +1,101 @@
|
||||
#!/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
|
||||
# Garde-fou : build_app.sh grave le chemin de CE dossier dans le binaire de
|
||||
# /Applications/Zonza.app. Si une Zonza y est deja installee depuis un AUTRE
|
||||
# dossier, reconstruire la detournerait vers ici — et changerait son cdhash,
|
||||
# ce qui REVOQUE silencieusement les autorisations macOS deja accordees.
|
||||
# Faute de ce garde-fou, un simple essai depuis une copie casse l'installation
|
||||
# en service (arrive le 2026-08-23, rattrape de justesse).
|
||||
CIBLE_ACTUELLE=""
|
||||
if [[ -x /Applications/Zonza.app/Contents/MacOS/zonza ]]; then
|
||||
CIBLE_ACTUELLE="$(strings /Applications/Zonza.app/Contents/MacOS/zonza 2>/dev/null | grep -m1 -E '/app\.py$' || true)"
|
||||
fi
|
||||
ICI="$(pwd)/app.py"
|
||||
|
||||
if [[ -n "$CIBLE_ACTUELLE" && "$CIBLE_ACTUELLE" != "$ICI" ]]; then
|
||||
echo
|
||||
echo "⚠ Une Zonza est deja installee, et elle pointe ailleurs :"
|
||||
echo " installee ici : $CIBLE_ACTUELLE"
|
||||
echo " ce dossier : $ICI"
|
||||
echo
|
||||
echo " Reconstruire la detournerait vers ce dossier et REVOQUERAIT ses"
|
||||
echo " autorisations macOS (Accessibilite, Surveillance de l'entree)."
|
||||
echo " L'application n'est donc PAS reconstruite."
|
||||
echo
|
||||
echo " Si c'est bien ce que tu veux, lance : ZONZA_REMPLACER=1 ./install.sh"
|
||||
if [[ "${ZONZA_REMPLACER:-}" != "1" ]]; then
|
||||
CONSTRUIRE=0
|
||||
else
|
||||
echo " ZONZA_REMPLACER=1 : reconstruction demandee explicitement."
|
||||
CONSTRUIRE=1
|
||||
fi
|
||||
else
|
||||
CONSTRUIRE=1
|
||||
fi
|
||||
|
||||
if [[ "$CONSTRUIRE" == "1" ]]; then
|
||||
echo "→ Construction de Zonza.app…"
|
||||
./build_app.sh
|
||||
fi
|
||||
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
|
||||
@ -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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user