Build: Vollständige Windows-Distribution-Infrastruktur
Implementiert ein professionelles Build-System für Windows-Benutzer ohne Python-Installation: PyInstaller-Integration: - DocuMentor.spec mit automatischer Icon/Version-Einbindung - Unterstützung für alle PySide6-UI-Dateien und Dependencies - UPX-Kompression für kleinere Executable-Größe Icon-System: - create_icon.py generiert Standard-Icon oder konvertiert PNG zu ICO - Multi-Size ICO (16x16 bis 256x256) für alle Windows-Kontexte - Automatische Integration in Build-Prozess - Prompts für Bild-KIs (Gemini, DALL-E, etc.) Versionsinformationen: - create_version_info.py liest Version aus pyproject.toml - Windows-Datei-Eigenschaften (Rechtsklick → Details) - Automatische Generierung bei jedem Build Build-Automatisierung: - build_windows.py orchestriert gesamten Build-Prozess - Erstellt Icon und Versionsinformationen automatisch - Generiert ZIP-Archiv für Distribution - Cleanup alter Builds Inno Setup-Integration: - installer.iss für professionelle Setup.exe - GUID-Generator (generate_guid.py) - Desktop-Verknüpfungen und Start-Menü-Integration Dokumentation: - BUILD.md - Schnellstart-Anleitung - docs/windows_distribution.md - Detaillierte Distribution-Dokumentation - docs/icon_and_version_info.md - Icon- und Versions-System - resources/icon_prompt.md - KI-Prompts für Icon-Generierung Dependencies: - pyinstaller>=6.0.0 für Executable-Erstellung - pillow>=10.0.0 für Icon-Generierung Externe Abhängigkeiten (Java, FOP, Saxon, diff-pdf) bleiben separat installierbar. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,274 @@
|
||||
# Icon und Versionsinformationen für Windows-Build
|
||||
|
||||
## Übersicht
|
||||
|
||||
DocuMentor unterstützt professionelle Windows-Builds mit:
|
||||
- **Anwendungs-Icon** in allen benötigten Größen
|
||||
- **Windows-Versionsinformationen** (Datei-Eigenschaften)
|
||||
- Automatische Integration in Build-Prozess
|
||||
|
||||
## Icon-System
|
||||
|
||||
### Automatische Icon-Generierung
|
||||
|
||||
Das Build-Skript generiert automatisch ein Standard-Icon, falls keins vorhanden ist:
|
||||
|
||||
```bash
|
||||
uv run python build_windows.py
|
||||
```
|
||||
|
||||
Falls `resources/icon.ico` nicht existiert, wird automatisch ein Standard-Icon mit DocuMentor-Branding erstellt.
|
||||
|
||||
### Manuelles Icon erstellen
|
||||
|
||||
#### Option 1: Standard-Icon
|
||||
|
||||
```bash
|
||||
uv run python create_icon.py
|
||||
```
|
||||
|
||||
Erstellt ein einfaches Icon mit:
|
||||
- Blauem Hintergrund (professionelles Blau: #2980B9)
|
||||
- Weißem Dokument-Symbol
|
||||
- "M" für Mentor (bei großen Icons)
|
||||
- Umgeknickter Ecke
|
||||
- Mehreren Größen (16×16 bis 256×256)
|
||||
|
||||
#### Option 2: Aus eigenem PNG
|
||||
|
||||
```bash
|
||||
uv run python create_icon.py mein-logo.png
|
||||
```
|
||||
|
||||
Konvertiert ein PNG-Bild zu einem Multi-Size Windows-Icon:
|
||||
- Unterstützt Transparenz
|
||||
- Erstellt alle benötigten Größen
|
||||
- Optimiert für verschiedene Bildschirmauflösungen
|
||||
|
||||
**PNG-Anforderungen:**
|
||||
- Idealerweise 256×256 Pixel oder größer
|
||||
- Quadratisches Format
|
||||
- PNG oder JPEG Format
|
||||
- Transparenter Hintergrund empfohlen
|
||||
|
||||
### Icon-Größen
|
||||
|
||||
Das ICO-Format enthält folgende Auflösungen:
|
||||
|
||||
| Größe | Verwendung |
|
||||
|---------|--------------------------------------|
|
||||
| 256×256 | Windows 7+, Taskleiste, große Icons |
|
||||
| 128×128 | Windows 7+, große Icons |
|
||||
| 64×64 | Hohe DPI-Displays |
|
||||
| 48×48 | Standard Desktop-Icon |
|
||||
| 32×32 | Explorer Details-Ansicht |
|
||||
| 16×16 | Kleinstes Icon, Titelleiste |
|
||||
|
||||
### Wo wird das Icon verwendet?
|
||||
|
||||
- **DocuMentor.exe** - Anwendungs-Icon
|
||||
- **Setup.exe** - Installer-Icon (Inno Setup)
|
||||
- **Desktop-Verknüpfung** - Erstellt beim Installieren
|
||||
- **Start-Menü** - Windows-Programmgruppe
|
||||
- **Taskleiste** - Beim Ausführen
|
||||
- **Deinstallations-Programm** - System-Einstellungen
|
||||
|
||||
## Versionsinformationen
|
||||
|
||||
### Automatische Generierung
|
||||
|
||||
Versionsinformationen werden automatisch vom Build-Skript generiert:
|
||||
|
||||
```bash
|
||||
uv run python build_windows.py
|
||||
```
|
||||
|
||||
### Manuelle Generierung
|
||||
|
||||
```bash
|
||||
uv run python create_version_info.py
|
||||
```
|
||||
|
||||
### Inhalt der Versionsinformationen
|
||||
|
||||
Die `version_info.txt` enthält:
|
||||
|
||||
```
|
||||
FileVersion: 0.1.0.0
|
||||
ProductVersion: 0.1.0.0
|
||||
CompanyName: Ihr Name/Organisation
|
||||
FileDescription: Professionelle XSL-Transformations-Verwaltung und PDF-Generierung
|
||||
InternalName: DocuMentor
|
||||
LegalCopyright: © 2026 Ihr Name. Alle Rechte vorbehalten.
|
||||
OriginalFilename: DocuMentor.exe
|
||||
ProductName: DocuMentor
|
||||
```
|
||||
|
||||
### Version aus pyproject.toml
|
||||
|
||||
Die Version wird automatisch aus `pyproject.toml` gelesen:
|
||||
|
||||
```toml
|
||||
[project]
|
||||
name = "DocuMentor"
|
||||
version = "0.1.0"
|
||||
description = "Professionelle XSL-Transformations-Verwaltung und PDF-Generierung"
|
||||
```
|
||||
|
||||
### Version ändern
|
||||
|
||||
**Schritt 1:** Version in `pyproject.toml` ändern:
|
||||
|
||||
```toml
|
||||
version = "0.2.0"
|
||||
```
|
||||
|
||||
**Schritt 2:** Version in `installer.iss` ändern (Zeile 13):
|
||||
|
||||
```iss
|
||||
#define MyAppVersion "0.2.0"
|
||||
```
|
||||
|
||||
**Schritt 3:** Build neu ausführen:
|
||||
|
||||
```bash
|
||||
uv run python build_windows.py
|
||||
```
|
||||
|
||||
Die Versionsinformationen werden automatisch neu generiert.
|
||||
|
||||
### Versionsnummern-Schema
|
||||
|
||||
DocuMentor verwendet [Semantic Versioning](https://semver.org/lang/de/):
|
||||
|
||||
```
|
||||
MAJOR.MINOR.PATCH
|
||||
|
||||
0.1.0 → Erste Beta-Version
|
||||
1.0.0 → Erste stabile Version
|
||||
1.1.0 → Neue Features
|
||||
1.1.1 → Bugfixes
|
||||
2.0.0 → Breaking Changes
|
||||
```
|
||||
|
||||
### Windows-Eigenschaften anzeigen
|
||||
|
||||
Nach dem Build können Sie die Versionsinformationen in Windows anzeigen:
|
||||
|
||||
1. Rechtsklick auf `DocuMentor.exe`
|
||||
2. **Eigenschaften** auswählen
|
||||
3. Tab **Details** öffnen
|
||||
|
||||
Dort sehen Sie:
|
||||
- Dateiversion
|
||||
- Produktversion
|
||||
- Beschreibung
|
||||
- Copyright
|
||||
- Produktname
|
||||
- Original-Dateiname
|
||||
|
||||
## Integration in Build-Prozess
|
||||
|
||||
### DocuMentor.spec
|
||||
|
||||
```python
|
||||
exe = EXE(
|
||||
# ...
|
||||
icon=str(project_root / 'resources' / 'icon.ico') if (project_root / 'resources' / 'icon.ico').exists() else None,
|
||||
version=str(project_root / 'version_info.txt') if (project_root / 'version_info.txt').exists() else None,
|
||||
)
|
||||
```
|
||||
|
||||
**Automatische Erkennung:**
|
||||
- Icon wird verwendet, falls vorhanden
|
||||
- Versionsinformationen werden verwendet, falls vorhanden
|
||||
- Build funktioniert auch ohne Icon/Version (mit Warnung)
|
||||
|
||||
### installer.iss
|
||||
|
||||
```iss
|
||||
SetupIconFile=dist\DocuMentor\icon.ico
|
||||
UninstallDisplayIcon={app}\DocuMentor.exe
|
||||
```
|
||||
|
||||
Das Icon wird automatisch vom `build_windows.py` nach `dist/DocuMentor/` kopiert.
|
||||
|
||||
## Anpassungen
|
||||
|
||||
### Company Name / Copyright
|
||||
|
||||
In `create_version_info.py` (Zeile ~65):
|
||||
|
||||
```python
|
||||
StringStruct('CompanyName', 'Ihr Name/Organisation'),
|
||||
StringStruct('LegalCopyright', '© {year} Ihr Name. Alle Rechte vorbehalten.'),
|
||||
```
|
||||
|
||||
Ändern Sie "Ihr Name/Organisation" auf Ihren tatsächlichen Namen oder Firmennamen.
|
||||
|
||||
### Icon-Design
|
||||
|
||||
Falls Sie das Standard-Icon anpassen möchten, bearbeiten Sie `create_icon.py`:
|
||||
|
||||
**Farben ändern** (Zeile ~31):
|
||||
```python
|
||||
bg_color = (41, 128, 185) # Blau - ändern Sie RGB-Werte
|
||||
```
|
||||
|
||||
**Symbol ändern:**
|
||||
- Bearbeiten Sie die `create_default_icon()` Funktion
|
||||
- Oder erstellen Sie Ihr eigenes Icon in einem Grafikprogramm
|
||||
|
||||
## Best Practices
|
||||
|
||||
### Icon-Design
|
||||
|
||||
1. **Einfach und klar**: Funktioniert auch bei 16×16 Pixel
|
||||
2. **Hoher Kontrast**: Gut lesbar auf hellem und dunklem Hintergrund
|
||||
3. **Professionell**: Passend zum Business-Kontext
|
||||
4. **Wiedererkennbar**: Symbolisiert die Anwendung
|
||||
|
||||
### Versionierung
|
||||
|
||||
1. **Semantische Versionierung**: MAJOR.MINOR.PATCH
|
||||
2. **Vor jedem Release aktualisieren**
|
||||
3. **Git-Tags verwenden**: `git tag v0.1.0`
|
||||
4. **GUID beibehalten**: Nie die Inno Setup GUID ändern bei Updates!
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Icon wird nicht angezeigt
|
||||
|
||||
**Problem**: DocuMentor.exe zeigt kein Icon
|
||||
|
||||
**Lösungen:**
|
||||
1. Prüfen ob `resources/icon.ico` existiert
|
||||
2. Build neu ausführen: `uv run python build_windows.py`
|
||||
3. Windows Icon-Cache löschen und neu starten
|
||||
|
||||
### Versionsinformationen fehlen
|
||||
|
||||
**Problem**: Eigenschaften → Details zeigt keine Informationen
|
||||
|
||||
**Lösungen:**
|
||||
1. Prüfen ob `version_info.txt` existiert
|
||||
2. `uv run python create_version_info.py` ausführen
|
||||
3. Build neu ausführen
|
||||
|
||||
### Pillow-Fehler beim Icon-Erstellen
|
||||
|
||||
**Problem**: `ImportError: No module named 'PIL'`
|
||||
|
||||
**Lösung:**
|
||||
```bash
|
||||
uv sync --all-groups
|
||||
```
|
||||
|
||||
Dies installiert Pillow automatisch.
|
||||
|
||||
## Weiterführende Informationen
|
||||
|
||||
- **PyInstaller Icon-Dokumentation**: https://pyinstaller.org/en/stable/usage.html#icons
|
||||
- **Windows ICO Format**: https://en.wikipedia.org/wiki/ICO_(file_format)
|
||||
- **Semantic Versioning**: https://semver.org/lang/de/
|
||||
- **Pillow Dokumentation**: https://pillow.readthedocs.io/
|
||||
@@ -0,0 +1,291 @@
|
||||
# Windows Distribution Guide für DocuMentor
|
||||
|
||||
## Überblick
|
||||
|
||||
Dieses Dokument beschreibt, wie DocuMentor für Windows-Benutzer ohne Python-Installation verpackt wird.
|
||||
|
||||
## Voraussetzungen
|
||||
|
||||
### Auf dem Entwicklungssystem
|
||||
|
||||
```bash
|
||||
# Dependencies installieren (inkl. PyInstaller)
|
||||
uv sync --all-groups
|
||||
```
|
||||
|
||||
### Für Setup.exe (optional)
|
||||
|
||||
- **Inno Setup**: Download von https://jrsoftware.org/isdl.php
|
||||
- Oder **WiX Toolset** für MSI: https://wixtoolset.org/
|
||||
|
||||
## Build-Prozess
|
||||
|
||||
### Option 1: Einfacher Build (ZIP-Distribution)
|
||||
|
||||
```bash
|
||||
# 1. PyInstaller installieren
|
||||
uv sync --all-groups
|
||||
|
||||
# 2. Build ausführen
|
||||
uv run python build_windows.py
|
||||
```
|
||||
|
||||
Dies erstellt:
|
||||
- `dist/DocuMentor/DocuMentor.exe` - Eigenständige Executable
|
||||
- `dist/DocuMentor-YYYYMMDD-Windows.zip` - Portable ZIP-Archiv
|
||||
|
||||
### Option 2: Professionelle Setup.exe mit Inno Setup
|
||||
|
||||
```bash
|
||||
# 1. PyInstaller Build
|
||||
uv run python build_windows.py
|
||||
|
||||
# 2. Inno Setup Compiler ausführen
|
||||
iscc installer.iss
|
||||
```
|
||||
|
||||
Dies erstellt:
|
||||
- `dist/installer/DocuMentor-Setup-0.1.0.exe` - Professioneller Installer
|
||||
|
||||
### Option 3: MSI-Installer mit WiX
|
||||
|
||||
```bash
|
||||
# TODO: WiX-Konfiguration noch zu erstellen
|
||||
```
|
||||
|
||||
## Manuelle Schritte
|
||||
|
||||
### 1. PyInstaller direkt verwenden
|
||||
|
||||
```bash
|
||||
# Cleanup
|
||||
rm -rf build/ dist/
|
||||
|
||||
# Build
|
||||
uv run pyinstaller --clean DocuMentor.spec
|
||||
|
||||
# Testen
|
||||
dist/DocuMentor/DocuMentor.exe
|
||||
```
|
||||
|
||||
### 2. Anpassungen vornehmen
|
||||
|
||||
**Icon hinzufügen:**
|
||||
1. Icon-Datei (`.ico`) im Projekt speichern, z.B. `resources/icon.ico`
|
||||
2. In `DocuMentor.spec` anpassen:
|
||||
```python
|
||||
icon='resources/icon.ico'
|
||||
```
|
||||
|
||||
**Versionsinformationen:**
|
||||
In `DocuMentor.spec` erweitern:
|
||||
```python
|
||||
exe = EXE(
|
||||
# ...
|
||||
version='version_info.txt', # Windows-Versionsinformationen
|
||||
)
|
||||
```
|
||||
|
||||
## PyInstaller .spec Konfiguration
|
||||
|
||||
Die Datei `DocuMentor.spec` enthält:
|
||||
|
||||
- **datas**: UI-Dateien (.ui) werden mitgepackt
|
||||
- **hiddenimports**: Alle notwendigen PySide6/Polars-Module
|
||||
- **console=False**: GUI-Anwendung ohne Konsole
|
||||
- **upx=True**: Kompression der Binaries
|
||||
|
||||
### Wichtige Einstellungen
|
||||
|
||||
```python
|
||||
# Ein-Datei-Build (alles in einer .exe)
|
||||
exe = EXE(
|
||||
pyz,
|
||||
a.scripts,
|
||||
a.binaries, # Diese Zeilen
|
||||
a.zipfiles, # auskommentieren
|
||||
a.datas, # für One-File
|
||||
# ...
|
||||
onefile=True, # Hinzufügen
|
||||
)
|
||||
```
|
||||
|
||||
**Achtung**: One-File-Build ist langsamer beim Start, da alles temporär entpackt werden muss.
|
||||
|
||||
## Distribution
|
||||
|
||||
### ZIP-Archive
|
||||
|
||||
```bash
|
||||
# Automatisch durch build_windows.py erstellt
|
||||
dist/DocuMentor-YYYYMMDD-Windows.zip
|
||||
```
|
||||
|
||||
**Vorteile:**
|
||||
- Einfach, portable
|
||||
- Keine Installation nötig
|
||||
- Kann auf USB-Stick verwendet werden
|
||||
|
||||
**Nachteile:**
|
||||
- Keine Deinstallationsroutine
|
||||
- Keine Verknüpfungen
|
||||
- Keine Registry-Einträge
|
||||
|
||||
### Setup.exe mit Inno Setup
|
||||
|
||||
**Vorteile:**
|
||||
- Professionell
|
||||
- Deinstallation integriert
|
||||
- Start-Menü und Desktop-Icons
|
||||
- Update-Mechanismus möglich
|
||||
|
||||
**Nachteile:**
|
||||
- Benötigt Administrator-Rechte (optional)
|
||||
- Komplexere Konfiguration
|
||||
|
||||
### MSI-Installer
|
||||
|
||||
**Vorteile:**
|
||||
- Windows-Standard
|
||||
- Gruppen-Richtlinien-fähig
|
||||
- Silent Installation möglich
|
||||
|
||||
**Nachteile:**
|
||||
- Komplexe Erstellung
|
||||
- Benötigt WiX Toolset
|
||||
|
||||
## Externe Abhängigkeiten
|
||||
|
||||
DocuMentor benötigt diese Tools (NICHT im Installer enthalten):
|
||||
|
||||
1. **Java Runtime Environment (JRE) 11+**
|
||||
- Für Saxon und Apache FOP
|
||||
- Download: https://adoptium.net/
|
||||
|
||||
2. **Apache FOP**
|
||||
- XSL-FO zu PDF Konvertierung
|
||||
- Download: https://xmlgraphics.apache.org/fop/
|
||||
|
||||
3. **Saxon XSLT Prozessor**
|
||||
- XSLT 2.0/3.0 Transformationen
|
||||
- Download: https://www.saxonica.com/
|
||||
|
||||
4. **diff-pdf**
|
||||
- PDF-Vergleich
|
||||
- Download: https://vslavik.github.io/diff-pdf/
|
||||
|
||||
### Benutzer-Anleitung
|
||||
|
||||
Nach der Installation:
|
||||
|
||||
1. DocuMentor starten
|
||||
2. Beim ersten Start öffnet sich automatisch die Einstellungen
|
||||
3. Pfade zu Java, Saxon, FOP und diff-pdf konfigurieren
|
||||
4. Projekt-Verzeichnis wählen oder neues Projekt erstellen
|
||||
|
||||
## Testing
|
||||
|
||||
### Lokales Testing (Linux/WSL)
|
||||
|
||||
```bash
|
||||
# Build für Windows erstellen
|
||||
uv run python build_windows.py
|
||||
|
||||
# Executable mit Wine testen (falls verfügbar)
|
||||
wine dist/DocuMentor/DocuMentor.exe
|
||||
```
|
||||
|
||||
### Testing auf Windows
|
||||
|
||||
1. ZIP auf Windows-System kopieren
|
||||
2. Entpacken
|
||||
3. `DocuMentor.exe` ausführen
|
||||
4. Alle Features testen:
|
||||
- Projekt öffnen/erstellen
|
||||
- Tree-Navigation
|
||||
- PDF-Generierung
|
||||
- Einstellungen
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Problem: "Module not found" Fehler
|
||||
|
||||
**Lösung**: Hidden imports in `DocuMentor.spec` ergänzen:
|
||||
```python
|
||||
hiddenimports=[
|
||||
# ... existing
|
||||
'missing_module',
|
||||
]
|
||||
```
|
||||
|
||||
### Problem: UI-Dateien nicht gefunden
|
||||
|
||||
**Lösung**: Prüfen ob datas korrekt konfiguriert:
|
||||
```python
|
||||
datas=[
|
||||
('src/ui/*.ui', 'ui'),
|
||||
]
|
||||
```
|
||||
|
||||
### Problem: Executable zu groß
|
||||
|
||||
**Lösungen**:
|
||||
1. UPX-Kompression aktivieren (bereits aktiv)
|
||||
2. Excludes hinzufügen für ungenutzte Module:
|
||||
```python
|
||||
excludes=['tkinter', 'matplotlib', 'test', 'unittest']
|
||||
```
|
||||
3. One-File-Build verwenden (langsamer Start)
|
||||
|
||||
### Problem: Antivirus blockiert
|
||||
|
||||
**Lösung**:
|
||||
- Code-Signing-Zertifikat verwenden
|
||||
- Bei Microsoft einreichen für SmartScreen
|
||||
- README mit Hinweis erweitern
|
||||
|
||||
## Automatisierung mit CI/CD
|
||||
|
||||
### GitHub Actions Beispiel
|
||||
|
||||
```yaml
|
||||
name: Build Windows Release
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- 'v*'
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: windows-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: Install uv
|
||||
uses: astral-sh/setup-uv@v1
|
||||
|
||||
- name: Build
|
||||
run: uv run python build_windows.py
|
||||
|
||||
- name: Create Release
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
files: dist/*.zip
|
||||
```
|
||||
|
||||
## Versionierung
|
||||
|
||||
Version in folgenden Dateien aktualisieren:
|
||||
1. `pyproject.toml` - `version = "X.Y.Z"`
|
||||
2. `installer.iss` - `#define MyAppVersion "X.Y.Z"`
|
||||
3. Optional: `src/version.py` erstellen
|
||||
|
||||
## Lizenz und Rechtliches
|
||||
|
||||
- Alle Python-Dependencies sind in der Distribution enthalten
|
||||
- PySide6 (LGPL): Dynamische Verlinkung ist OK
|
||||
- Polars (MIT): Unproblematisch
|
||||
- Pydantic (MIT): Unproblematisch
|
||||
|
||||
Externe Tools (Saxon, FOP) haben eigene Lizenzen und müssen separat installiert werden.
|
||||
Reference in New Issue
Block a user