298 lines
8.2 KiB
Markdown
298 lines
8.2 KiB
Markdown
|
|
# AZA Desktop – Entwicklungs-Setup auf neuem PC
|
|||
|
|
|
|||
|
|
Stand: 2026-03-23
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 1. Voraussetzungen installieren
|
|||
|
|
|
|||
|
|
### 1.1 Python 3.12.x
|
|||
|
|
|
|||
|
|
**Empfohlen: Python 3.12.10** (aktuell getestet und verwendet).
|
|||
|
|
|
|||
|
|
- Download: https://www.python.org/downloads/release/python-31210/
|
|||
|
|
- **Windows installer (64-bit)** wählen
|
|||
|
|
- Bei Installation: **"Add Python to PATH"** aktivieren
|
|||
|
|
- **"Install for all users"** empfohlen
|
|||
|
|
|
|||
|
|
> **Warum 3.12?** Das Projekt verwendet aktuell Python 3.12.10. PyInstaller 6.13.0 und alle Abhängigkeiten sind damit getestet. Python 3.13 ist noch nicht validiert. Python 3.11 würde vermutlich funktionieren, ist aber nicht aktuell getestet.
|
|||
|
|
|
|||
|
|
### 1.2 ffmpeg
|
|||
|
|
|
|||
|
|
Wird für Audio-/Diktat-Funktionen benötigt.
|
|||
|
|
|
|||
|
|
```powershell
|
|||
|
|
winget install Gyan.FFmpeg
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Alternativ: https://www.gyan.dev/ffmpeg/builds/ (full build) und manuell zum PATH hinzufügen.
|
|||
|
|
|
|||
|
|
**Prüfen:**
|
|||
|
|
```powershell
|
|||
|
|
ffmpeg -version
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 1.3 Inno Setup 6 (nur für Installer-Build)
|
|||
|
|
|
|||
|
|
- Download: https://jrsoftware.org/isdl.php
|
|||
|
|
- Standard-Installation durchführen
|
|||
|
|
- Wird nur benötigt, wenn der Windows-Installer gebaut werden soll
|
|||
|
|
- `build_installer.ps1` kann Inno Setup auch automatisch nachinstallieren
|
|||
|
|
|
|||
|
|
### 1.4 Cursor IDE
|
|||
|
|
|
|||
|
|
- Download: https://cursor.sh
|
|||
|
|
- Nach Installation den Projektordner öffnen
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 2. Projekt einrichten
|
|||
|
|
|
|||
|
|
### 2.1 Projektordner entpacken/kopieren
|
|||
|
|
|
|||
|
|
Den gesamten Projektordner (z. B. `backup 24.2.26`) an einen beliebigen Ort kopieren. Beispiel:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
C:\Users\<USERNAME>\Documents\AZA\backup 24.2.26\
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2.2 Virtuelle Umgebung erstellen
|
|||
|
|
|
|||
|
|
```powershell
|
|||
|
|
cd "C:\Users\<USERNAME>\Documents\AZA\backup 24.2.26"
|
|||
|
|
python -m venv .venv
|
|||
|
|
.\.venv\Scripts\Activate.ps1
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
> Falls die Aktivierung fehlschlägt (ExecutionPolicy):
|
|||
|
|
> ```powershell
|
|||
|
|
> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
|
|||
|
|
> ```
|
|||
|
|
|
|||
|
|
### 2.3 Abhängigkeiten installieren
|
|||
|
|
|
|||
|
|
```powershell
|
|||
|
|
pip install -r requirements-dev.txt
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Wichtig:** `numpy` MUSS Version < 2.4 sein (aktuell 2.2.5). NumPy 2.4.x bricht den PyInstaller-Build mit `ModuleNotFoundError: No module named 'numpy._core._exceptions'`.
|
|||
|
|
|
|||
|
|
### 2.4 Konfigurationsdateien vorbereiten
|
|||
|
|
|
|||
|
|
#### `.env` (Backend-Secrets)
|
|||
|
|
|
|||
|
|
```powershell
|
|||
|
|
Copy-Item .env.example .env
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Dann `.env` bearbeiten und echte Werte eintragen:
|
|||
|
|
- `STRIPE_SECRET_KEY` – Stripe Test-/Live-Key
|
|||
|
|
- `STRIPE_WEBHOOK_SECRET` – Stripe Webhook-Secret
|
|||
|
|
- `MEDWORK_API_TOKEN` / `MEDWORK_API_TOKENS` – Backend-API-Token
|
|||
|
|
|
|||
|
|
#### `config\aza_runtime.env` (OpenAI-Key)
|
|||
|
|
|
|||
|
|
```powershell
|
|||
|
|
# Falls Ordner nicht existiert:
|
|||
|
|
New-Item -ItemType Directory -Force -Path config
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
In `config\aza_runtime.env` den OpenAI-Key eintragen:
|
|||
|
|
```
|
|||
|
|
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### `backend_url.txt`
|
|||
|
|
|
|||
|
|
Enthält die Backend-URL. Für lokale Entwicklung:
|
|||
|
|
```
|
|||
|
|
http://127.0.0.1:8000
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### `backend_token.txt`
|
|||
|
|
|
|||
|
|
Muss den gleichen Token enthalten wie `MEDWORK_API_TOKEN` in `.env`.
|
|||
|
|
|
|||
|
|
#### `license_url.txt`
|
|||
|
|
|
|||
|
|
Enthält die License-Server-URL. Für lokale Entwicklung:
|
|||
|
|
```
|
|||
|
|
http://127.0.0.1:9000
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 3. Pfade in Build-Dateien anpassen
|
|||
|
|
|
|||
|
|
### 3.1 `aza_desktop.spec`
|
|||
|
|
|
|||
|
|
In Zeile 6 den `project_root`-Pfad anpassen:
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
project_root = Path(r"C:\Users\<USERNAME>\Documents\AZA\backup 24.2.26")
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3.2 `build_exe.ps1`
|
|||
|
|
|
|||
|
|
In Zeile 1 den Pfad anpassen:
|
|||
|
|
|
|||
|
|
```powershell
|
|||
|
|
$projectRoot = "C:\Users\<USERNAME>\Documents\AZA\backup 24.2.26"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3.3 `build_installer.ps1`
|
|||
|
|
|
|||
|
|
In Zeile 1 den Pfad anpassen:
|
|||
|
|
|
|||
|
|
```powershell
|
|||
|
|
$projectRoot = "C:\Users\<USERNAME>\Documents\AZA\backup 24.2.26"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3.4 `installer\aza_installer.iss`
|
|||
|
|
|
|||
|
|
In Zeile 7 und anderen Stellen die Pfade anpassen:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
#define MyAppSourceDir "C:\Users\<USERNAME>\Documents\AZA\backup 24.2.26\dist\aza_desktop"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Sowie die Pfade für `OutputDir` und `SetupIconFile`.
|
|||
|
|
|
|||
|
|
> **Tipp:** Suche in allen `.ps1`, `.spec` und `.iss` Dateien nach dem alten Pfad `C:\Users\surov\Documents\AZA\backup 24.2.26` und ersetze ihn.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 4. Entwicklung starten
|
|||
|
|
|
|||
|
|
### 4.1 Self-Check ausführen
|
|||
|
|
|
|||
|
|
```powershell
|
|||
|
|
.\check_dev_environment.ps1
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Alle Punkte sollten PASS zeigen.
|
|||
|
|
|
|||
|
|
### 4.2 App im Development-Modus starten
|
|||
|
|
|
|||
|
|
```powershell
|
|||
|
|
.\start_dev.ps1
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Oder manuell:
|
|||
|
|
|
|||
|
|
```powershell
|
|||
|
|
.\.venv\Scripts\Activate.ps1
|
|||
|
|
python basis14.py
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 4.3 Nur Backend starten
|
|||
|
|
|
|||
|
|
```powershell
|
|||
|
|
.\.venv\Scripts\Activate.ps1
|
|||
|
|
python -c "import uvicorn; uvicorn.run('backend_main:app', host='127.0.0.1', port=8000)"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 5. Build erstellen
|
|||
|
|
|
|||
|
|
### 5.1 EXE-Build (PyInstaller)
|
|||
|
|
|
|||
|
|
```powershell
|
|||
|
|
.\build_exe.ps1
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Oder manuell:
|
|||
|
|
|
|||
|
|
```powershell
|
|||
|
|
.\.venv\Scripts\Activate.ps1
|
|||
|
|
pyinstaller aza_desktop.spec --noconfirm
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Ergebnis: `dist\aza_desktop\aza_desktop.exe`
|
|||
|
|
|
|||
|
|
### 5.2 Installer-Build (Inno Setup)
|
|||
|
|
|
|||
|
|
**Voraussetzung:** EXE-Build muss zuerst erfolgreich sein.
|
|||
|
|
|
|||
|
|
```powershell
|
|||
|
|
.\build_installer.ps1
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Ergebnis: `dist\installer\aza_desktop_setup.exe`
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 6. Bekannte Stolpersteine
|
|||
|
|
|
|||
|
|
| Problem | Ursache | Lösung |
|
|||
|
|
|---------|---------|--------|
|
|||
|
|
| `ModuleNotFoundError: numpy._core._exceptions` | numpy >= 2.4 inkompatibel mit PyInstaller 6.13.0 | `pip install "numpy==2.2.5"` |
|
|||
|
|
| PowerShell `&&` Operator unbekannt | PS 5.x kennt `&&` nicht | Befehle mit `;` trennen oder separate Aufrufe |
|
|||
|
|
| Inno Setup nicht gefunden | Nicht installiert | `build_installer.ps1` installiert automatisch |
|
|||
|
|
| `ffmpeg` nicht gefunden | Nicht im PATH | `winget install Gyan.FFmpeg` oder manuell installieren |
|
|||
|
|
| Linter-Warnungen (bcrypt, pyotp etc.) | Optionale Pakete / C-Extensions | Harmlos, ignorierbar |
|
|||
|
|
| `.env` fehlt | Nicht mit exportiert (Secrets!) | `.env.example` kopieren und Werte eintragen |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 7. Projektstruktur (Übersicht)
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
backup 24.2.26/
|
|||
|
|
├── basis14.py # Haupt-Desktop-App (Tkinter GUI)
|
|||
|
|
├── backend_main.py # FastAPI-Backend
|
|||
|
|
├── aza_*.py # Modulare Mixins und Hilfsmodule
|
|||
|
|
├── apps/diktat/ # Diktat-/Audio-Sub-App
|
|||
|
|
├── services/ # Backend-Services (Events, News, LLM)
|
|||
|
|
├── installer/ # Inno Setup Script
|
|||
|
|
├── deploy/ # Server-Deployment-Dateien
|
|||
|
|
├── security/ # Security-Handover-Docs
|
|||
|
|
├── legal/ # Rechtliche Dokumente
|
|||
|
|
├── data/ # Seed-Daten
|
|||
|
|
├── tools/ # Dev-Tools
|
|||
|
|
├── web/ # Web-Frontend (MVP)
|
|||
|
|
├── billing/ # Billing-Docs
|
|||
|
|
├── workforce_planner/ # Workforce-Planner-Modul
|
|||
|
|
├── aza_desktop.spec # PyInstaller Build-Spec
|
|||
|
|
├── build_exe.ps1 # EXE-Build-Script
|
|||
|
|
├── build_installer.ps1 # Installer-Build-Script
|
|||
|
|
├── start_dev.ps1 # Dev-Start-Script
|
|||
|
|
├── check_dev_environment.ps1 # Environment-Self-Check
|
|||
|
|
├── requirements-dev.txt # Gepinnte Abhängigkeiten
|
|||
|
|
├── .env.example # Env-Template (ohne Secrets)
|
|||
|
|
├── project_status.json # Projektstatus
|
|||
|
|
├── project_todos.json # Offene Aufgaben
|
|||
|
|
├── project_roadmap.json # Roadmap
|
|||
|
|
├── project_plan.json # Projektplan
|
|||
|
|
├── handover.md # Handover-Dokument
|
|||
|
|
├── project_handover.md # Projekt-Handover
|
|||
|
|
├── logo.ico / logo.png # App-Icon
|
|||
|
|
└── config/aza_runtime.env # OpenAI-Key (lokal, nicht exportiert)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 8. Secrets – was NICHT im Export enthalten ist
|
|||
|
|
|
|||
|
|
| Datei | Inhalt | Aktion auf neuem PC |
|
|||
|
|
|-------|--------|---------------------|
|
|||
|
|
| `.env` | Stripe-Keys, API-Tokens | Aus `.env.example` erzeugen, echte Werte eintragen |
|
|||
|
|
| `config/aza_runtime.env` | OpenAI API Key | Manuell eintragen |
|
|||
|
|
| `backend_token.txt` | Backend-Auth-Token | Muss zum Token in `.env` passen |
|
|||
|
|
| `deploy/.env` | Produktions-Secrets | Nur für Server-Deployment relevant |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 9. Audio-/Diktat-Abhängigkeiten im Detail
|
|||
|
|
|
|||
|
|
| Komponente | Typ | Paket | Hinweise |
|
|||
|
|
|-----------|------|-------|----------|
|
|||
|
|
| sounddevice | Python-Paket | `pip install sounddevice` | Nutzt PortAudio (in Paket enthalten) |
|
|||
|
|
| soundfile | Python-Paket | `pip install soundfile` | Nutzt libsndfile (in Paket enthalten) |
|
|||
|
|
| numpy | Python-Paket | `pip install "numpy==2.2.5"` | **MUSS < 2.4** für PyInstaller |
|
|||
|
|
| lameenc | Python-Paket | `pip install lameenc` | MP3-Encoding |
|
|||
|
|
| pygame | Python-Paket | `pip install pygame` | Audio-Playback |
|
|||
|
|
| ffmpeg | System-Tool | `winget install Gyan.FFmpeg` | Nicht Python, sondern extern im PATH |
|
|||
|
|
| pynput | Python-Paket | `pip install pynput` | Keyboard-Hotkeys für Diktat |
|