bb7cad9204
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>
80 lines
1.9 KiB
RPMSpec
80 lines
1.9 KiB
RPMSpec
# -*- mode: python ; coding: utf-8 -*-
|
|
"""
|
|
PyInstaller Konfiguration für DocuMentor
|
|
Erstellt eine eigenständige Windows-Executable ohne Python-Installation
|
|
"""
|
|
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
block_cipher = None
|
|
|
|
# Projektpfad
|
|
project_root = Path(SPECPATH)
|
|
src_path = project_root / 'src'
|
|
|
|
# Alle UI-Dateien sammeln
|
|
ui_files = []
|
|
for ui_file in (src_path / 'ui').glob('*.ui'):
|
|
ui_files.append((str(ui_file), 'ui'))
|
|
|
|
a = Analysis(
|
|
[str(src_path / 'main.py')],
|
|
pathex=[str(src_path)],
|
|
binaries=[],
|
|
datas=ui_files, # UI-Dateien einbinden
|
|
hiddenimports=[
|
|
'PySide6.QtCore',
|
|
'PySide6.QtGui',
|
|
'PySide6.QtWidgets',
|
|
'pydantic',
|
|
'pydantic_settings',
|
|
'pydantic_yaml',
|
|
'polars',
|
|
'pyarrow',
|
|
'connectorx',
|
|
'pyqtdarktheme',
|
|
],
|
|
hookspath=[],
|
|
hooksconfig={},
|
|
runtime_hooks=[],
|
|
excludes=[],
|
|
win_no_prefer_redirects=False,
|
|
win_private_assemblies=False,
|
|
cipher=block_cipher,
|
|
noarchive=False,
|
|
)
|
|
|
|
pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
|
|
|
|
exe = EXE(
|
|
pyz,
|
|
a.scripts,
|
|
[],
|
|
exclude_binaries=True,
|
|
name='DocuMentor',
|
|
debug=False,
|
|
bootloader_ignore_signals=False,
|
|
strip=False,
|
|
upx=True,
|
|
console=False, # Keine Konsole anzeigen (GUI-Anwendung)
|
|
disable_windowed_traceback=False,
|
|
argv_emulation=False,
|
|
target_arch=None,
|
|
codesign_identity=None,
|
|
entitlements_file=None,
|
|
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,
|
|
)
|
|
|
|
coll = COLLECT(
|
|
exe,
|
|
a.binaries,
|
|
a.zipfiles,
|
|
a.datas,
|
|
strip=False,
|
|
upx=True,
|
|
upx_exclude=[],
|
|
name='DocuMentor',
|
|
)
|