Retour à la Knowledge Base
Référence

tauri-pyinstaller-packaging

Mars 2026·Version : 1.0 — Mars 2026·Packaging desktop Tauri v2 + Python (PyInstaller) → installeur Windows (NSIS)

Version : 1.0 — Mars 2026 Scope : Packaging desktop Tauri v2 + Python (PyInstaller) → installeur Windows (NSIS) Objectif : Reproduire le pipeline de build et de packaging desktop validé sur EVQuest (Tauri v2 + backend Python + frontend React) — artefacts à embarquer, config NSIS, updater, checklist machine vierge.


Architecture

App desktop Tauri
├── Shell Rust (Tauri)          → Compilé en binaire natif
├── Frontend React              → Bundlé dans le WebView
├── Backend Python (PyInstaller) → Embarqué dans resources/
│   └── _internal/              → Runtime Python + dépendances
└── Installeur NSIS             → Distribué aux utilisateurs

Dépendances embarquées

Dépendance Embarquée par Installation séparée ?
Python runtime PyInstaller (api-server.exe + _internal/) Non
SQLite Python stdlib sqlite3 Non
MSVC C++ Runtime PyInstaller (vcruntime140.dll dans _internal/) Non
WebView2 Embarqué dans le binaire Tauri (depuis Tauri v2) Non
Rust runtime Compilé statiquement dans le binaire Tauri Non

Objectif : l'utilisateur n'installe RIEN manuellement.

Pipeline de build

Étapes séquentielles

[1] Version sync check
    → Vérifier que version.json = tous les fichiers de config
    → Abort si mismatch

[2] PyInstaller build
    → Produit src-tauri/resources/api-server/
    → Contient api-server.exe + _internal/ (runtime + deps)

[3] Vérification des artefacts critiques
    → api-server.exe existe
    → sqlite3.dll présent dans _internal/
    → vcruntime140.dll présent dans _internal/
    → Taille du bundle cohérente

[4] Tauri build
    → npm run tauri build
    → Produit l'installeur NSIS dans src-tauri/target/release/bundle/nsis/

[5] Post-build
    → Hash SHA256 de l'installeur
    → Taille finale
    → Prêt pour publication

Vérification post-build

# Artefacts critiques
dir src-tauri\resources\api-server\api-server.exe
dir src-tauri\resources\api-server\_internal\sqlite3.dll
dir src-tauri\resources\api-server\_internal\vcruntime140.dll

# Taille du bundle Python
powershell -Command "(Get-ChildItem -Recurse src-tauri\resources\api-server | Measure-Object -Property Length -Sum).Sum / 1MB"

Configuration NSIS

// tauri.conf.json
{
  "bundle": {
    "targets": ["nsis"],
    "nsis": {
      "installMode": "currentUser",
      "installerIcon": "icons/icon.ico",
      "languages": ["French", "English"]
    }
  }
}
Aspect Choix Raison
Mode d'installation currentUser Pas de droits admin/UAC nécessaires
Répertoire %LOCALAPPDATA%\AppName\ Standard Windows per-user
Données utilisateur %APPDATA%\AppName\ Conservées à la désinstallation
WebView2 Embarqué (Tauri v2) Plus de bootstrapper externe nécessaire

Assets NSIS

src-tauri/nsis/
├── header.bmp    # 150 × 57 px, 24-bit BMP
└── sidebar.bmp   # 164 × 314 px, 24-bit BMP

Checklist machine vierge

Tester l'installeur sur une machine sans outils de dev :

[ ] Pas de Python installé
[ ] Pas de Node.js installé
[ ] Pas de Rust installé
[ ] L'installeur s'exécute sans erreur et sans UAC
[ ] L'app démarre (splash screen → interface)
[ ] Le backend Python répond (pas d'erreur DLL manquante)
[ ] Les fonctionnalités core marchent (import, affichage, etc.)
[ ] La désinstallation fonctionne proprement

Distribution dual-repo

Repo Visibilité Contenu
Repo principal Privé Code source, développement
Repo releases Public Binaires, CHANGELOG user-facing, update.json (Tauri updater)
# Créer le repo releases
gh repo create appname-releases --public

# Publier une release
gh release create v0.8.4 \
  --repo owner/appname-releases \
  --title "AppName v0.8.4" \
  "src-tauri\target\release\bundle\nsis\AppName_0.8.4_x64-setup.exe"

Mise à jour automatique (Tauri Updater)

// update.json sur le repo releases
{
  "version": "0.8.5",
  "notes": "Corrections et améliorations",
  "pub_date": "2026-03-20T00:00:00Z",
  "platforms": {
    "windows-x86_64": {
      "signature": "<SIGNATURE>",
      "url": "https://github.com/owner/releases/download/v0.8.5/AppName_0.8.5_x64-setup.nsis.zip"
    }
  }
}

Setup requis (une seule fois) :

  1. Générer keypair Tauri : npx tauri signer generate -w ~/.tauri/appname.key
  2. Plugin Rust : cargo add tauri-plugin-updater@2
  3. Package npm : npm install @tauri-apps/plugin-updater
  4. Variable d'env au build : TAURI_SIGNING_PRIVATE_KEY=<clé_privée>

Signature de code Windows (futur)

Option Coût/an Effet
Standard (Sectigo, DigiCert) ~200-400 EUR Élimine le warning SmartScreen après quelques downloads
EV (Extended Validation) ~400-700 EUR Trust immédiat SmartScreen, nécessite token USB

Dernière mise à jour : mars 2026