Support Windows : lanceur multiplateforme et build d'un .exe by Neyroe · Pull Request #2 · Neyroe/tricount-scanner · GitHub
Skip to content

Support Windows : lanceur multiplateforme et build d'un .exe - #2

Merged
Neyroe merged 1 commit into
feat/tricount-scannerfrom
feat/windows-support
Sep 7, 2026
Merged

Neyroe merged 1 commit into
feat/tricount-scannerfrom
feat/windows-support

Conversation

@Neyroe

@Neyroe Neyroe commented Sep 7, 2026

Copy link
Copy Markdown
Owner

Empilée sur #1 (base : feat/tricount-scanner), à fusionner après elle.

Le code Python était déjà portable, mais le lancement, lui, était clairement
Linux-only
— et deux détails de chemins cassaient sous Windows.

Ce qui coinçait

Avant Après
Lancement run.sh : bash + ip route get launch.py, commun aux trois OS ; run.sh et run.bat ne sont plus que des enveloppes
Dossier de téléchargement ~/Downloads en dur résolu par OS et par langue : registre Windows, XDG sous Linux
Noms de fichiers Resto: 12/03 ?.jpg caractères interdits sous Windows remplacés
Chemins de l'app relatifs au répertoire courant ancrés sur le fichier / l'exécutable
pywebview ImportError brut message expliquant WebView2 / pythonnet, ou le repli navigateur

Bonus au passage : ~/Downloads en dur créait aussi un dossier parasite sur
un Linux en français, où le vrai dossier est ~/Téléchargements.

Release Windows

.github/workflows/windows-release.yml construit un TricountScanner.exe
autonome avec PyInstaller sur un runner windows-latest :

  • l'interface et .env.example sont embarqués dans l'exe ;
  • .env et credentials.json sont écrits à côté de l'exe, pas dans le
    dossier temporaire d'extraction — la configuration et les clés de l'appareil
    survivent donc aux relancements ;
  • une étape de fumée démarre réellement l'exe et vérifie que l'interface répond
    en HTTP 200 avant de publier quoi que ce soit ;
  • sur un tag v*, l'exe est attaché à une release GitHub ; sinon il reste
    disponible en artefact de build.

Pour l'utilisateur Windows, ça donne : télécharger l'exe, le lancer, coller le
lien de partage dans le .env créé à côté, relancer. Pas de Python à installer.

Installation allégée

easyocr (≈ 2 Go avec PyTorch) sort de requirements.txt vers
requirements-ocr.txt. L'OCR photo reste disponible en une commande, et sans
lui l'import d'une image affiche un message explicite au lieu d'échouer — les
exports PDF/CSV, eux, n'ont jamais eu besoin de PyTorch.

Vérifié

  • python launch.py : serveur démarré, interface en HTTP 200, bannière avec l'IP locale.
  • _downloads_dir() renvoie bien ~/Téléchargements sur cette machine, et
    _safe_filename() nettoie les : / * ?.
  • Le build Windows et son test de démarrage tournent dans la CI de cette PR.

🤖 Generated with Claude Code

https://claude.ai/code/session_015qZ1PYFqwtmybDMB3XzDXL

Le lancement et deux détails de chemins étaient spécifiques à Linux.

- launch.py : lanceur commun Windows / macOS / Linux (création du .env,
  détection de l'IP locale en Python plutôt qu'avec `ip route`, ouverture
  du navigateur). run.sh et run.bat ne sont plus que des enveloppes.
- main.py : dossier de téléchargement résolu par OS et par langue (registre
  Windows, XDG sous Linux — corrige aussi « Téléchargements » en français) et
  nettoyage des caractères interdits dans les noms de fichiers Windows.
- main.py / launch.py : chemins ancrés sur l'exécutable en build PyInstaller,
  .env et credentials.json restant à côté de l'exe.
- app.py : message clair si pywebview ou son backend WebView2 manque.
- requirements : easyocr sorti dans requirements-ocr.txt (~2 Go de PyTorch,
  inutile hors tickets photo), pythonnet ajouté pour pywebview sous Windows.
- CI : workflow de build d'un TricountScanner.exe (PyInstaller), vérifié au
  démarrage, publié en release sur tag v*.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015qZ1PYFqwtmybDMB3XzDXL
@Neyroe
Neyroe merged commit 785dbf3 into feat/tricount-scanner Sep 7, 2026
Neyroe added a commit that referenced this pull request Sep 7, 2026
La fusion de la PR #1 avait été enregistrée avant l'intégration de la PR #2
dans sa branche ; ce merge amène le support Windows sur main.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015qZ1PYFqwtmybDMB3XzDXL
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant