Initial commit
This commit is contained in:
commit
73e365d217
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,385 @@
|
|||
# PointCab Renamer - Benutzerhandbuch
|
||||
|
||||
**Version 4.1** | Datum: 14. Januar 2026
|
||||
|
||||
---
|
||||
|
||||
## Inhaltsverzeichnis
|
||||
|
||||
1. [Einführung](#einführung)
|
||||
2. [Installation](#installation)
|
||||
3. [Programmstart](#programmstart)
|
||||
4. [Die drei Modi](#die-drei-modi)
|
||||
- [Einzelprojekt-Modus](#einzelprojekt-modus)
|
||||
- [Batch-Modus](#batch-modus)
|
||||
- [Projekt-Merger](#projekt-merger)
|
||||
5. [Konfiguration](#konfiguration)
|
||||
6. [Troubleshooting](#troubleshooting)
|
||||
7. [FAQ](#faq)
|
||||
|
||||
---
|
||||
|
||||
## Einführung
|
||||
|
||||
### Was ist der PointCab Renamer?
|
||||
|
||||
Der **PointCab Renamer** ist ein Werkzeug zur automatischen Umbenennung von PointCab-Projektdateien. Es löst das Problem, dass PointCab-Scandateien oft kryptische Namen haben (z.B. `1.lsd`, `2.lsd`) und benennt diese nach einem einheitlichen Schema um:
|
||||
|
||||
**Format:** `[ClusterName]_[ScanName].[Erweiterung]`
|
||||
|
||||
**Beispiel:** `EG_Flur_scan001.lsd`
|
||||
|
||||
### Hauptfunktionen
|
||||
|
||||
- **Einzelprojekt-Modus**: Ein einzelnes PointCab-Projekt umbenennen
|
||||
- **Batch-Modus**: Mehrere Projekte gleichzeitig verarbeiten
|
||||
- **Projekt-Merger**: Mehrere Projekte in ein Zielprojekt zusammenführen
|
||||
- **Cluster-Bereinigung**: Automatische Entfernung von Suffixen wie `_re`, `_li` aus Clusternamen
|
||||
- **Detailliertes Logging**: Vollständige Protokollierung aller Änderungen
|
||||
|
||||
---
|
||||
|
||||
## Installation
|
||||
|
||||
### Windows
|
||||
|
||||
1. Laden Sie die Datei `pointcab_renamer.exe` herunter
|
||||
2. Speichern Sie die Datei in einem beliebigen Ordner (z.B. `C:\Tools\`)
|
||||
3. Kopieren Sie die `cluster_cleanup.txt` in denselben Ordner
|
||||
4. Starten Sie das Programm mit Doppelklick auf die `.exe`
|
||||
|
||||
### Ubuntu/Linux
|
||||
|
||||
1. Laden Sie die Datei `pointcab_renamer` herunter
|
||||
2. Speichern Sie die Datei in einem beliebigen Ordner (z.B. `/home/benutzer/tools/`)
|
||||
3. Kopieren Sie die `cluster_cleanup.txt` in denselben Ordner
|
||||
4. Machen Sie die Datei ausführbar:
|
||||
```bash
|
||||
chmod +x pointcab_renamer
|
||||
```
|
||||
5. Starten Sie das Programm:
|
||||
```bash
|
||||
./pointcab_renamer
|
||||
```
|
||||
|
||||
### Aus dem Quellcode (für Entwickler)
|
||||
|
||||
1. Stellen Sie sicher, dass Python 3.8+ installiert ist
|
||||
2. Laden Sie den Quellcode herunter
|
||||
3. Starten Sie mit:
|
||||
```bash
|
||||
python pointcab_renamer.py
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Programmstart
|
||||
|
||||
### Hauptmenü
|
||||
|
||||
Nach dem Start erscheint das Hauptmenü mit drei Optionen:
|
||||
|
||||
```
|
||||
╔═══════════════════════════════════════════╗
|
||||
║ PointCab Renamer v4.1 ║
|
||||
╠═══════════════════════════════════════════╣
|
||||
║ ║
|
||||
║ [Einzelprojekt umbenennen] ║
|
||||
║ ║
|
||||
║ [Batch-Verarbeitung] ║
|
||||
║ ║
|
||||
║ [Projekt Merger] ║
|
||||
║ ║
|
||||
╚═══════════════════════════════════════════╝
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Die drei Modi
|
||||
|
||||
### Einzelprojekt-Modus
|
||||
|
||||
**Verwendung:** Wenn Sie ein einzelnes PointCab-Projekt umbenennen möchten.
|
||||
|
||||
#### Schritt-für-Schritt-Anleitung
|
||||
|
||||
1. Klicken Sie auf **"Einzelprojekt umbenennen"**
|
||||
2. Wählen Sie die **LSDX-Projektdatei** aus (z.B. `Am_Upstall_4.lsdx`)
|
||||
3. Wählen Sie den **PointCloud-Ordner** aus (enthält die `.lsd` Dateien)
|
||||
4. Das Programm zeigt eine **Vorschau** der Änderungen:
|
||||
```
|
||||
Vorschau der Umbenennung:
|
||||
─────────────────────────
|
||||
1.lsd → EG_Flur_scan001.lsd
|
||||
2.lsd → EG_Flur_scan002.lsd
|
||||
3.lsd → OG_Bad_scan001.lsd
|
||||
...
|
||||
```
|
||||
5. Klicken Sie auf **"Umbenennen starten"**
|
||||
6. Nach Abschluss wird ein Protokoll angezeigt
|
||||
|
||||
#### Dateistruktur (Vorher → Nachher)
|
||||
|
||||
**Vorher:**
|
||||
```
|
||||
Am_Upstall_4_PointCloud/
|
||||
├── 1.lsd
|
||||
├── 2.lsd
|
||||
├── 3.lsd
|
||||
└── ...
|
||||
```
|
||||
|
||||
**Nachher:**
|
||||
```
|
||||
Am_Upstall_4_PointCloud/
|
||||
├── EG_Flur_scan001.lsd
|
||||
├── EG_Flur_scan002.lsd
|
||||
├── OG_Bad_scan001.lsd
|
||||
└── ...
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Batch-Modus
|
||||
|
||||
**Verwendung:** Wenn Sie mehrere PointCab-Projekte auf einmal verarbeiten möchten.
|
||||
|
||||
#### Schritt-für-Schritt-Anleitung
|
||||
|
||||
1. Klicken Sie auf **"Batch-Verarbeitung"**
|
||||
2. Wählen Sie den **Basisordner** aus, der alle Projekte enthält
|
||||
3. Das Programm erkennt automatisch alle PointCab-Projekte:
|
||||
```
|
||||
Gefundene Projekte:
|
||||
─────────────────────
|
||||
☑ Projekt_A (15 Scans)
|
||||
☑ Projekt_B (22 Scans)
|
||||
☑ Projekt_C (8 Scans)
|
||||
```
|
||||
4. Wählen Sie die gewünschten Projekte aus (oder behalten Sie alle ausgewählt)
|
||||
5. Klicken Sie auf **"Batch-Verarbeitung starten"**
|
||||
6. Der Fortschritt wird angezeigt:
|
||||
```
|
||||
Verarbeite Projekt 1/3: Projekt_A
|
||||
[████████████░░░░░░░░] 60%
|
||||
```
|
||||
7. Nach Abschluss wird eine Zusammenfassung angezeigt
|
||||
|
||||
#### Erwartete Ordnerstruktur
|
||||
|
||||
```
|
||||
Basisordner/
|
||||
├── Projekt_A/
|
||||
│ ├── Projekt_A.lsdx
|
||||
│ └── Projekt_A_PointCloud/
|
||||
│ ├── 1.lsd
|
||||
│ └── ...
|
||||
├── Projekt_B/
|
||||
│ ├── Projekt_B.lsdx
|
||||
│ └── Projekt_B_PointCloud/
|
||||
└── Projekt_C/
|
||||
├── Projekt_C.lsdx
|
||||
└── Projekt_C_PointCloud/
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Projekt-Merger
|
||||
|
||||
**Verwendung:** Wenn Sie mehrere PointCab-Projekte in ein einziges Projekt zusammenführen möchten.
|
||||
|
||||
#### Schritt-für-Schritt-Anleitung
|
||||
|
||||
1. Klicken Sie auf **"Projekt Merger"**
|
||||
2. Wählen Sie den **Modus**:
|
||||
- **Einzelprojekt zusammenführen**: Ein Quellprojekt → Zielprojekt
|
||||
- **Batch-Merge**: Mehrere Quellprojekte → Zielprojekt
|
||||
3. Wählen Sie das **Zielprojekt** (in das zusammengeführt wird)
|
||||
4. Wählen Sie das/die **Quellprojekt(e)**
|
||||
5. Das Programm zeigt eine **Vorschau** mit Konfliktauflösung:
|
||||
```
|
||||
Merge-Vorschau:
|
||||
─────────────────────
|
||||
Zielprojekt: Haupt_Projekt (5 Cluster, 25 Scans)
|
||||
Quellprojekt: Teil_A (2 Cluster, 10 Scans)
|
||||
|
||||
Zu übertragende Dateien:
|
||||
- EG_Flur_scan001.lsd
|
||||
- EG_Flur_scan002.lsd (Konflikt → EG_Flur_scan002_merged_1.lsd)
|
||||
- ...
|
||||
```
|
||||
6. Klicken Sie auf **"Merge starten"**
|
||||
7. Nach Abschluss werden die Statistiken angezeigt:
|
||||
```
|
||||
Merge abgeschlossen!
|
||||
─────────────────────
|
||||
Cluster vorher: 5 → nachher: 7
|
||||
Scans vorher: 25 → nachher: 35
|
||||
Dateien kopiert: 10
|
||||
Konflikte gelöst: 1
|
||||
```
|
||||
|
||||
#### Konfliktauflösung
|
||||
|
||||
Wenn eine Datei im Zielprojekt bereits existiert:
|
||||
- Die neue Datei wird umbenannt: `dateiname_merged_1.lsd`
|
||||
- Bei weiteren Konflikten: `dateiname_merged_2.lsd`, etc.
|
||||
- Die LSDX-Datei wird entsprechend aktualisiert
|
||||
|
||||
#### Wichtige Hinweise
|
||||
|
||||
- **Backup**: Das Zielprojekt wird vor dem Merge gesichert (`.lsdx.backup`)
|
||||
- **UUID-Regenerierung**: Alle übertragenen Elemente erhalten neue eindeutige IDs
|
||||
- **Cluster-Duplikate**: Gleichnamige Cluster werden zusammengeführt
|
||||
|
||||
---
|
||||
|
||||
## Konfiguration
|
||||
|
||||
### Die Datei cluster_cleanup.txt
|
||||
|
||||
Diese Konfigurationsdatei definiert, welche Suffixe aus Clusternamen entfernt werden sollen.
|
||||
|
||||
#### Speicherort
|
||||
|
||||
- **Windows**: Im selben Ordner wie `pointcab_renamer.exe`
|
||||
- **Linux**: Im selben Ordner wie `pointcab_renamer`
|
||||
|
||||
#### Format
|
||||
|
||||
```
|
||||
# Dies ist ein Kommentar
|
||||
_re
|
||||
_li
|
||||
_mi
|
||||
_mi-li
|
||||
_mi-re
|
||||
```
|
||||
|
||||
- Jede Zeile = ein zu entfernender String
|
||||
- Zeilen mit `#` am Anfang sind Kommentare
|
||||
- Leere Zeilen werden ignoriert
|
||||
|
||||
#### Beispiel
|
||||
|
||||
Mit der obigen Konfiguration:
|
||||
- `Flur_re` → `Flur`
|
||||
- `Bad_mi-li` → `Bad`
|
||||
- `Küche_li` → `Küche`
|
||||
|
||||
#### Konfiguration neu laden
|
||||
|
||||
Änderungen an `cluster_cleanup.txt` werden nach einem Neustart oder über den Button **"Konfiguration neu laden"** übernommen.
|
||||
|
||||
---
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Häufige Fehler und Lösungen
|
||||
|
||||
#### "LSDX-Datei nicht gefunden"
|
||||
|
||||
**Problem**: Das Programm kann die Projektdatei nicht finden.
|
||||
|
||||
**Lösung**:
|
||||
- Stellen Sie sicher, dass die `.lsdx`-Datei im Projektordner existiert
|
||||
- Prüfen Sie, ob Sie Leserechte für die Datei haben
|
||||
- Der Dateiname sollte mit `.lsdx` enden (nicht `.LSDX`)
|
||||
|
||||
#### "PointCloud-Ordner nicht gefunden"
|
||||
|
||||
**Problem**: Der Ordner mit den Scandaten fehlt.
|
||||
|
||||
**Lösung**:
|
||||
- Der Ordner muss `_PointCloud` im Namen haben
|
||||
- Beispiel: `Projekt_A_PointCloud`
|
||||
- Prüfen Sie die Ordnerstruktur
|
||||
|
||||
#### "Keine Projekte gefunden" (Batch-Modus)
|
||||
|
||||
**Problem**: Im Basisordner werden keine Projekte erkannt.
|
||||
|
||||
**Lösung**:
|
||||
- Jedes Projekt muss eine `.lsdx`-Datei und einen `_PointCloud`-Ordner haben
|
||||
- Der Projektname in der LSDX muss mit dem Ordnernamen übereinstimmen
|
||||
|
||||
#### "Zugriff verweigert"
|
||||
|
||||
**Problem**: Dateien können nicht umbenannt werden.
|
||||
|
||||
**Lösung**:
|
||||
- Schließen Sie PointCab
|
||||
- Prüfen Sie, ob andere Programme die Dateien verwenden
|
||||
- Unter Windows: Als Administrator ausführen
|
||||
- Unter Linux: Prüfen Sie die Dateiberechtigungen
|
||||
|
||||
#### "GUI startet nicht" (Linux)
|
||||
|
||||
**Problem**: Keine grafische Oberfläche unter Linux.
|
||||
|
||||
**Lösung**:
|
||||
- Installieren Sie tkinter: `sudo apt install python3-tk`
|
||||
- Stellen Sie sicher, dass ein Display verfügbar ist
|
||||
|
||||
---
|
||||
|
||||
## FAQ
|
||||
|
||||
### Allgemeine Fragen
|
||||
|
||||
**F: Werden die Originaldateien gelöscht?**
|
||||
|
||||
A: Nein, die Dateien werden nur umbenannt. Es werden keine Daten gelöscht.
|
||||
|
||||
**F: Kann ich die Umbenennung rückgängig machen?**
|
||||
|
||||
A: Die ursprünglichen Namen werden im Log-Datei protokolliert. Eine automatische Rückgängig-Funktion gibt es nicht.
|
||||
|
||||
**F: Funktioniert das Tool auch mit älteren PointCab-Versionen?**
|
||||
|
||||
A: Das Tool wurde für PointCab-Projekte mit LSDX-Format entwickelt. Ältere Formate werden möglicherweise nicht unterstützt.
|
||||
|
||||
**F: Wie viele Projekte kann ich im Batch-Modus verarbeiten?**
|
||||
|
||||
A: Es gibt keine feste Grenze. Die Verarbeitungszeit hängt von der Anzahl der Scans ab.
|
||||
|
||||
### Technische Fragen
|
||||
|
||||
**F: Wo werden die Log-Dateien gespeichert?**
|
||||
|
||||
A: Im Projektordner, mit dem Format:
|
||||
- Einzelprojekt: `rename_YYYYMMDD_HHMMSS.log`
|
||||
- Batch: `batch_YYYYMMDD_HHMMSS.log`
|
||||
- Merger: `merge_YYYYMMDD_HHMMSS.log`
|
||||
|
||||
**F: Was passiert bei einem Stromausfall während der Verarbeitung?**
|
||||
|
||||
A: Die bereits umbenannten Dateien bleiben umbenannt. Die LSDX-Datei wird erst nach erfolgreicher Umbenennung aktualisiert.
|
||||
|
||||
**F: Kann ich das Tool über die Kommandozeile nutzen?**
|
||||
|
||||
A: Aktuell nur mit grafischer Oberfläche. Kommandozeilen-Unterstützung ist für eine zukünftige Version geplant.
|
||||
|
||||
### Merger-Fragen
|
||||
|
||||
**F: Was passiert mit den Originalprojekten beim Merge?**
|
||||
|
||||
A: Die Quellprojekte werden nicht verändert. Dateien werden kopiert, nicht verschoben.
|
||||
|
||||
**F: Kann ich den Merge rückgängig machen?**
|
||||
|
||||
A: Die ursprüngliche LSDX wird als `.backup` gespeichert. Die kopierten Dateien müssen manuell gelöscht werden.
|
||||
|
||||
**F: Werden alle Unterordner (Previews, etc.) auch gemergt?**
|
||||
|
||||
A: Ja, alle relevanten Unterordner werden übertragen.
|
||||
|
||||
---
|
||||
|
||||
## Support
|
||||
|
||||
Bei Fragen oder Problemen wenden Sie sich an Ihren Administrator.
|
||||
|
||||
---
|
||||
|
||||
*PointCab Renamer v4.1 - © 2026*
|
||||
|
|
@ -0,0 +1,171 @@
|
|||
# Changelog - PointCab Renamer
|
||||
|
||||
Alle wichtigen Änderungen an diesem Projekt werden hier dokumentiert.
|
||||
|
||||
---
|
||||
|
||||
## [v4.2.1] - 2026-01-16
|
||||
|
||||
### Behoben
|
||||
- **build_linux.sh überarbeitet und getestet**
|
||||
- Verwendet `python3 -m PyInstaller` für bessere Kompatibilität
|
||||
- Verbesserte Voraussetzungsprüfungen
|
||||
- Bessere Fehlerbehandlung und Statusmeldungen
|
||||
- ✅ GETESTET: Funktioniert erfolgreich
|
||||
|
||||
- **build_windows_wine.sh überarbeitet**
|
||||
- Bessere Erkennung von Headless-Umgebungen
|
||||
- Automatische Xvfb-Unterstützung falls verfügbar
|
||||
- Klare Warnungen zu Wine-Einschränkungen
|
||||
- Hilfreiche Alternativ-Vorschläge bei Fehlern
|
||||
- ⚠️ HINWEIS: Wine-Builds in Headless-Umgebungen oft problematisch
|
||||
|
||||
### Dokumentation
|
||||
- Build-Skript-Versionsnummern auf 4.2.1 aktualisiert
|
||||
- DEPLOYMENT.md mit Testergebnissen aktualisiert
|
||||
|
||||
### Bekannte Einschränkungen
|
||||
- Wine-basierte Windows-Builds funktionieren nicht zuverlässig auf Headless-Servern
|
||||
- Empfehlung: Windows .exe auf echtem Windows-System erstellen
|
||||
|
||||
---
|
||||
|
||||
## [v4.2] - 2026-01-16
|
||||
|
||||
### Behoben
|
||||
- **Windows build_windows.bat komplett überarbeitet**
|
||||
- Verwendet jetzt `py` statt `python` (Python Launcher für Windows)
|
||||
- Verwendet `py -m PyInstaller` statt direktem `pyinstaller`-Aufruf
|
||||
- Korrekte --add-data Syntax für Windows (Semikolon als Trennzeichen)
|
||||
- Verbesserte Fehlerbehandlung und Statusmeldungen
|
||||
|
||||
- **cluster_cleanup.txt Parser verbessert**
|
||||
- Unterstützt jetzt UTF-8-BOM (von Windows-Editoren erzeugt)
|
||||
- Robustere Behandlung von Leerzeilen und Kommentaren
|
||||
- Gibt jetzt Anzahl geladener Einträge aus
|
||||
|
||||
### Hinzugefügt
|
||||
- **cluster_cleanup.txt erweitert**
|
||||
- Neue Einträge: `_part_1`, `_part_2`, `_part_3`, `_part_4`, `_part_5`
|
||||
|
||||
- **Git-Repository Setup**
|
||||
- `.gitignore` für sauberes Repository
|
||||
- `GIT_SETUP.md` mit Anleitung für Gitea/GitHub Push
|
||||
|
||||
### Dokumentation
|
||||
- VERSION.txt aktualisiert
|
||||
- CHANGELOG.md erweitert
|
||||
|
||||
---
|
||||
|
||||
## [v4.1.1] - 2026-01-14
|
||||
|
||||
### Hinzugefügt
|
||||
- **Cross-Compilation-Unterstützung**: Windows .exe unter Linux erstellen
|
||||
- `build_windows_on_linux.sh`: Docker-basiertes Build (empfohlen)
|
||||
- `build_windows_wine.sh`: Wine-basiertes Build (Fallback)
|
||||
- GitHub Actions Workflow-Beispiel für automatisierte Builds
|
||||
|
||||
### Dokumentation
|
||||
- DEPLOYMENT.md um Cross-Compilation-Sektion erweitert
|
||||
- Schritt-für-Schritt-Anleitung für Docker-Methode
|
||||
- Troubleshooting für häufige Probleme
|
||||
- Vergleichstabelle der Build-Methoden
|
||||
- README.md mit Build-Optionen aktualisiert
|
||||
|
||||
---
|
||||
|
||||
## [v4.1] - 2026-01-14
|
||||
|
||||
### Behoben
|
||||
- **Projektmerger LSDx-Zusammenführung komplett überarbeitet**
|
||||
- Cluster-Duplikat-Erkennung: Verhindert doppelte Cluster bei gleichem Namen
|
||||
- Scans werden korrekt dem existierenden oder neuen Cluster zugeordnet
|
||||
- Parent-Referenzen werden korrekt gesetzt (Cluster→Registration, Scan→Cluster)
|
||||
- Detailliertes Logging aller Merge-Operationen
|
||||
- Finale Scan/Cluster-Statistik nach Merge
|
||||
|
||||
### Verbessert
|
||||
- LSDX-Struktur im Code dokumentiert
|
||||
- Verbesserte Fehlerbehandlung beim Merge
|
||||
|
||||
---
|
||||
|
||||
## [v4.0] - 2026-01-10
|
||||
|
||||
### Hinzugefügt
|
||||
- **Projekt Merger**: Neuer Modus zum Zusammenführen mehrerer PointCab-Projekte
|
||||
- Einzelprojekt-Merge: Ein Quellprojekt → Zielprojekt
|
||||
- Batch-Merge: Mehrere Quellprojekte → Zielprojekt
|
||||
- Intelligente Konfliktauflösung mit `_merged_N` Suffix
|
||||
- Vollständige LSDX-Zusammenführung (Cluster, Scans, Dateireferenzen)
|
||||
- UUID-Regenerierung für alle übertragenen Elemente
|
||||
- Automatisches Backup der Ziel-LSDX vor dem Merge
|
||||
|
||||
### Verbessert
|
||||
- Neue GUI für den Merger mit Konfliktvorschau
|
||||
- Batch-Merge mit Fortschrittsanzeige
|
||||
|
||||
---
|
||||
|
||||
## [v3.1] - 2026-01-05
|
||||
|
||||
### Geändert
|
||||
- **Neues Namensformat**: `[ClusterName]_[ScanName].[Erweiterung]`
|
||||
- Vorher: `[ClusterName].[Erweiterung]`
|
||||
- Nachher: `EG_Flur_scan001.lsd`
|
||||
- Scan-Namen werden aus der LSDX extrahiert
|
||||
- Cluster-Nummer-Duplikate werden vermieden
|
||||
|
||||
---
|
||||
|
||||
## [v3.0] - 2025-12-20
|
||||
|
||||
### Hinzugefügt
|
||||
- **Batch-Verarbeitung**: Mehrere Projekte gleichzeitig umbenennen
|
||||
- Automatische Projekterkennung im Basisordner
|
||||
- Selektive Projektauswahl
|
||||
- Fortschrittsanzeige für Batch-Operationen
|
||||
- Zusammenfassendes Batch-Log
|
||||
|
||||
### Verbessert
|
||||
- GUI-Umstrukturierung mit Hauptmenü
|
||||
- Verbesserte Fehlerbehandlung bei Dateioperationen
|
||||
|
||||
---
|
||||
|
||||
## [v2.0] - 2025-12-01
|
||||
|
||||
### Hinzugefügt
|
||||
- **Cluster-Bereinigung**: Automatische Entfernung von Suffixen
|
||||
- Konfigurierbar über `cluster_cleanup.txt`
|
||||
- Entfernt `_re`, `_li`, `_mi`, etc.
|
||||
- Button "Konfiguration neu laden"
|
||||
|
||||
### Verbessert
|
||||
- Verbesserte Vorschau der Umbenennung
|
||||
- Detaillierteres Logging
|
||||
|
||||
---
|
||||
|
||||
## [v1.0] - 2025-11-15
|
||||
|
||||
### Erstveröffentlichung
|
||||
- Grundfunktion: LSDX-Dateien einlesen
|
||||
- Scans aus PointCloud-Ordner umbenennen
|
||||
- Grafische Benutzeroberfläche (tkinter)
|
||||
- Vorschau vor Umbenennung
|
||||
- Log-Datei-Erstellung
|
||||
|
||||
---
|
||||
|
||||
## Geplante Features
|
||||
|
||||
- [ ] Kommandozeilen-Unterstützung (CLI-Modus)
|
||||
- [ ] Rückgängig-Funktion für Umbenennungen
|
||||
- [ ] Automatische Updates
|
||||
- [ ] Mehrsprachige Unterstützung (Englisch)
|
||||
|
||||
---
|
||||
|
||||
*Hinweis: Dieses Changelog folgt dem Format von [Keep a Changelog](https://keepachangelog.com/).*
|
||||
|
|
@ -0,0 +1,592 @@
|
|||
# PointCab Renamer - Deployment-Anleitung
|
||||
|
||||
**Version 4.2.1** | Datum: 16. Januar 2026
|
||||
|
||||
---
|
||||
|
||||
## Build-Status (Testergebnisse 2026-01-16)
|
||||
|
||||
| Build-Methode | Status | Hinweise |
|
||||
|---------------|--------|----------|
|
||||
| `build_windows.bat` | ✅ Funktioniert | Empfohlen auf Windows |
|
||||
| `build_linux.sh` | ✅ Getestet | Funktioniert auf Ubuntu 20.04+ |
|
||||
| `build_windows_wine.sh` | ⚠️ Experimentell | Fehlschläge auf Headless-Servern möglich |
|
||||
| `build_windows_on_linux.sh` | ⚠️ Docker | Nicht in Docker-in-Docker möglich |
|
||||
|
||||
---
|
||||
|
||||
## Übersicht
|
||||
|
||||
Diese Anleitung beschreibt, wie Sie aus dem Python-Quellcode ausführbare Dateien für Windows (.exe) und Ubuntu (Binary) erstellen.
|
||||
|
||||
---
|
||||
|
||||
## Voraussetzungen
|
||||
|
||||
### Benötigte Software
|
||||
|
||||
| Komponente | Windows | Ubuntu |
|
||||
|------------|---------|--------|
|
||||
| Python | 3.8+ | 3.8+ |
|
||||
| PyInstaller | 5.0+ | 5.0+ |
|
||||
| tkinter | (in Python enthalten) | `python3-tk` |
|
||||
|
||||
### Installation der Voraussetzungen
|
||||
|
||||
#### Windows
|
||||
|
||||
1. **Python installieren:**
|
||||
- Laden Sie Python von https://www.python.org/downloads/ herunter
|
||||
- Bei der Installation: ☑ "Add Python to PATH" aktivieren
|
||||
|
||||
2. **PyInstaller installieren:**
|
||||
```cmd
|
||||
pip install pyinstaller
|
||||
```
|
||||
|
||||
#### Ubuntu
|
||||
|
||||
1. **Python und tkinter installieren:**
|
||||
```bash
|
||||
sudo apt update
|
||||
sudo apt install python3 python3-pip python3-tk
|
||||
```
|
||||
|
||||
2. **PyInstaller installieren:**
|
||||
```bash
|
||||
pip3 install pyinstaller
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Windows-Build (.exe)
|
||||
|
||||
### Automatisch (empfohlen)
|
||||
|
||||
1. Öffnen Sie eine Eingabeaufforderung (cmd)
|
||||
2. Navigieren Sie zum Projektordner:
|
||||
```cmd
|
||||
cd C:\Pfad\zum\pointcab_renamer
|
||||
```
|
||||
3. Führen Sie das Build-Skript aus:
|
||||
```cmd
|
||||
build_windows.bat
|
||||
```
|
||||
4. Die fertige `.exe` finden Sie im Ordner `dist\pointcab_renamer\`
|
||||
|
||||
### Manuell
|
||||
|
||||
1. Öffnen Sie eine Eingabeaufforderung
|
||||
2. Navigieren Sie zum Quellcode-Ordner
|
||||
3. Führen Sie PyInstaller aus:
|
||||
```cmd
|
||||
pyinstaller --onefile --windowed --name "PointCab_Renamer" ^<br> --add-data "cluster_cleanup.txt;." ^<br> pointcab_renamer.py
|
||||
```
|
||||
4. Die `.exe` befindet sich in `dist\PointCab_Renamer.exe`
|
||||
|
||||
### PyInstaller-Optionen erklärt
|
||||
|
||||
| Option | Beschreibung |
|
||||
|--------|-------------|
|
||||
| `--onefile` | Alles in eine einzige .exe packen |
|
||||
| `--windowed` | Kein Konsolenfenster anzeigen |
|
||||
| `--name` | Name der Ausgabedatei |
|
||||
| `--add-data` | Zusätzliche Dateien einbinden |
|
||||
| `--icon` | (Optional) Icon-Datei (.ico) |
|
||||
|
||||
### Bekannte Probleme unter Windows
|
||||
|
||||
**Problem:** Antivirus blockiert die .exe
|
||||
|
||||
**Lösung:** Die erstellte .exe als Ausnahme hinzufügen oder signieren.
|
||||
|
||||
**Problem:** "DLL nicht gefunden"
|
||||
|
||||
**Lösung:** Visual C++ Redistributable installieren.
|
||||
|
||||
---
|
||||
|
||||
## Ubuntu-Build (Binary)
|
||||
|
||||
### Automatisch (empfohlen)
|
||||
|
||||
1. Öffnen Sie ein Terminal
|
||||
2. Navigieren Sie zum Projektordner:
|
||||
```bash
|
||||
cd /pfad/zum/pointcab_renamer
|
||||
```
|
||||
3. Machen Sie das Build-Skript ausführbar und führen Sie es aus:
|
||||
```bash
|
||||
chmod +x build_linux.sh
|
||||
./build_linux.sh
|
||||
```
|
||||
4. Das fertige Binary finden Sie im Ordner `dist/`
|
||||
|
||||
### Manuell
|
||||
|
||||
1. Öffnen Sie ein Terminal
|
||||
2. Navigieren Sie zum Quellcode-Ordner
|
||||
3. Führen Sie PyInstaller aus:
|
||||
```bash
|
||||
pyinstaller --onefile --name "pointcab_renamer" \
|
||||
--add-data "cluster_cleanup.txt:." \
|
||||
pointcab_renamer.py
|
||||
```
|
||||
4. Das Binary befindet sich in `dist/pointcab_renamer`
|
||||
5. Machen Sie es ausführbar:
|
||||
```bash
|
||||
chmod +x dist/pointcab_renamer
|
||||
```
|
||||
|
||||
### Bekannte Probleme unter Ubuntu
|
||||
|
||||
**Problem:** "No display name and no $DISPLAY environment variable"
|
||||
|
||||
**Lösung:** Das Binary muss in einer grafischen Umgebung gestartet werden, nicht über SSH.
|
||||
|
||||
**Problem:** "_tkinter not found"
|
||||
|
||||
**Lösung:** `sudo apt install python3-tk`
|
||||
|
||||
---
|
||||
|
||||
## Cross-Compilation: Windows .exe unter Linux erstellen
|
||||
|
||||
Es gibt mehrere Möglichkeiten, eine Windows .exe unter Linux zu erstellen, ohne Windows zu installieren.
|
||||
|
||||
### Methode 1: Docker (Empfohlen)
|
||||
|
||||
Die Docker-Methode ist die zuverlässigste und reproduzierbarste Option.
|
||||
|
||||
#### Voraussetzungen
|
||||
|
||||
1. **Docker installieren:**
|
||||
```bash
|
||||
sudo apt update
|
||||
sudo apt install docker.io
|
||||
sudo systemctl start docker
|
||||
sudo systemctl enable docker
|
||||
```
|
||||
|
||||
2. **Benutzer zur docker-Gruppe hinzufügen:**
|
||||
```bash
|
||||
sudo usermod -aG docker $USER
|
||||
# Danach neu einloggen oder:
|
||||
newgrp docker
|
||||
```
|
||||
|
||||
3. **Docker-Installation testen:**
|
||||
```bash
|
||||
docker run hello-world
|
||||
```
|
||||
|
||||
#### Verwendung
|
||||
|
||||
1. Navigieren Sie zum Projektordner:
|
||||
```bash
|
||||
cd /pfad/zum/pointcab_renamer
|
||||
```
|
||||
|
||||
2. Führen Sie das Build-Skript aus:
|
||||
```bash
|
||||
./build_windows_on_linux.sh
|
||||
```
|
||||
|
||||
3. Die fertige `.exe` befindet sich in `dist/PointCab_Renamer.exe`
|
||||
|
||||
#### Was das Skript macht
|
||||
|
||||
1. Prüft Docker-Installation und -Status
|
||||
2. Lädt das `cdrx/pyinstaller-windows` Docker-Image (beim ersten Mal)
|
||||
3. Startet einen Container mit Windows-Umgebung
|
||||
4. Führt PyInstaller im Container aus
|
||||
5. Kopiert die .exe und Zusatzdateien nach `dist/`
|
||||
|
||||
#### Vorteile der Docker-Methode
|
||||
|
||||
- ✅ Zuverlässig und reproduzierbar
|
||||
- ✅ Isolierte Build-Umgebung
|
||||
- ✅ Keine manuelle Windows-Python-Installation
|
||||
- ✅ Gleiche Ergebnisse wie auf echtem Windows
|
||||
- ✅ Einfach in CI/CD-Pipelines integrierbar
|
||||
|
||||
#### Troubleshooting Docker
|
||||
|
||||
**Problem:** "Permission denied" beim Docker-Aufruf
|
||||
|
||||
**Lösung:**
|
||||
```bash
|
||||
sudo usermod -aG docker $USER
|
||||
# Neu einloggen erforderlich!
|
||||
```
|
||||
|
||||
**Problem:** Docker-Image-Download schlägt fehl
|
||||
|
||||
**Lösung:** Proxy-Einstellungen prüfen oder manuell herunterladen:
|
||||
```bash
|
||||
docker pull cdrx/pyinstaller-windows:python3
|
||||
```
|
||||
|
||||
**Problem:** Container startet nicht
|
||||
|
||||
**Lösung:** Docker-Daemon prüfen:
|
||||
```bash
|
||||
sudo systemctl status docker
|
||||
sudo systemctl restart docker
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Methode 2: Wine (Fallback)
|
||||
|
||||
Die Wine-Methode ist weniger zuverlässig, kann aber ohne Docker verwendet werden.
|
||||
|
||||
#### Voraussetzungen
|
||||
|
||||
1. **Wine installieren:**
|
||||
```bash
|
||||
sudo dpkg --add-architecture i386
|
||||
sudo apt update
|
||||
sudo apt install wine64 wine32
|
||||
```
|
||||
|
||||
2. **Installation prüfen:**
|
||||
```bash
|
||||
wine --version
|
||||
```
|
||||
|
||||
#### Verwendung
|
||||
|
||||
1. Navigieren Sie zum Projektordner:
|
||||
```bash
|
||||
cd /pfad/zum/pointcab_renamer
|
||||
```
|
||||
|
||||
2. Führen Sie das Build-Skript aus:
|
||||
```bash
|
||||
./build_windows_wine.sh
|
||||
```
|
||||
|
||||
3. Das Skript installiert automatisch:
|
||||
- Windows-Python in Wine
|
||||
- PyInstaller
|
||||
|
||||
#### Einschränkungen der Wine-Methode
|
||||
|
||||
- ⚠️ Nicht alle Windows-Funktionen werden unterstützt
|
||||
- ⚠️ Kann bei komplexen Abhängigkeiten fehlschlagen
|
||||
- ⚠️ Langsamerer Build-Prozess
|
||||
- ⚠️ Ergebnisse können von echter Windows-Build abweichen
|
||||
|
||||
---
|
||||
|
||||
### Methode 3: GitHub Actions (Automatisiert)
|
||||
|
||||
Für regelmäßige Builds können Sie GitHub Actions verwenden.
|
||||
|
||||
Erstellen Sie `.github/workflows/build.yml`:
|
||||
|
||||
```yaml
|
||||
name: Build Windows Executable
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- 'v*'
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
build-windows:
|
||||
runs-on: windows-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: '3.10'
|
||||
|
||||
- name: Install dependencies
|
||||
run: pip install pyinstaller
|
||||
|
||||
- name: Build executable
|
||||
run: |
|
||||
pyinstaller --onefile --windowed --name "PointCab_Renamer" `
|
||||
--add-data "cluster_cleanup.txt;." `
|
||||
--add-data "BENUTZERHANDBUCH.md;." `
|
||||
pointcab_renamer.py
|
||||
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: PointCab_Renamer_Windows
|
||||
path: |
|
||||
dist/PointCab_Renamer.exe
|
||||
cluster_cleanup.txt
|
||||
BENUTZERHANDBUCH.md
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Vergleich der Cross-Compilation-Methoden
|
||||
|
||||
| Methode | Zuverlässigkeit | Geschwindigkeit | Aufwand |
|
||||
|---------|-----------------|-----------------|---------|
|
||||
| Docker | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | Niedrig |
|
||||
| Wine | ⭐⭐ | ⭐⭐ | Mittel |
|
||||
| GitHub Actions | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | Niedrig |
|
||||
| Echtes Windows | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | Hoch (VM) |
|
||||
|
||||
**Empfehlung:** Verwenden Sie die Docker-Methode für lokale Builds und GitHub Actions für automatisierte Release-Builds.
|
||||
|
||||
---
|
||||
|
||||
## Testen der Executables
|
||||
|
||||
### Windows-Test
|
||||
|
||||
1. Kopieren Sie die `.exe` und `cluster_cleanup.txt` in einen Testordner
|
||||
2. Doppelklicken Sie auf die `.exe`
|
||||
3. Das Hauptmenü sollte erscheinen
|
||||
4. Testen Sie alle drei Modi mit einem Testprojekt
|
||||
|
||||
### Ubuntu-Test
|
||||
|
||||
1. Kopieren Sie das Binary und `cluster_cleanup.txt` in einen Testordner
|
||||
2. Starten Sie das Programm:
|
||||
```bash
|
||||
./pointcab_renamer
|
||||
```
|
||||
3. Das Hauptmenü sollte erscheinen
|
||||
4. Testen Sie alle drei Modi mit einem Testprojekt
|
||||
|
||||
### Checkliste für Tests
|
||||
|
||||
- [ ] Programm startet ohne Fehler
|
||||
- [ ] Hauptmenü wird angezeigt
|
||||
- [ ] LSDX-Datei kann ausgewählt werden
|
||||
- [ ] PointCloud-Ordner wird erkannt
|
||||
- [ ] Vorschau wird korrekt angezeigt
|
||||
- [ ] Umbenennung funktioniert
|
||||
- [ ] LSDX wird aktualisiert
|
||||
- [ ] Log-Datei wird erstellt
|
||||
- [ ] Batch-Modus funktioniert
|
||||
- [ ] Merger funktioniert
|
||||
|
||||
---
|
||||
|
||||
## Distribution an Mitarbeiter
|
||||
|
||||
### Bereitstellung
|
||||
|
||||
1. **Für Windows:**
|
||||
- Kopieren Sie diese Dateien in einen Ordner:
|
||||
- `PointCab_Renamer.exe`
|
||||
- `cluster_cleanup.txt`
|
||||
- `BENUTZERHANDBUCH.md` (oder als PDF)
|
||||
- Erstellen Sie ein ZIP-Archiv
|
||||
- Verteilen Sie über Netzlaufwerk oder E-Mail
|
||||
|
||||
2. **Für Ubuntu:**
|
||||
- Kopieren Sie diese Dateien in einen Ordner:
|
||||
- `pointcab_renamer`
|
||||
- `cluster_cleanup.txt`
|
||||
- `BENUTZERHANDBUCH.md`
|
||||
- Erstellen Sie ein tar.gz-Archiv:
|
||||
```bash
|
||||
tar -czvf pointcab_renamer_linux.tar.gz pointcab_renamer cluster_cleanup.txt BENUTZERHANDBUCH.md
|
||||
```
|
||||
- Verteilen Sie über Netzlaufwerk
|
||||
|
||||
### Empfohlene Ordnerstruktur für Mitarbeiter
|
||||
|
||||
```
|
||||
PointCab_Renamer/
|
||||
├── PointCab_Renamer.exe (oder pointcab_renamer für Linux)
|
||||
├── cluster_cleanup.txt
|
||||
├── BENUTZERHANDBUCH.md
|
||||
└── logs/ (wird automatisch erstellt)
|
||||
```
|
||||
|
||||
### Updates verteilen
|
||||
|
||||
1. Erstellen Sie die neue Executable
|
||||
2. Informieren Sie die Mitarbeiter über Änderungen (CHANGELOG)
|
||||
3. Mitarbeiter ersetzen die alte .exe durch die neue
|
||||
4. `cluster_cleanup.txt` kann beibehalten werden (falls angepasst)
|
||||
|
||||
---
|
||||
|
||||
## Troubleshooting beim Build
|
||||
|
||||
### "ModuleNotFoundError"
|
||||
|
||||
**Lösung:** Fehlende Module installieren:
|
||||
```bash
|
||||
pip install <modulname>
|
||||
```
|
||||
|
||||
### "Hidden import not found"
|
||||
|
||||
**Lösung:** Hidden imports hinzufügen:
|
||||
```bash
|
||||
pyinstaller --hidden-import=<modulname> ...
|
||||
```
|
||||
|
||||
### "Executable zu groß" (>100MB)
|
||||
|
||||
**Lösung:** UPX-Kompression aktivieren:
|
||||
```bash
|
||||
pip install upx
|
||||
pyinstaller --onefile --upx-dir=/pfad/zu/upx ...
|
||||
```
|
||||
|
||||
### "tkinter funktioniert nicht"
|
||||
|
||||
**Windows:** tkinter ist normalerweise in Python enthalten. Reinstallieren Sie Python mit der "tcl/tk" Option.
|
||||
|
||||
**Ubuntu:** Installieren Sie python3-tk:
|
||||
```bash
|
||||
sudo apt install python3-tk
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Versionskontrolle
|
||||
|
||||
Bei jeder neuen Version:
|
||||
|
||||
1. Version im Quellcode aktualisieren (`VERSION = "4.2"` etc.)
|
||||
2. CHANGELOG.md aktualisieren
|
||||
3. Neue Builds für Windows und Ubuntu erstellen
|
||||
4. Builds testen
|
||||
5. Im Git-Repository taggen:
|
||||
```bash
|
||||
git tag -a v4.2 -m "Version 4.2"
|
||||
git push origin v4.2
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
---
|
||||
|
||||
## Troubleshooting: Docker-Probleme
|
||||
|
||||
### Docker ist nicht installiert
|
||||
|
||||
**Ubuntu/Debian:**
|
||||
```bash
|
||||
sudo apt update
|
||||
sudo apt install docker.io
|
||||
sudo systemctl start docker
|
||||
sudo systemctl enable docker
|
||||
sudo usermod -aG docker $USER
|
||||
# Dann neu einloggen oder: newgrp docker
|
||||
```
|
||||
|
||||
**Fedora/RHEL:**
|
||||
```bash
|
||||
sudo dnf install docker
|
||||
sudo systemctl start docker
|
||||
```
|
||||
|
||||
### Docker-Daemon startet nicht
|
||||
|
||||
**Symptom:** `Cannot connect to the Docker daemon`
|
||||
|
||||
**Lösungen:**
|
||||
|
||||
1. **Service starten:**
|
||||
```bash
|
||||
sudo systemctl start docker
|
||||
```
|
||||
|
||||
2. **Status prüfen:**
|
||||
```bash
|
||||
sudo systemctl status docker
|
||||
```
|
||||
|
||||
3. **Logs prüfen:**
|
||||
```bash
|
||||
sudo journalctl -u docker.service
|
||||
```
|
||||
|
||||
### Berechtigung verweigert
|
||||
|
||||
**Symptom:** `permission denied while trying to connect to the Docker daemon`
|
||||
|
||||
**Lösung:** Benutzer zur Docker-Gruppe hinzufügen:
|
||||
```bash
|
||||
sudo usermod -aG docker $USER
|
||||
# Danach neu einloggen
|
||||
```
|
||||
|
||||
Oder mit sudo ausführen:
|
||||
```bash
|
||||
sudo ./build_windows_on_linux.sh
|
||||
```
|
||||
|
||||
### Docker in Container-Umgebung (Docker-in-Docker)
|
||||
|
||||
**Problem:** Docker kann nicht in unprivilegierten Containern laufen.
|
||||
|
||||
**Lösungen:**
|
||||
|
||||
1. **Wine-Alternative verwenden:**
|
||||
```bash
|
||||
./build_windows_wine.sh
|
||||
```
|
||||
|
||||
2. **Auf Host-System bauen**
|
||||
|
||||
3. **GitHub Actions nutzen** (siehe `.github/workflows/`)
|
||||
|
||||
4. **Container mit `--privileged` starten** (nicht empfohlen für Produktion)
|
||||
|
||||
### WSL2 unter Windows
|
||||
|
||||
**Problem:** Docker-Befehle schlagen in WSL2 fehl.
|
||||
|
||||
**Lösung:**
|
||||
1. Docker Desktop für Windows installieren
|
||||
2. In Docker Desktop: Settings → Resources → WSL Integration aktivieren
|
||||
3. WSL-Distribution auswählen
|
||||
|
||||
### Docker-Image Download schlägt fehl
|
||||
|
||||
**Symptom:** `Error pulling image` oder Timeout
|
||||
|
||||
**Lösungen:**
|
||||
|
||||
1. **Internetverbindung prüfen**
|
||||
|
||||
2. **Proxy konfigurieren:**
|
||||
```bash
|
||||
export HTTP_PROXY=http://proxy:port
|
||||
export HTTPS_PROXY=http://proxy:port
|
||||
```
|
||||
|
||||
3. **Manueller Download:**
|
||||
```bash
|
||||
sudo docker pull cdrx/pyinstaller-windows:python3
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Vergleich der Build-Methoden
|
||||
|
||||
| Methode | Plattform | Vorteile | Nachteile |
|
||||
|---------|-----------|----------|-----------|
|
||||
| `build_windows.bat` | Windows | Nativ, zuverlässig | Braucht Windows |
|
||||
| `build_windows_on_linux.sh` | Linux + Docker | Cross-compilation | Docker erforderlich |
|
||||
| `build_windows_wine.sh` | Linux + Wine | Kein Docker nötig | Weniger zuverlässig |
|
||||
| GitHub Actions | Cloud | Automatisiert | Braucht GitHub-Repo |
|
||||
|
||||
**Empfehlung:** Für zuverlässige Windows-Builds verwenden Sie:
|
||||
1. **Native Windows** (build_windows.bat) - Am zuverlässigsten
|
||||
2. **Docker auf Linux** (build_windows_on_linux.sh) - Gut für CI/CD
|
||||
3. **GitHub Actions** - Automatisiert bei jedem Push/Release
|
||||
|
||||
---
|
||||
|
||||
*PointCab Renamer Deployment Guide v4.1.2 - © 2026*
|
||||
Binary file not shown.
|
|
@ -0,0 +1,107 @@
|
|||
# Git-Repository Setup für PointCab Renamer
|
||||
|
||||
## Voraussetzungen
|
||||
|
||||
- Git installiert
|
||||
- Zugang zu Gitea/GitHub Repository
|
||||
|
||||
## Lokales Repository initialisieren
|
||||
|
||||
Das Repository wurde bereits initialisiert. Falls Sie ein neues Repository erstellen möchten:
|
||||
|
||||
```bash
|
||||
cd pointcab_renamer
|
||||
git init
|
||||
git add .
|
||||
git commit -m "Initial commit: PointCab Renamer v4.2"
|
||||
```
|
||||
|
||||
## Zu Gitea pushen
|
||||
|
||||
1. **Repository auf Gitea erstellen** (falls noch nicht geschehen)
|
||||
- Loggen Sie sich bei Gitea ein
|
||||
- Erstellen Sie ein neues Repository (z.B. `pointcab_renamer`)
|
||||
- Kopieren Sie die Repository-URL
|
||||
|
||||
2. **Remote hinzufügen und pushen:**
|
||||
|
||||
```bash
|
||||
# Remote hinzufügen
|
||||
git remote add origin https://gitea.example.com/username/pointcab_renamer.git
|
||||
|
||||
# Oder für SSH:
|
||||
git remote add origin git@gitea.example.com:username/pointcab_renamer.git
|
||||
|
||||
# Push zum Remote
|
||||
git push -u origin main
|
||||
```
|
||||
|
||||
## Zu GitHub pushen
|
||||
|
||||
```bash
|
||||
# Remote hinzufügen
|
||||
git remote add origin https://github.com/username/pointcab_renamer.git
|
||||
|
||||
# Oder für SSH:
|
||||
git remote add origin git@github.com:username/pointcab_renamer.git
|
||||
|
||||
# Push zum Remote
|
||||
git push -u origin main
|
||||
```
|
||||
|
||||
## Änderungen pushen
|
||||
|
||||
Nach dem initialen Push:
|
||||
|
||||
```bash
|
||||
# Änderungen hinzufügen
|
||||
git add .
|
||||
|
||||
# Commit erstellen
|
||||
git commit -m "Beschreibung der Änderungen"
|
||||
|
||||
# Pushen
|
||||
git push
|
||||
```
|
||||
|
||||
## Branching-Strategie
|
||||
|
||||
- `main` - Stabiler Release-Branch
|
||||
- `develop` - Entwicklungs-Branch
|
||||
- `feature/*` - Feature-Branches
|
||||
- `bugfix/*` - Bugfix-Branches
|
||||
|
||||
## Releases erstellen
|
||||
|
||||
```bash
|
||||
# Tag für Release erstellen
|
||||
git tag -a v4.2 -m "Release v4.2 - Bugfixes und Parser-Verbesserungen"
|
||||
|
||||
# Tag pushen
|
||||
git push origin v4.2
|
||||
```
|
||||
|
||||
## Häufige Befehle
|
||||
|
||||
```bash
|
||||
# Status anzeigen
|
||||
git status
|
||||
|
||||
# Log anzeigen
|
||||
git log --oneline
|
||||
|
||||
# Änderungen abrufen
|
||||
git pull
|
||||
|
||||
# Branch wechseln
|
||||
git checkout branch-name
|
||||
|
||||
# Neuen Branch erstellen
|
||||
git checkout -b neuer-branch
|
||||
```
|
||||
|
||||
## Hinweise
|
||||
|
||||
- Die `.gitignore` ignoriert Build-Artefakte, Logs und temporäre Dateien
|
||||
- Bei Konflikten: `git pull --rebase` verwenden
|
||||
- Regelmäßig pushen, um Datenverlust zu vermeiden
|
||||
|
|
@ -0,0 +1,73 @@
|
|||
=====================================================
|
||||
PointCab Renamer v4.1 - Schnellstart-Anleitung
|
||||
=====================================================
|
||||
|
||||
INHALT DES ARCHIVS:
|
||||
-------------------
|
||||
- pointcab_renamer.py - Hauptprogramm (Quellcode)
|
||||
- cluster_cleanup.txt - Konfigurationsdatei
|
||||
- BENUTZERHANDBUCH.md - Ausführliche Anleitung
|
||||
- DEPLOYMENT.md - Anleitung zum Erstellen von .exe/Binary
|
||||
- README.md - Projektübersicht
|
||||
- CHANGELOG.md - Versionsänderungen
|
||||
- build_windows.bat - Build-Skript für Windows
|
||||
- build_linux.sh - Build-Skript für Linux
|
||||
- requirements.txt - Python-Abhängigkeiten
|
||||
- LICENSE.txt - Lizenzinformationen
|
||||
- VERSION.txt - Versionsinformationen
|
||||
|
||||
|
||||
SCHNELLSTART - WINDOWS:
|
||||
-----------------------
|
||||
1. Entpacken Sie das Archiv in einen beliebigen Ordner
|
||||
2. Option A - Mit Python:
|
||||
- Python 3.8+ installieren (python.org)
|
||||
- Doppelklick auf pointcab_renamer.py
|
||||
|
||||
Option B - Als .exe erstellen:
|
||||
- Doppelklick auf build_windows.bat
|
||||
- Fertige .exe liegt in dist/
|
||||
|
||||
|
||||
SCHNELLSTART - LINUX/UBUNTU:
|
||||
----------------------------
|
||||
1. Entpacken Sie das Archiv:
|
||||
unzip pointcab_renamer_v4.1_release.zip
|
||||
cd pointcab_renamer_release
|
||||
|
||||
2. Option A - Mit Python:
|
||||
sudo apt install python3 python3-tk
|
||||
python3 pointcab_renamer.py
|
||||
|
||||
Option B - Als Binary erstellen:
|
||||
chmod +x build_linux.sh
|
||||
./build_linux.sh
|
||||
./dist/pointcab_renamer
|
||||
|
||||
|
||||
ERSTE SCHRITTE:
|
||||
---------------
|
||||
1. Starten Sie das Programm
|
||||
2. Wählen Sie einen Modus:
|
||||
- Einzelprojekt: Ein PointCab-Projekt umbenennen
|
||||
- Batch: Mehrere Projekte auf einmal
|
||||
- Merger: Projekte zusammenführen
|
||||
3. Folgen Sie den Anweisungen auf dem Bildschirm
|
||||
|
||||
|
||||
WICHTIGE HINWEISE:
|
||||
------------------
|
||||
- Die Datei cluster_cleanup.txt muss im selben Ordner
|
||||
wie das Programm liegen
|
||||
- Vor dem Umbenennen immer ein Backup erstellen!
|
||||
- Bei Problemen: BENUTZERHANDBUCH.md lesen
|
||||
|
||||
|
||||
SUPPORT:
|
||||
--------
|
||||
Bei Fragen wenden Sie sich an die IT-Abteilung.
|
||||
|
||||
|
||||
=====================================================
|
||||
Version 4.1 | Januar 2026
|
||||
=====================================================
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
PointCab Renamer - Lizenzvereinbarung
|
||||
=====================================
|
||||
|
||||
Copyright (c) 2026 - Alle Rechte vorbehalten
|
||||
|
||||
NUTZUNGSBEDINGUNGEN:
|
||||
|
||||
1. INTERNE NUTZUNG
|
||||
Diese Software ist ausschließlich für den internen Gebrauch
|
||||
innerhalb des Unternehmens bestimmt.
|
||||
|
||||
2. WEITERGABE
|
||||
Die Weitergabe an Dritte außerhalb des Unternehmens ist
|
||||
ohne ausdrückliche schriftliche Genehmigung untersagt.
|
||||
|
||||
3. VERÄNDERUNGEN
|
||||
Änderungen am Quellcode sind nur mit Rücksprache mit der
|
||||
IT-Abteilung gestattet.
|
||||
|
||||
4. GEWÄHRLEISTUNG
|
||||
Die Software wird "wie besehen" ohne jegliche Gewährleistung
|
||||
bereitgestellt. Der Autor haftet nicht für Schäden, die durch
|
||||
die Nutzung dieser Software entstehen könnten.
|
||||
|
||||
5. SUPPORT
|
||||
Bei Fragen oder Problemen wenden Sie sich bitte an die
|
||||
IT-Abteilung.
|
||||
|
||||
---
|
||||
|
||||
Diese Lizenz gilt für alle Versionen der Software, sofern
|
||||
nicht anders angegeben.
|
||||
|
|
@ -0,0 +1,276 @@
|
|||
# PointCab Projekt Umbenenner v4.1.1
|
||||
|
||||
Ein GUI-Tool zum Umbenennen von Scans in PointCab-Projekten und zum Zusammenführen mehrerer Projekte.
|
||||
|
||||
## Funktionen
|
||||
|
||||
### 1. 📁 Einzelprojekt bearbeiten
|
||||
- Einzelnes PointCab-Projekt auswählen und Scans umbenennen
|
||||
- Vollständige Scan-Namen: `1.lsd → Projektname_01.lsd`
|
||||
- Clustername-Bereinigung über Konfigurationsdatei
|
||||
- Automatisches Backup der LSDX-Datei
|
||||
|
||||
### 2. 📂 Batch Renamer
|
||||
- Mehrere Projekte in einem Verzeichnis automatisch verarbeiten
|
||||
- Fortschrittsanzeige und detailliertes Logging
|
||||
- Fehlertoleranz: Bei Fehler wird mit nächstem Projekt fortgefahren
|
||||
|
||||
### 3. 🔀 Projektmerger (verbessert in v4.1)
|
||||
- Mehrere PointCab-Projekte in ein Stammprojekt zusammenführen
|
||||
- Zwei Modi: Einzelprojekt oder Batch-Merge
|
||||
- **NEU**: Intelligente Cluster-Duplikat-Erkennung
|
||||
- Intelligente Namenskonflikt-Behandlung
|
||||
- Vollständige LSDX-Zusammenführung mit detailliertem Logging
|
||||
|
||||
## Installation
|
||||
|
||||
### Voraussetzungen
|
||||
- Python 3.8 oder höher
|
||||
- Tkinter (normalerweise in Python enthalten)
|
||||
|
||||
### Ausführen
|
||||
```bash
|
||||
python pointcab_renamer.py
|
||||
```
|
||||
|
||||
## Projektmerger - Detaillierte Dokumentation
|
||||
|
||||
### Konzept
|
||||
Der Projektmerger ermöglicht das Zusammenführen mehrerer PointCab-Projekte in ein einzelnes Stammprojekt. Dies ist nützlich wenn:
|
||||
- Mehrere Scan-Sessions zu einem Projekt gehören
|
||||
- Projekte nachträglich zusammengeführt werden sollen
|
||||
- Daten aus verschiedenen Quellen konsolidiert werden müssen
|
||||
|
||||
### Modi
|
||||
|
||||
#### Einzelprojekt hinzufügen
|
||||
1. Stammprojekt (Ziel) auswählen
|
||||
2. Ein einzelnes Quellprojekt auswählen
|
||||
3. Vorschau anzeigen
|
||||
4. Merge durchführen
|
||||
|
||||
#### Batch-Merge
|
||||
1. Stammprojekt (Ziel) auswählen
|
||||
2. Hauptverzeichnis mit mehreren Quellprojekten auswählen
|
||||
3. Alle gefundenen Projekte werden automatisch erkannt
|
||||
4. Vorschau anzeigen
|
||||
5. Merge durchführen
|
||||
|
||||
### Merge-Operationen
|
||||
|
||||
Der Projektmerger führt folgende Operationen durch:
|
||||
|
||||
1. **Backup erstellen**
|
||||
- Vor dem Merge wird ein Backup der Stammprojekt-LSDX erstellt
|
||||
- Format: `projektname.lsdx.backup_YYYYMMDD_HHMMSS`
|
||||
|
||||
2. **LSD-Dateien kopieren**
|
||||
- Alle LSD-Dateien aus den Quellprojekten werden in das Stammprojekt kopiert
|
||||
- Bei Namenskonflikten: Automatische Umbenennung (siehe unten)
|
||||
|
||||
3. **PNG-Dateien kopieren**
|
||||
- Alle Preview-Bilder werden in den Previews-Ordner des Stammprojekts kopiert
|
||||
- Bei Namenskonflikten: Automatische Umbenennung
|
||||
|
||||
4. **LSDX zusammenführen**
|
||||
- **Cluster-Duplikat-Erkennung** (NEU in v4.1):
|
||||
- Prüft ob Cluster mit gleichem Namen bereits existiert
|
||||
- Bei Duplikat: Scans werden dem existierenden Cluster zugeordnet
|
||||
- Bei neuem Cluster: Neuer Cluster wird mit neuer UUID hinzugefügt
|
||||
- Alle Scan-Elemente werden mit korrekten Parent-Referenzen eingefügt
|
||||
- UUIDs werden neu generiert um Konflikte zu vermeiden
|
||||
- FilePath-Referenzen werden bei Umbenennung angepasst
|
||||
- Detailliertes Logging aller Operationen
|
||||
|
||||
### Namenskonflikt-Behandlung
|
||||
|
||||
Wenn eine Datei im Zielordner bereits existiert:
|
||||
|
||||
```
|
||||
Vor Merge:
|
||||
Stammprojekt/PointCloud/scan_01.lsd (existiert)
|
||||
Quellprojekt/PointCloud/scan_01.lsd (zu mergen)
|
||||
|
||||
Nach Merge:
|
||||
Stammprojekt/PointCloud/scan_01.lsd (original)
|
||||
Stammprojekt/PointCloud/scan_01_merged_1.lsd (aus Quellprojekt)
|
||||
```
|
||||
|
||||
Die LSDX-Referenzen werden automatisch aktualisiert:
|
||||
```xml
|
||||
<!-- Vorher -->
|
||||
<FilePath type="lsd">scan_01.lsd</FilePath>
|
||||
|
||||
<!-- Nachher (für gemergtes Element) -->
|
||||
<FilePath type="lsd">scan_01_merged_1.lsd</FilePath>
|
||||
```
|
||||
|
||||
### Beispiel: Einzelprojekt-Merge
|
||||
|
||||
```
|
||||
Vorher:
|
||||
├── Stammprojekt/
|
||||
│ ├── Stammprojekt_PointCloud/
|
||||
│ │ ├── Stammprojekt.lsdx
|
||||
│ │ ├── 1.lsd
|
||||
│ │ ├── 2.lsd
|
||||
│ │ └── Previews/
|
||||
│ │ ├── 1.png
|
||||
│ │ └── 2.png
|
||||
|
||||
├── Quellprojekt/
|
||||
│ ├── Quellprojekt_PointCloud/
|
||||
│ │ ├── Quellprojekt.lsdx
|
||||
│ │ ├── 1.lsd
|
||||
│ │ ├── 2.lsd
|
||||
│ │ └── Previews/
|
||||
│ │ ├── 1.png
|
||||
│ │ └── 2.png
|
||||
|
||||
Nachher:
|
||||
├── Stammprojekt/
|
||||
│ ├── Stammprojekt_PointCloud/
|
||||
│ │ ├── Stammprojekt.lsdx (zusammengeführt)
|
||||
│ │ ├── Stammprojekt.lsdx.backup_20260114_101500
|
||||
│ │ ├── 1.lsd
|
||||
│ │ ├── 2.lsd
|
||||
│ │ ├── 1_merged_1.lsd (aus Quellprojekt)
|
||||
│ │ ├── 2_merged_2.lsd (aus Quellprojekt)
|
||||
│ │ └── Previews/
|
||||
│ │ ├── 1.png
|
||||
│ │ ├── 2.png
|
||||
│ │ ├── 1_merged_1.png
|
||||
│ │ └── 2_merged_2.png
|
||||
│ └── merge_20260114_101500.log
|
||||
```
|
||||
|
||||
### Beispiel: Batch-Merge
|
||||
|
||||
```
|
||||
Vorher:
|
||||
├── Hauptverzeichnis/
|
||||
│ ├── Stammprojekt/
|
||||
│ │ └── Stammprojekt_PointCloud/
|
||||
│ │ ├── Stammprojekt.lsdx
|
||||
│ │ └── (Scans 1-5)
|
||||
│ ├── Projekt_A/
|
||||
│ │ └── Projekt_A_PointCloud/
|
||||
│ │ ├── Projekt_A.lsdx
|
||||
│ │ └── (Scans 1-3)
|
||||
│ └── Projekt_B/
|
||||
│ └── Projekt_B_PointCloud/
|
||||
│ ├── Projekt_B.lsdx
|
||||
│ └── (Scans 1-4)
|
||||
|
||||
Nach Batch-Merge (Stammprojekt als Ziel, Hauptverzeichnis als Quelle):
|
||||
├── Stammprojekt/
|
||||
│ └── Stammprojekt_PointCloud/
|
||||
│ ├── Stammprojekt.lsdx (enthält jetzt 12 Scans)
|
||||
│ ├── Stammprojekt.lsdx.backup_...
|
||||
│ └── (alle LSD/PNG-Dateien)
|
||||
│ └── merge_....log
|
||||
```
|
||||
|
||||
### Logging
|
||||
|
||||
Jeder Merge-Vorgang erstellt eine detaillierte Log-Datei:
|
||||
|
||||
- **Einzelprojekt-Merge**: `merge_YYYYMMDD_HHMMSS.log` im Stammprojekt-Verzeichnis
|
||||
- **Batch-Merge**: Eine Log-Datei pro Merge-Vorgang
|
||||
|
||||
Log-Inhalt:
|
||||
- Alle kopierten Dateien
|
||||
- Umbenennungen bei Konflikten
|
||||
- Aktualisierte LSDX-Referenzen
|
||||
- Fehler und Warnungen
|
||||
|
||||
### Fehlerbehandlung
|
||||
|
||||
- **Fehlende Dateien**: Werden übersprungen, Warnung im Log
|
||||
- **Batch-Merge bei Fehler**: Verarbeitung wird mit nächstem Projekt fortgesetzt
|
||||
- **LSDX-Parsing-Fehler**: Projekt wird übersprungen
|
||||
- **Backup**: Immer vor Änderungen erstellt
|
||||
|
||||
## Konfiguration
|
||||
|
||||
### cluster_cleanup.txt
|
||||
Strings die aus dem Clusternamen entfernt werden:
|
||||
```
|
||||
_re
|
||||
_li
|
||||
_mi
|
||||
# Kommentare mit # beginnen
|
||||
```
|
||||
|
||||
## Executable erstellen
|
||||
|
||||
### Windows (auf Windows)
|
||||
```bash
|
||||
pip install pyinstaller
|
||||
pyinstaller --onefile --windowed pointcab_renamer.py
|
||||
```
|
||||
|
||||
### Linux
|
||||
```bash
|
||||
./build_linux.sh
|
||||
```
|
||||
|
||||
### Cross-Compilation: Windows .exe unter Linux
|
||||
Es ist möglich, eine Windows .exe unter Linux zu erstellen. Dazu stehen zwei Methoden zur Verfügung:
|
||||
|
||||
```bash
|
||||
# Methode 1: Docker (empfohlen)
|
||||
./build_windows_on_linux.sh
|
||||
|
||||
# Methode 2: Wine (Fallback)
|
||||
./build_windows_wine.sh
|
||||
```
|
||||
|
||||
Die Docker-Methode ist zuverlässiger und wird empfohlen. Für Details siehe [DEPLOYMENT.md](DEPLOYMENT.md).
|
||||
|
||||
**Wichtig:** Die `cluster_cleanup.txt` muss neben der .exe-Datei liegen.
|
||||
|
||||
## Changelog
|
||||
|
||||
### v4.1.1 (2026-01-14)
|
||||
- **NEU**: Cross-Compilation-Unterstützung für Windows .exe unter Linux
|
||||
- Docker-basiertes Build-Skript (`build_windows_on_linux.sh`)
|
||||
- Wine-basiertes Fallback-Skript (`build_windows_wine.sh`)
|
||||
- GitHub Actions Beispiel-Workflow
|
||||
- Erweiterte DEPLOYMENT.md-Dokumentation
|
||||
|
||||
### v4.1 (2026-01-14)
|
||||
- **FIX**: Projektmerger LSDX-Zusammenführung komplett überarbeitet
|
||||
- Cluster-Duplikat-Erkennung: Verhindert doppelte Cluster bei gleichem Namen
|
||||
- Scans werden korrekt dem existierenden oder neuen Cluster zugeordnet
|
||||
- Parent-Referenzen werden jetzt korrekt gesetzt (Cluster→Registration, Scan→Cluster)
|
||||
- Detailliertes Logging aller Merge-Operationen
|
||||
- Finale Scan/Cluster-Statistik nach Merge
|
||||
- LSDX-Struktur im Code dokumentiert
|
||||
|
||||
### v4.0 (2026-01-14)
|
||||
- **NEU**: Projektmerger-Funktion
|
||||
- Einzelprojekt- und Batch-Merge-Modi
|
||||
- Intelligente Namenskonflikt-Behandlung
|
||||
- Automatische UUID-Neugenerierung
|
||||
- Vollständige LSDX-Zusammenführung
|
||||
- Hauptmenü auf 3 Optionen erweitert
|
||||
- Verbesserte Fehlerbehandlung
|
||||
|
||||
### v3.1 (2026-01-14)
|
||||
- Full-Scan-Name-Pattern: `1.lsd → Projektname_01.lsd`
|
||||
- Konsistente Benennung in Dateien und LSDX
|
||||
|
||||
### v3.0 (2026-01-14)
|
||||
- Batch Renamer hinzugefügt
|
||||
- Hauptmenü für Modus-Auswahl
|
||||
|
||||
### v2.0 (2026-01-14)
|
||||
- Clustername-Bereinigung via Konfigurationsdatei
|
||||
|
||||
### v1.0 (2026-01-14)
|
||||
- Initiale Version
|
||||
|
||||
## Lizenz
|
||||
|
||||
MIT License
|
||||
|
|
@ -0,0 +1 @@
|
|||
4.2.1
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,913 @@
|
|||
('/home/ubuntu/pointcab_renamer/dist/pointcab_renamer',
|
||||
True,
|
||||
False,
|
||||
False,
|
||||
None,
|
||||
None,
|
||||
False,
|
||||
False,
|
||||
None,
|
||||
True,
|
||||
False,
|
||||
None,
|
||||
None,
|
||||
None,
|
||||
'/home/ubuntu/pointcab_renamer/build/pointcab_renamer/pointcab_renamer.pkg',
|
||||
[('pyi-contents-directory _internal', '', 'OPTION'),
|
||||
('PYZ-00.pyz',
|
||||
'/home/ubuntu/pointcab_renamer/build/pointcab_renamer/PYZ-00.pyz',
|
||||
'PYZ'),
|
||||
('python3.11/lib-dynload/_struct.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_struct.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/zlib.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/zlib.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('struct',
|
||||
'/home/ubuntu/pointcab_renamer/build/pointcab_renamer/localpycs/struct.pyc',
|
||||
'PYMODULE'),
|
||||
('pyimod01_archive',
|
||||
'/home/ubuntu/pointcab_renamer/build/pointcab_renamer/localpycs/pyimod01_archive.pyc',
|
||||
'PYMODULE'),
|
||||
('pyimod02_importers',
|
||||
'/home/ubuntu/pointcab_renamer/build/pointcab_renamer/localpycs/pyimod02_importers.pyc',
|
||||
'PYMODULE'),
|
||||
('pyimod03_ctypes',
|
||||
'/home/ubuntu/pointcab_renamer/build/pointcab_renamer/localpycs/pyimod03_ctypes.pyc',
|
||||
'PYMODULE'),
|
||||
('pyiboot01_bootstrap',
|
||||
'/home/ubuntu/.local/lib/python3.11/site-packages/PyInstaller/loader/pyiboot01_bootstrap.py',
|
||||
'PYSOURCE'),
|
||||
('pyi_rth_inspect',
|
||||
'/home/ubuntu/.local/lib/python3.11/site-packages/PyInstaller/hooks/rthooks/pyi_rth_inspect.py',
|
||||
'PYSOURCE'),
|
||||
('pyi_rth__tkinter',
|
||||
'/home/ubuntu/.local/lib/python3.11/site-packages/PyInstaller/hooks/rthooks/pyi_rth__tkinter.py',
|
||||
'PYSOURCE'),
|
||||
('pointcab_renamer',
|
||||
'/home/ubuntu/pointcab_renamer/pointcab_renamer.py',
|
||||
'PYSOURCE'),
|
||||
('libpython3.11.so.1.0',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/libpython3.11.so.1.0',
|
||||
'BINARY'),
|
||||
('python3.11/lib-dynload/_typing.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_typing.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/_statistics.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_statistics.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/_contextvars.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_contextvars.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/_decimal.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_decimal.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/_hashlib.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_hashlib.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/_sha3.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_sha3.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/_blake2.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_blake2.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/_sha256.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_sha256.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/_md5.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_md5.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/_sha1.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_sha1.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/_sha512.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_sha512.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/_random.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_random.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/_bisect.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_bisect.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/math.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/math.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/unicodedata.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/unicodedata.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/array.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/array.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/select.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/select.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/_socket.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_socket.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/_csv.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_csv.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/resource.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/resource.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/_lzma.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_lzma.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/_bz2.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_bz2.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/binascii.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/binascii.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/_opcode.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_opcode.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/_pickle.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_pickle.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/_multibytecodec.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_multibytecodec.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/_codecs_jp.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_codecs_jp.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/_codecs_kr.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_codecs_kr.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/_codecs_iso2022.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_codecs_iso2022.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/_codecs_cn.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_codecs_cn.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/_codecs_tw.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_codecs_tw.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/_codecs_hk.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_codecs_hk.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/_heapq.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_heapq.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/_uuid.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_uuid.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/grp.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/grp.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/_posixsubprocess.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_posixsubprocess.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/fcntl.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/fcntl.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/_elementtree.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_elementtree.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/pyexpat.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/pyexpat.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/termios.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/termios.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/_ssl.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_ssl.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/_datetime.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_datetime.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/_tkinter.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_tkinter.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('libcrypto.so.3', '/lib/x86_64-linux-gnu/libcrypto.so.3', 'BINARY'),
|
||||
('liblzma.so.5', '/lib/x86_64-linux-gnu/liblzma.so.5', 'BINARY'),
|
||||
('libbz2.so.1.0', '/lib/x86_64-linux-gnu/libbz2.so.1.0', 'BINARY'),
|
||||
('libz.so.1', '/lib/x86_64-linux-gnu/libz.so.1', 'BINARY'),
|
||||
('libuuid.so.1', '/lib/x86_64-linux-gnu/libuuid.so.1', 'BINARY'),
|
||||
('libssl.so.3', '/lib/x86_64-linux-gnu/libssl.so.3', 'BINARY'),
|
||||
('libfreetype.so.6', '/lib/x86_64-linux-gnu/libfreetype.so.6', 'BINARY'),
|
||||
('libXau.so.6', '/lib/x86_64-linux-gnu/libXau.so.6', 'BINARY'),
|
||||
('libbrotlicommon.so.1',
|
||||
'/lib/x86_64-linux-gnu/libbrotlicommon.so.1',
|
||||
'BINARY'),
|
||||
('libtk8.6.so', '/lib/x86_64-linux-gnu/libtk8.6.so', 'BINARY'),
|
||||
('libtcl8.6.so', '/lib/x86_64-linux-gnu/libtcl8.6.so', 'BINARY'),
|
||||
('libmd.so.0', '/lib/x86_64-linux-gnu/libmd.so.0', 'BINARY'),
|
||||
('libexpat.so.1', '/lib/x86_64-linux-gnu/libexpat.so.1', 'BINARY'),
|
||||
('libXext.so.6', '/lib/x86_64-linux-gnu/libXext.so.6', 'BINARY'),
|
||||
('libXdmcp.so.6', '/lib/x86_64-linux-gnu/libXdmcp.so.6', 'BINARY'),
|
||||
('libbrotlidec.so.1', '/lib/x86_64-linux-gnu/libbrotlidec.so.1', 'BINARY'),
|
||||
('libpng16.so.16', '/lib/x86_64-linux-gnu/libpng16.so.16', 'BINARY'),
|
||||
('libfontconfig.so.1', '/lib/x86_64-linux-gnu/libfontconfig.so.1', 'BINARY'),
|
||||
('libXrender.so.1', '/lib/x86_64-linux-gnu/libXrender.so.1', 'BINARY'),
|
||||
('libXft.so.2', '/lib/x86_64-linux-gnu/libXft.so.2', 'BINARY'),
|
||||
('libX11.so.6', '/lib/x86_64-linux-gnu/libX11.so.6', 'BINARY'),
|
||||
('libbsd.so.0', '/lib/x86_64-linux-gnu/libbsd.so.0', 'BINARY'),
|
||||
('libXss.so.1', '/lib/x86_64-linux-gnu/libXss.so.1', 'BINARY'),
|
||||
('cluster_cleanup.txt',
|
||||
'/home/ubuntu/pointcab_renamer/cluster_cleanup.txt',
|
||||
'DATA'),
|
||||
('_tcl_data/tcl8/tcltest-2.5.5.tm',
|
||||
'/usr/share/tcltk/tcl8.6/tcl8/tcltest-2.5.5.tm',
|
||||
'DATA'),
|
||||
('_tk_data/choosedir.tcl', '/usr/share/tcltk/tk8.6/choosedir.tcl', 'DATA'),
|
||||
('_tcl_data/msgs/fr_ca.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/fr_ca.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/fi.msg', '/usr/share/tcltk/tcl8.6/msgs/fi.msg', 'DATA'),
|
||||
('_tcl_data/encoding/cp874.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/cp874.enc',
|
||||
'DATA'),
|
||||
('_tk_data/ttk/ttk.tcl', '/usr/share/tcltk/tk8.6/ttk/ttk.tcl', 'DATA'),
|
||||
('_tcl_data/msgs/bn_in.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/bn_in.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/cp850.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/cp850.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/hu.msg', '/usr/share/tcltk/tcl8.6/msgs/hu.msg', 'DATA'),
|
||||
('_tk_data/dialog.tcl', '/usr/share/tcltk/tk8.6/dialog.tcl', 'DATA'),
|
||||
('_tk_data/ttk/sizegrip.tcl',
|
||||
'/usr/share/tcltk/tk8.6/ttk/sizegrip.tcl',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/mk.msg', '/usr/share/tcltk/tcl8.6/msgs/mk.msg', 'DATA'),
|
||||
('_tk_data/images/logoMed.gif',
|
||||
'/usr/share/tcltk/tk8.6/images/logoMed.gif',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/sq.msg', '/usr/share/tcltk/tcl8.6/msgs/sq.msg', 'DATA'),
|
||||
('_tk_data/ttk/vistaTheme.tcl',
|
||||
'/usr/share/tcltk/tk8.6/ttk/vistaTheme.tcl',
|
||||
'DATA'),
|
||||
('_tk_data/msgs/pl.msg', '/usr/share/tcltk/tk8.6/msgs/pl.msg', 'DATA'),
|
||||
('_tk_data/ttk/scrollbar.tcl',
|
||||
'/usr/share/tcltk/tk8.6/ttk/scrollbar.tcl',
|
||||
'DATA'),
|
||||
('_tk_data/panedwindow.tcl',
|
||||
'/usr/share/tcltk/tk8.6/panedwindow.tcl',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/iso2022.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/iso2022.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/euc-jp.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/euc-jp.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/tcl8/msgcat-1.6.1.tm',
|
||||
'/usr/share/tcltk/tcl8.6/tcl8/msgcat-1.6.1.tm',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/dingbats.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/dingbats.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/macRoman.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/macRoman.enc',
|
||||
'DATA'),
|
||||
('_tk_data/tkAppInit.c', '/usr/share/tcltk/tk8.6/tkAppInit.c', 'DATA'),
|
||||
('_tk_data/ttk/combobox.tcl',
|
||||
'/usr/share/tcltk/tk8.6/ttk/combobox.tcl',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/fr.msg', '/usr/share/tcltk/tcl8.6/msgs/fr.msg', 'DATA'),
|
||||
('_tcl_data/tclIndex', '/usr/share/tcltk/tcl8.6/tclIndex', 'DATA'),
|
||||
('_tk_data/msgs/en.msg', '/usr/share/tcltk/tk8.6/msgs/en.msg', 'DATA'),
|
||||
('_tcl_data/msgs/en_ph.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/en_ph.msg',
|
||||
'DATA'),
|
||||
('_tk_data/images/pwrdLogo75.gif',
|
||||
'/usr/share/tcltk/tk8.6/images/pwrdLogo75.gif',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/zh_cn.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/zh_cn.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/cp866.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/cp866.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/mr.msg', '/usr/share/tcltk/tcl8.6/msgs/mr.msg', 'DATA'),
|
||||
('_tk_data/ttk/winTheme.tcl',
|
||||
'/usr/share/tcltk/tk8.6/ttk/winTheme.tcl',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/es_hn.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/es_hn.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/th.msg', '/usr/share/tcltk/tcl8.6/msgs/th.msg', 'DATA'),
|
||||
('_tk_data/msgs/hu.msg', '/usr/share/tcltk/tk8.6/msgs/hu.msg', 'DATA'),
|
||||
('_tk_data/images/pwrdLogo175.gif',
|
||||
'/usr/share/tcltk/tk8.6/images/pwrdLogo175.gif',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/iso8859-9.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/iso8859-9.enc',
|
||||
'DATA'),
|
||||
('_tk_data/tkfbox.tcl', '/usr/share/tcltk/tk8.6/tkfbox.tcl', 'DATA'),
|
||||
('_tcl_data/msgs/sk.msg', '/usr/share/tcltk/tcl8.6/msgs/sk.msg', 'DATA'),
|
||||
('_tcl_data/encoding/macUkraine.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/macUkraine.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/ebcdic.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/ebcdic.enc',
|
||||
'DATA'),
|
||||
('_tk_data/ttk/clamTheme.tcl',
|
||||
'/usr/share/tcltk/tk8.6/ttk/clamTheme.tcl',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/macJapan.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/macJapan.enc',
|
||||
'DATA'),
|
||||
('_tk_data/msgs/fi.msg', '/usr/share/tcltk/tk8.6/msgs/fi.msg', 'DATA'),
|
||||
('_tcl_data/tm.tcl', '/usr/share/tcltk/tcl8.6/tm.tcl', 'DATA'),
|
||||
('_tk_data/images/logoLarge.gif',
|
||||
'/usr/share/tcltk/tk8.6/images/logoLarge.gif',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/ja.msg', '/usr/share/tcltk/tcl8.6/msgs/ja.msg', 'DATA'),
|
||||
('_tcl_data/msgs/gl.msg', '/usr/share/tcltk/tcl8.6/msgs/gl.msg', 'DATA'),
|
||||
('_tk_data/safetk.tcl', '/usr/share/tcltk/tk8.6/safetk.tcl', 'DATA'),
|
||||
('_tcl_data/msgs/kok.msg', '/usr/share/tcltk/tcl8.6/msgs/kok.msg', 'DATA'),
|
||||
('_tcl_data/msgs/mr_in.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/mr_in.msg',
|
||||
'DATA'),
|
||||
('_tk_data/iconlist.tcl', '/usr/share/tcltk/tk8.6/iconlist.tcl', 'DATA'),
|
||||
('_tcl_data/msgs/es_ni.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/es_ni.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/macRomania.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/macRomania.enc',
|
||||
'DATA'),
|
||||
('_tk_data/fontchooser.tcl',
|
||||
'/usr/share/tcltk/tk8.6/fontchooser.tcl',
|
||||
'DATA'),
|
||||
('_tk_data/ttk/entry.tcl', '/usr/share/tcltk/tk8.6/ttk/entry.tcl', 'DATA'),
|
||||
('_tcl_data/encoding/cp737.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/cp737.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/zh_tw.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/zh_tw.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/es_co.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/es_co.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/pl.msg', '/usr/share/tcltk/tcl8.6/msgs/pl.msg', 'DATA'),
|
||||
('_tk_data/images/logo64.gif',
|
||||
'/usr/share/tcltk/tk8.6/images/logo64.gif',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/sl.msg', '/usr/share/tcltk/tcl8.6/msgs/sl.msg', 'DATA'),
|
||||
('_tk_data/msgs/en_gb.msg', '/usr/share/tcltk/tk8.6/msgs/en_gb.msg', 'DATA'),
|
||||
('_tcl_data/msgs/kl.msg', '/usr/share/tcltk/tcl8.6/msgs/kl.msg', 'DATA'),
|
||||
('_tcl_data/encoding/cp864.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/cp864.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/lv.msg', '/usr/share/tcltk/tcl8.6/msgs/lv.msg', 'DATA'),
|
||||
('_tcl_data/encoding/iso8859-8.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/iso8859-8.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/de_be.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/de_be.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/cp936.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/cp936.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/hr.msg', '/usr/share/tcltk/tcl8.6/msgs/hr.msg', 'DATA'),
|
||||
('_tcl_data/encoding/big5.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/big5.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/macIceland.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/macIceland.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/history.tcl', '/usr/share/tcltk/tcl8.6/history.tcl', 'DATA'),
|
||||
('_tcl_data/msgs/hi.msg', '/usr/share/tcltk/tcl8.6/msgs/hi.msg', 'DATA'),
|
||||
('_tcl_data/msgs/kw.msg', '/usr/share/tcltk/tcl8.6/msgs/kw.msg', 'DATA'),
|
||||
('_tcl_data/msgs/en_au.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/en_au.msg',
|
||||
'DATA'),
|
||||
('_tk_data/ttk/scale.tcl', '/usr/share/tcltk/tk8.6/ttk/scale.tcl', 'DATA'),
|
||||
('_tcl_data/msgs/fa_in.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/fa_in.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/iso8859-4.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/iso8859-4.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/ru_ua.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/ru_ua.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/iso8859-6.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/iso8859-6.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/cp1251.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/cp1251.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/es_pe.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/es_pe.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/opt0.4/pkgIndex.tcl',
|
||||
'/usr/share/tcltk/tcl8.6/opt0.4/pkgIndex.tcl',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/et.msg', '/usr/share/tcltk/tcl8.6/msgs/et.msg', 'DATA'),
|
||||
('_tcl_data/msgs/kl_gl.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/kl_gl.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/cp1256.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/cp1256.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/jis0201.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/jis0201.enc',
|
||||
'DATA'),
|
||||
('_tk_data/text.tcl', '/usr/share/tcltk/tk8.6/text.tcl', 'DATA'),
|
||||
('_tk_data/images/tai-ku.gif',
|
||||
'/usr/share/tcltk/tk8.6/images/tai-ku.gif',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/kok_in.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/kok_in.msg',
|
||||
'DATA'),
|
||||
('_tk_data/ttk/xpTheme.tcl',
|
||||
'/usr/share/tcltk/tk8.6/ttk/xpTheme.tcl',
|
||||
'DATA'),
|
||||
('_tk_data/icons.tcl', '/usr/share/tcltk/tk8.6/icons.tcl', 'DATA'),
|
||||
('_tcl_data/msgs/sv.msg', '/usr/share/tcltk/tcl8.6/msgs/sv.msg', 'DATA'),
|
||||
('_tk_data/ttk/aquaTheme.tcl',
|
||||
'/usr/share/tcltk/tk8.6/ttk/aquaTheme.tcl',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/lt.msg', '/usr/share/tcltk/tcl8.6/msgs/lt.msg', 'DATA'),
|
||||
('_tcl_data/msgs/fo_fo.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/fo_fo.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/macCentEuro.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/macCentEuro.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/en_bw.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/en_bw.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/iso8859-14.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/iso8859-14.enc',
|
||||
'DATA'),
|
||||
('_tk_data/ttk/altTheme.tcl',
|
||||
'/usr/share/tcltk/tk8.6/ttk/altTheme.tcl',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/gb2312.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/gb2312.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/cp1252.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/cp1252.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/cp1255.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/cp1255.enc',
|
||||
'DATA'),
|
||||
('_tk_data/palette.tcl', '/usr/share/tcltk/tk8.6/palette.tcl', 'DATA'),
|
||||
('_tcl_data/msgs/eo.msg', '/usr/share/tcltk/tcl8.6/msgs/eo.msg', 'DATA'),
|
||||
('_tcl_data/encoding/iso8859-13.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/iso8859-13.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/nl.msg', '/usr/share/tcltk/tcl8.6/msgs/nl.msg', 'DATA'),
|
||||
('_tcl_data/msgs/en_ie.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/en_ie.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/es_bo.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/es_bo.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/ta.msg', '/usr/share/tcltk/tcl8.6/msgs/ta.msg', 'DATA'),
|
||||
('_tcl_data/encoding/euc-kr.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/euc-kr.enc',
|
||||
'DATA'),
|
||||
('_tk_data/scale.tcl', '/usr/share/tcltk/tk8.6/scale.tcl', 'DATA'),
|
||||
('_tcl_data/tclAppInit.c', '/usr/share/tcltk/tcl8.6/tclAppInit.c', 'DATA'),
|
||||
('_tcl_data/encoding/iso2022-kr.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/iso2022-kr.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/ar_jo.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/ar_jo.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/en_gb.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/en_gb.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/sh.msg', '/usr/share/tcltk/tcl8.6/msgs/sh.msg', 'DATA'),
|
||||
('_tcl_data/msgs/da.msg', '/usr/share/tcltk/tcl8.6/msgs/da.msg', 'DATA'),
|
||||
('_tcl_data/msgs/nl_be.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/nl_be.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/cp852.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/cp852.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/be.msg', '/usr/share/tcltk/tcl8.6/msgs/be.msg', 'DATA'),
|
||||
('_tk_data/msgs/nl.msg', '/usr/share/tcltk/tk8.6/msgs/nl.msg', 'DATA'),
|
||||
('_tcl_data/msgs/fa_ir.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/fa_ir.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/it.msg', '/usr/share/tcltk/tcl8.6/msgs/it.msg', 'DATA'),
|
||||
('_tk_data/ttk/cursors.tcl',
|
||||
'/usr/share/tcltk/tk8.6/ttk/cursors.tcl',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/zh_sg.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/zh_sg.msg',
|
||||
'DATA'),
|
||||
('_tk_data/spinbox.tcl', '/usr/share/tcltk/tk8.6/spinbox.tcl', 'DATA'),
|
||||
('_tk_data/msgs/es.msg', '/usr/share/tcltk/tk8.6/msgs/es.msg', 'DATA'),
|
||||
('_tk_data/msgs/el.msg', '/usr/share/tcltk/tk8.6/msgs/el.msg', 'DATA'),
|
||||
('_tcl_data/msgs/ar_sy.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/ar_sy.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/ar.msg', '/usr/share/tcltk/tcl8.6/msgs/ar.msg', 'DATA'),
|
||||
('_tcl_data/msgs/ga_ie.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/ga_ie.msg',
|
||||
'DATA'),
|
||||
('_tk_data/msgs/sv.msg', '/usr/share/tcltk/tk8.6/msgs/sv.msg', 'DATA'),
|
||||
('_tk_data/tclIndex', '/usr/share/tcltk/tk8.6/tclIndex', 'DATA'),
|
||||
('_tcl_data/msgs/uk.msg', '/usr/share/tcltk/tcl8.6/msgs/uk.msg', 'DATA'),
|
||||
('_tcl_data/word.tcl', '/usr/share/tcltk/tcl8.6/word.tcl', 'DATA'),
|
||||
('_tcl_data/msgs/ga.msg', '/usr/share/tcltk/tcl8.6/msgs/ga.msg', 'DATA'),
|
||||
('_tcl_data/msgs/en_za.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/en_za.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/fr_be.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/fr_be.msg',
|
||||
'DATA'),
|
||||
('_tk_data/msgbox.tcl', '/usr/share/tcltk/tk8.6/msgbox.tcl', 'DATA'),
|
||||
('_tcl_data/encoding/cp1257.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/cp1257.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/iso8859-3.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/iso8859-3.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/euc-cn.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/euc-cn.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/id.msg', '/usr/share/tcltk/tcl8.6/msgs/id.msg', 'DATA'),
|
||||
('_tk_data/ttk/menubutton.tcl',
|
||||
'/usr/share/tcltk/tk8.6/ttk/menubutton.tcl',
|
||||
'DATA'),
|
||||
('_tk_data/tearoff.tcl', '/usr/share/tcltk/tk8.6/tearoff.tcl', 'DATA'),
|
||||
('_tk_data/optMenu.tcl', '/usr/share/tcltk/tk8.6/optMenu.tcl', 'DATA'),
|
||||
('_tcl_data/tcl8/platform/shell-1.1.4.tm',
|
||||
'/usr/share/tcltk/tcl8.6/tcl8/platform/shell-1.1.4.tm',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/cp860.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/cp860.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/macCroatian.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/macCroatian.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/cp1253.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/cp1253.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/gv.msg', '/usr/share/tcltk/tcl8.6/msgs/gv.msg', 'DATA'),
|
||||
('_tcl_data/init.tcl', '/usr/share/tcltk/tcl8.6/init.tcl', 'DATA'),
|
||||
('_tcl_data/msgs/fr_ch.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/fr_ch.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/iso8859-10.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/iso8859-10.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/bg.msg', '/usr/share/tcltk/tcl8.6/msgs/bg.msg', 'DATA'),
|
||||
('_tcl_data/msgs/ro.msg', '/usr/share/tcltk/tcl8.6/msgs/ro.msg', 'DATA'),
|
||||
('_tcl_data/encoding/cp857.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/cp857.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/gl_es.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/gl_es.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/es_uy.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/es_uy.msg',
|
||||
'DATA'),
|
||||
('_tk_data/ttk/panedwindow.tcl',
|
||||
'/usr/share/tcltk/tk8.6/ttk/panedwindow.tcl',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/af.msg', '/usr/share/tcltk/tcl8.6/msgs/af.msg', 'DATA'),
|
||||
('_tcl_data/msgs/de_at.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/de_at.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/auto.tcl', '/usr/share/tcltk/tcl8.6/auto.tcl', 'DATA'),
|
||||
('_tcl_data/msgs/ms_my.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/ms_my.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/ms.msg', '/usr/share/tcltk/tcl8.6/msgs/ms.msg', 'DATA'),
|
||||
('_tcl_data/encoding/gb12345.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/gb12345.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/ru.msg', '/usr/share/tcltk/tcl8.6/msgs/ru.msg', 'DATA'),
|
||||
('_tcl_data/msgs/sr.msg', '/usr/share/tcltk/tcl8.6/msgs/sr.msg', 'DATA'),
|
||||
('_tcl_data/msgs/zh.msg', '/usr/share/tcltk/tcl8.6/msgs/zh.msg', 'DATA'),
|
||||
('_tcl_data/msgs/mt.msg', '/usr/share/tcltk/tcl8.6/msgs/mt.msg', 'DATA'),
|
||||
('_tcl_data/encoding/jis0208.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/jis0208.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/iso8859-15.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/iso8859-15.enc',
|
||||
'DATA'),
|
||||
('_tk_data/msgs/zh_cn.msg', '/usr/share/tcltk/tk8.6/msgs/zh_cn.msg', 'DATA'),
|
||||
('_tcl_data/encoding/iso8859-16.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/iso8859-16.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/koi8-u.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/koi8-u.enc',
|
||||
'DATA'),
|
||||
('_tk_data/unsupported.tcl',
|
||||
'/usr/share/tcltk/tk8.6/unsupported.tcl',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/cp865.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/cp865.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/es_ar.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/es_ar.msg',
|
||||
'DATA'),
|
||||
('_tk_data/msgs/cs.msg', '/usr/share/tcltk/tk8.6/msgs/cs.msg', 'DATA'),
|
||||
('_tcl_data/encoding/koi8-r.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/koi8-r.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/parray.tcl', '/usr/share/tcltk/tcl8.6/parray.tcl', 'DATA'),
|
||||
('_tk_data/ttk/classicTheme.tcl',
|
||||
'/usr/share/tcltk/tk8.6/ttk/classicTheme.tcl',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/cp1254.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/cp1254.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/symbol.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/symbol.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/sw.msg', '/usr/share/tcltk/tcl8.6/msgs/sw.msg', 'DATA'),
|
||||
('_tk_data/images/pwrdLogo.eps',
|
||||
'/usr/share/tcltk/tk8.6/images/pwrdLogo.eps',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/es.msg', '/usr/share/tcltk/tcl8.6/msgs/es.msg', 'DATA'),
|
||||
('_tcl_data/package.tcl', '/usr/share/tcltk/tcl8.6/package.tcl', 'DATA'),
|
||||
('_tcl_data/encoding/macTurkish.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/macTurkish.enc',
|
||||
'DATA'),
|
||||
('_tk_data/bgerror.tcl', '/usr/share/tcltk/tk8.6/bgerror.tcl', 'DATA'),
|
||||
('_tk_data/listbox.tcl', '/usr/share/tcltk/tk8.6/listbox.tcl', 'DATA'),
|
||||
('_tcl_data/msgs/es_mx.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/es_mx.msg',
|
||||
'DATA'),
|
||||
('_tk_data/msgs/it.msg', '/usr/share/tcltk/tk8.6/msgs/it.msg', 'DATA'),
|
||||
('_tcl_data/encoding/iso8859-2.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/iso8859-2.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/cp1250.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/cp1250.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/macThai.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/macThai.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/macGreek.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/macGreek.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/opt0.4/optparse.tcl',
|
||||
'/usr/share/tcltk/tcl8.6/opt0.4/optparse.tcl',
|
||||
'DATA'),
|
||||
('_tk_data/msgs/ru.msg', '/usr/share/tcltk/tk8.6/msgs/ru.msg', 'DATA'),
|
||||
('_tcl_data/encoding/ksc5601.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/ksc5601.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/jis0212.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/jis0212.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/tis-620.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/tis-620.enc',
|
||||
'DATA'),
|
||||
('_tk_data/tk.tcl', '/usr/share/tcltk/tk8.6/tk.tcl', 'DATA'),
|
||||
('_tk_data/console.tcl', '/usr/share/tcltk/tk8.6/console.tcl', 'DATA'),
|
||||
('_tcl_data/msgs/it_ch.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/it_ch.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/macDingbats.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/macDingbats.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/cp437.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/cp437.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/en_be.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/en_be.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/tcl8/platform-1.0.19.tm',
|
||||
'/usr/share/tcltk/tcl8.6/tcl8/platform-1.0.19.tm',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/pt_br.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/pt_br.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/clock.tcl', '/usr/share/tcltk/tcl8.6/clock.tcl', 'DATA'),
|
||||
('_tk_data/ttk/spinbox.tcl',
|
||||
'/usr/share/tcltk/tk8.6/ttk/spinbox.tcl',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/iso8859-7.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/iso8859-7.enc',
|
||||
'DATA'),
|
||||
('_tk_data/obsolete.tcl', '/usr/share/tcltk/tk8.6/obsolete.tcl', 'DATA'),
|
||||
('_tcl_data/tcl8/http-2.9.8.tm',
|
||||
'/usr/share/tcltk/tcl8.6/tcl8/http-2.9.8.tm',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/es_ec.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/es_ec.msg',
|
||||
'DATA'),
|
||||
('_tk_data/msgs/pt.msg', '/usr/share/tcltk/tk8.6/msgs/pt.msg', 'DATA'),
|
||||
('_tcl_data/encoding/cns11643.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/cns11643.enc',
|
||||
'DATA'),
|
||||
('_tk_data/focus.tcl', '/usr/share/tcltk/tk8.6/focus.tcl', 'DATA'),
|
||||
('_tcl_data/msgs/is.msg', '/usr/share/tcltk/tcl8.6/msgs/is.msg', 'DATA'),
|
||||
('_tcl_data/msgs/en_hk.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/en_hk.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/bn.msg', '/usr/share/tcltk/tcl8.6/msgs/bn.msg', 'DATA'),
|
||||
('_tcl_data/encoding/cp861.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/cp861.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/kw_gb.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/kw_gb.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/cp869.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/cp869.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/en_zw.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/en_zw.msg',
|
||||
'DATA'),
|
||||
('_tk_data/button.tcl', '/usr/share/tcltk/tk8.6/button.tcl', 'DATA'),
|
||||
('_tk_data/ttk/treeview.tcl',
|
||||
'/usr/share/tcltk/tk8.6/ttk/treeview.tcl',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/es_cl.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/es_cl.msg',
|
||||
'DATA'),
|
||||
('_tk_data/ttk/defaults.tcl',
|
||||
'/usr/share/tcltk/tk8.6/ttk/defaults.tcl',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/cp932.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/cp932.enc',
|
||||
'DATA'),
|
||||
('_tk_data/xmfbox.tcl', '/usr/share/tcltk/tk8.6/xmfbox.tcl', 'DATA'),
|
||||
('_tcl_data/msgs/el.msg', '/usr/share/tcltk/tcl8.6/msgs/el.msg', 'DATA'),
|
||||
('_tcl_data/msgs/fo.msg', '/usr/share/tcltk/tcl8.6/msgs/fo.msg', 'DATA'),
|
||||
('_tcl_data/encoding/cp949.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/cp949.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/safe.tcl', '/usr/share/tcltk/tcl8.6/safe.tcl', 'DATA'),
|
||||
('_tk_data/images/pwrdLogo150.gif',
|
||||
'/usr/share/tcltk/tk8.6/images/pwrdLogo150.gif',
|
||||
'DATA'),
|
||||
('_tk_data/entry.tcl', '/usr/share/tcltk/tk8.6/entry.tcl', 'DATA'),
|
||||
('_tcl_data/msgs/vi.msg', '/usr/share/tcltk/tcl8.6/msgs/vi.msg', 'DATA'),
|
||||
('_tcl_data/http1.0/pkgIndex.tcl',
|
||||
'/usr/share/tcltk/tcl8.6/http1.0/pkgIndex.tcl',
|
||||
'DATA'),
|
||||
('_tk_data/msgs/de.msg', '/usr/share/tcltk/tk8.6/msgs/de.msg', 'DATA'),
|
||||
('_tcl_data/encoding/cp855.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/cp855.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/ar_lb.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/ar_lb.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/eu_es.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/eu_es.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/cs.msg', '/usr/share/tcltk/tcl8.6/msgs/cs.msg', 'DATA'),
|
||||
('_tcl_data/encoding/cp862.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/cp862.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/pt.msg', '/usr/share/tcltk/tcl8.6/msgs/pt.msg', 'DATA'),
|
||||
('_tk_data/ttk/progress.tcl',
|
||||
'/usr/share/tcltk/tk8.6/ttk/progress.tcl',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/gb2312-raw.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/gb2312-raw.enc',
|
||||
'DATA'),
|
||||
('_tk_data/clrpick.tcl', '/usr/share/tcltk/tk8.6/clrpick.tcl', 'DATA'),
|
||||
('_tcl_data/encoding/shiftjis.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/shiftjis.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/nb.msg', '/usr/share/tcltk/tcl8.6/msgs/nb.msg', 'DATA'),
|
||||
('_tcl_data/msgs/he.msg', '/usr/share/tcltk/tcl8.6/msgs/he.msg', 'DATA'),
|
||||
('_tk_data/msgs/fr.msg', '/usr/share/tcltk/tk8.6/msgs/fr.msg', 'DATA'),
|
||||
('_tk_data/comdlg.tcl', '/usr/share/tcltk/tk8.6/comdlg.tcl', 'DATA'),
|
||||
('_tcl_data/http1.0/http.tcl',
|
||||
'/usr/share/tcltk/tcl8.6/http1.0/http.tcl',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/fa.msg', '/usr/share/tcltk/tcl8.6/msgs/fa.msg', 'DATA'),
|
||||
('_tcl_data/encoding/gb1988.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/gb1988.enc',
|
||||
'DATA'),
|
||||
('_tk_data/images/logo100.gif',
|
||||
'/usr/share/tcltk/tk8.6/images/logo100.gif',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/es_gt.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/es_gt.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/ta_in.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/ta_in.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/cp863.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/cp863.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/tr.msg', '/usr/share/tcltk/tcl8.6/msgs/tr.msg', 'DATA'),
|
||||
('_tcl_data/msgs/es_pr.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/es_pr.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/ca.msg', '/usr/share/tcltk/tcl8.6/msgs/ca.msg', 'DATA'),
|
||||
('_tk_data/menu.tcl', '/usr/share/tcltk/tk8.6/menu.tcl', 'DATA'),
|
||||
('_tk_data/msgs/da.msg', '/usr/share/tcltk/tk8.6/msgs/da.msg', 'DATA'),
|
||||
('_tk_data/images/README', '/usr/share/tcltk/tk8.6/images/README', 'DATA'),
|
||||
('_tcl_data/encoding/iso8859-1.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/iso8859-1.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/es_py.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/es_py.msg',
|
||||
'DATA'),
|
||||
('_tk_data/ttk/notebook.tcl',
|
||||
'/usr/share/tcltk/tk8.6/ttk/notebook.tcl',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/ar_in.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/ar_in.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/cp1258.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/cp1258.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/hi_in.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/hi_in.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/de.msg', '/usr/share/tcltk/tcl8.6/msgs/de.msg', 'DATA'),
|
||||
('_tk_data/ttk/button.tcl', '/usr/share/tcltk/tk8.6/ttk/button.tcl', 'DATA'),
|
||||
('_tk_data/msgs/eo.msg', '/usr/share/tcltk/tk8.6/msgs/eo.msg', 'DATA'),
|
||||
('_tcl_data/msgs/id_id.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/id_id.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/en_sg.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/en_sg.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/es_ve.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/es_ve.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/te_in.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/te_in.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/macCyrillic.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/macCyrillic.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/cp950.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/cp950.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/iso8859-11.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/iso8859-11.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/en_in.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/en_in.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/iso2022-jp.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/iso2022-jp.enc',
|
||||
'DATA'),
|
||||
('_tk_data/ttk/utils.tcl', '/usr/share/tcltk/tk8.6/ttk/utils.tcl', 'DATA'),
|
||||
('_tcl_data/msgs/te.msg', '/usr/share/tcltk/tcl8.6/msgs/te.msg', 'DATA'),
|
||||
('_tcl_data/msgs/ko_kr.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/ko_kr.msg',
|
||||
'DATA'),
|
||||
('_tk_data/images/logo.eps',
|
||||
'/usr/share/tcltk/tk8.6/images/logo.eps',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/gv_gb.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/gv_gb.msg',
|
||||
'DATA'),
|
||||
('_tk_data/scrlbar.tcl', '/usr/share/tcltk/tk8.6/scrlbar.tcl', 'DATA'),
|
||||
('_tcl_data/msgs/en_ca.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/en_ca.msg',
|
||||
'DATA'),
|
||||
('_tk_data/images/pwrdLogo200.gif',
|
||||
'/usr/share/tcltk/tk8.6/images/pwrdLogo200.gif',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/es_do.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/es_do.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/nn.msg', '/usr/share/tcltk/tcl8.6/msgs/nn.msg', 'DATA'),
|
||||
('_tk_data/megawidget.tcl', '/usr/share/tcltk/tk8.6/megawidget.tcl', 'DATA'),
|
||||
('_tcl_data/encoding/ascii.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/ascii.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/cp775.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/cp775.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/en_nz.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/en_nz.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/eu.msg', '/usr/share/tcltk/tcl8.6/msgs/eu.msg', 'DATA'),
|
||||
('_tcl_data/msgs/es_cr.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/es_cr.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/es_sv.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/es_sv.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/af_za.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/af_za.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/es_pa.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/es_pa.msg',
|
||||
'DATA'),
|
||||
('_tk_data/ttk/fonts.tcl', '/usr/share/tcltk/tk8.6/ttk/fonts.tcl', 'DATA'),
|
||||
('_tk_data/images/pwrdLogo100.gif',
|
||||
'/usr/share/tcltk/tk8.6/images/pwrdLogo100.gif',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/zh_hk.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/zh_hk.msg',
|
||||
'DATA'),
|
||||
('_tk_data/mkpsenc.tcl', '/usr/share/tcltk/tk8.6/mkpsenc.tcl', 'DATA'),
|
||||
('_tcl_data/msgs/ko.msg', '/usr/share/tcltk/tcl8.6/msgs/ko.msg', 'DATA'),
|
||||
('_tcl_data/encoding/iso8859-5.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/iso8859-5.enc',
|
||||
'DATA'),
|
||||
('base_library.zip',
|
||||
'/home/ubuntu/pointcab_renamer/build/pointcab_renamer/base_library.zip',
|
||||
'DATA')],
|
||||
[],
|
||||
False,
|
||||
False,
|
||||
1768557080,
|
||||
[('run',
|
||||
'/home/ubuntu/.local/lib/python3.11/site-packages/PyInstaller/bootloader/Linux-64bit-intel/run',
|
||||
'EXECUTABLE')],
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/libpython3.11.so.1.0')
|
||||
|
|
@ -0,0 +1,908 @@
|
|||
('/home/ubuntu/pointcab_renamer/build/pointcab_renamer/pointcab_renamer.pkg',
|
||||
{'BINARY': True,
|
||||
'DATA': True,
|
||||
'EXECUTABLE': True,
|
||||
'EXTENSION': True,
|
||||
'PYMODULE': True,
|
||||
'PYSOURCE': True,
|
||||
'PYZ': False,
|
||||
'SPLASH': True,
|
||||
'SYMLINK': False},
|
||||
[('pyi-contents-directory _internal', '', 'OPTION'),
|
||||
('PYZ-00.pyz',
|
||||
'/home/ubuntu/pointcab_renamer/build/pointcab_renamer/PYZ-00.pyz',
|
||||
'PYZ'),
|
||||
('python3.11/lib-dynload/_struct.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_struct.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/zlib.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/zlib.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('struct',
|
||||
'/home/ubuntu/pointcab_renamer/build/pointcab_renamer/localpycs/struct.pyc',
|
||||
'PYMODULE'),
|
||||
('pyimod01_archive',
|
||||
'/home/ubuntu/pointcab_renamer/build/pointcab_renamer/localpycs/pyimod01_archive.pyc',
|
||||
'PYMODULE'),
|
||||
('pyimod02_importers',
|
||||
'/home/ubuntu/pointcab_renamer/build/pointcab_renamer/localpycs/pyimod02_importers.pyc',
|
||||
'PYMODULE'),
|
||||
('pyimod03_ctypes',
|
||||
'/home/ubuntu/pointcab_renamer/build/pointcab_renamer/localpycs/pyimod03_ctypes.pyc',
|
||||
'PYMODULE'),
|
||||
('pyiboot01_bootstrap',
|
||||
'/home/ubuntu/.local/lib/python3.11/site-packages/PyInstaller/loader/pyiboot01_bootstrap.py',
|
||||
'PYSOURCE'),
|
||||
('pyi_rth_inspect',
|
||||
'/home/ubuntu/.local/lib/python3.11/site-packages/PyInstaller/hooks/rthooks/pyi_rth_inspect.py',
|
||||
'PYSOURCE'),
|
||||
('pyi_rth__tkinter',
|
||||
'/home/ubuntu/.local/lib/python3.11/site-packages/PyInstaller/hooks/rthooks/pyi_rth__tkinter.py',
|
||||
'PYSOURCE'),
|
||||
('pointcab_renamer',
|
||||
'/home/ubuntu/pointcab_renamer/pointcab_renamer.py',
|
||||
'PYSOURCE'),
|
||||
('libpython3.11.so.1.0',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/libpython3.11.so.1.0',
|
||||
'BINARY'),
|
||||
('python3.11/lib-dynload/_typing.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_typing.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/_statistics.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_statistics.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/_contextvars.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_contextvars.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/_decimal.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_decimal.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/_hashlib.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_hashlib.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/_sha3.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_sha3.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/_blake2.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_blake2.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/_sha256.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_sha256.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/_md5.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_md5.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/_sha1.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_sha1.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/_sha512.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_sha512.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/_random.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_random.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/_bisect.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_bisect.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/math.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/math.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/unicodedata.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/unicodedata.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/array.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/array.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/select.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/select.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/_socket.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_socket.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/_csv.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_csv.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/resource.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/resource.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/_lzma.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_lzma.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/_bz2.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_bz2.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/binascii.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/binascii.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/_opcode.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_opcode.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/_pickle.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_pickle.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/_multibytecodec.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_multibytecodec.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/_codecs_jp.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_codecs_jp.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/_codecs_kr.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_codecs_kr.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/_codecs_iso2022.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_codecs_iso2022.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/_codecs_cn.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_codecs_cn.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/_codecs_tw.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_codecs_tw.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/_codecs_hk.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_codecs_hk.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/_heapq.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_heapq.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/_uuid.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_uuid.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/grp.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/grp.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/_posixsubprocess.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_posixsubprocess.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/fcntl.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/fcntl.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/_elementtree.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_elementtree.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/pyexpat.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/pyexpat.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/termios.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/termios.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/_ssl.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_ssl.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/_datetime.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_datetime.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('python3.11/lib-dynload/_tkinter.cpython-311-x86_64-linux-gnu.so',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_tkinter.cpython-311-x86_64-linux-gnu.so',
|
||||
'EXTENSION'),
|
||||
('libcrypto.so.3', '/lib/x86_64-linux-gnu/libcrypto.so.3', 'BINARY'),
|
||||
('liblzma.so.5', '/lib/x86_64-linux-gnu/liblzma.so.5', 'BINARY'),
|
||||
('libbz2.so.1.0', '/lib/x86_64-linux-gnu/libbz2.so.1.0', 'BINARY'),
|
||||
('libz.so.1', '/lib/x86_64-linux-gnu/libz.so.1', 'BINARY'),
|
||||
('libuuid.so.1', '/lib/x86_64-linux-gnu/libuuid.so.1', 'BINARY'),
|
||||
('libssl.so.3', '/lib/x86_64-linux-gnu/libssl.so.3', 'BINARY'),
|
||||
('libfreetype.so.6', '/lib/x86_64-linux-gnu/libfreetype.so.6', 'BINARY'),
|
||||
('libXau.so.6', '/lib/x86_64-linux-gnu/libXau.so.6', 'BINARY'),
|
||||
('libbrotlicommon.so.1',
|
||||
'/lib/x86_64-linux-gnu/libbrotlicommon.so.1',
|
||||
'BINARY'),
|
||||
('libtk8.6.so', '/lib/x86_64-linux-gnu/libtk8.6.so', 'BINARY'),
|
||||
('libtcl8.6.so', '/lib/x86_64-linux-gnu/libtcl8.6.so', 'BINARY'),
|
||||
('libmd.so.0', '/lib/x86_64-linux-gnu/libmd.so.0', 'BINARY'),
|
||||
('libexpat.so.1', '/lib/x86_64-linux-gnu/libexpat.so.1', 'BINARY'),
|
||||
('libXext.so.6', '/lib/x86_64-linux-gnu/libXext.so.6', 'BINARY'),
|
||||
('libXdmcp.so.6', '/lib/x86_64-linux-gnu/libXdmcp.so.6', 'BINARY'),
|
||||
('libbrotlidec.so.1', '/lib/x86_64-linux-gnu/libbrotlidec.so.1', 'BINARY'),
|
||||
('libpng16.so.16', '/lib/x86_64-linux-gnu/libpng16.so.16', 'BINARY'),
|
||||
('libfontconfig.so.1', '/lib/x86_64-linux-gnu/libfontconfig.so.1', 'BINARY'),
|
||||
('libXrender.so.1', '/lib/x86_64-linux-gnu/libXrender.so.1', 'BINARY'),
|
||||
('libXft.so.2', '/lib/x86_64-linux-gnu/libXft.so.2', 'BINARY'),
|
||||
('libX11.so.6', '/lib/x86_64-linux-gnu/libX11.so.6', 'BINARY'),
|
||||
('libbsd.so.0', '/lib/x86_64-linux-gnu/libbsd.so.0', 'BINARY'),
|
||||
('libXss.so.1', '/lib/x86_64-linux-gnu/libXss.so.1', 'BINARY'),
|
||||
('cluster_cleanup.txt',
|
||||
'/home/ubuntu/pointcab_renamer/cluster_cleanup.txt',
|
||||
'DATA'),
|
||||
('_tcl_data/tcl8/tcltest-2.5.5.tm',
|
||||
'/usr/share/tcltk/tcl8.6/tcl8/tcltest-2.5.5.tm',
|
||||
'DATA'),
|
||||
('_tk_data/choosedir.tcl', '/usr/share/tcltk/tk8.6/choosedir.tcl', 'DATA'),
|
||||
('_tcl_data/msgs/fr_ca.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/fr_ca.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/fi.msg', '/usr/share/tcltk/tcl8.6/msgs/fi.msg', 'DATA'),
|
||||
('_tcl_data/encoding/cp874.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/cp874.enc',
|
||||
'DATA'),
|
||||
('_tk_data/ttk/ttk.tcl', '/usr/share/tcltk/tk8.6/ttk/ttk.tcl', 'DATA'),
|
||||
('_tcl_data/msgs/bn_in.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/bn_in.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/cp850.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/cp850.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/hu.msg', '/usr/share/tcltk/tcl8.6/msgs/hu.msg', 'DATA'),
|
||||
('_tk_data/dialog.tcl', '/usr/share/tcltk/tk8.6/dialog.tcl', 'DATA'),
|
||||
('_tk_data/ttk/sizegrip.tcl',
|
||||
'/usr/share/tcltk/tk8.6/ttk/sizegrip.tcl',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/mk.msg', '/usr/share/tcltk/tcl8.6/msgs/mk.msg', 'DATA'),
|
||||
('_tk_data/images/logoMed.gif',
|
||||
'/usr/share/tcltk/tk8.6/images/logoMed.gif',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/sq.msg', '/usr/share/tcltk/tcl8.6/msgs/sq.msg', 'DATA'),
|
||||
('_tk_data/ttk/vistaTheme.tcl',
|
||||
'/usr/share/tcltk/tk8.6/ttk/vistaTheme.tcl',
|
||||
'DATA'),
|
||||
('_tk_data/msgs/pl.msg', '/usr/share/tcltk/tk8.6/msgs/pl.msg', 'DATA'),
|
||||
('_tk_data/ttk/scrollbar.tcl',
|
||||
'/usr/share/tcltk/tk8.6/ttk/scrollbar.tcl',
|
||||
'DATA'),
|
||||
('_tk_data/panedwindow.tcl',
|
||||
'/usr/share/tcltk/tk8.6/panedwindow.tcl',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/iso2022.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/iso2022.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/euc-jp.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/euc-jp.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/tcl8/msgcat-1.6.1.tm',
|
||||
'/usr/share/tcltk/tcl8.6/tcl8/msgcat-1.6.1.tm',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/dingbats.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/dingbats.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/macRoman.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/macRoman.enc',
|
||||
'DATA'),
|
||||
('_tk_data/tkAppInit.c', '/usr/share/tcltk/tk8.6/tkAppInit.c', 'DATA'),
|
||||
('_tk_data/ttk/combobox.tcl',
|
||||
'/usr/share/tcltk/tk8.6/ttk/combobox.tcl',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/fr.msg', '/usr/share/tcltk/tcl8.6/msgs/fr.msg', 'DATA'),
|
||||
('_tcl_data/tclIndex', '/usr/share/tcltk/tcl8.6/tclIndex', 'DATA'),
|
||||
('_tk_data/msgs/en.msg', '/usr/share/tcltk/tk8.6/msgs/en.msg', 'DATA'),
|
||||
('_tcl_data/msgs/en_ph.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/en_ph.msg',
|
||||
'DATA'),
|
||||
('_tk_data/images/pwrdLogo75.gif',
|
||||
'/usr/share/tcltk/tk8.6/images/pwrdLogo75.gif',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/zh_cn.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/zh_cn.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/cp866.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/cp866.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/mr.msg', '/usr/share/tcltk/tcl8.6/msgs/mr.msg', 'DATA'),
|
||||
('_tk_data/ttk/winTheme.tcl',
|
||||
'/usr/share/tcltk/tk8.6/ttk/winTheme.tcl',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/es_hn.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/es_hn.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/th.msg', '/usr/share/tcltk/tcl8.6/msgs/th.msg', 'DATA'),
|
||||
('_tk_data/msgs/hu.msg', '/usr/share/tcltk/tk8.6/msgs/hu.msg', 'DATA'),
|
||||
('_tk_data/images/pwrdLogo175.gif',
|
||||
'/usr/share/tcltk/tk8.6/images/pwrdLogo175.gif',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/iso8859-9.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/iso8859-9.enc',
|
||||
'DATA'),
|
||||
('_tk_data/tkfbox.tcl', '/usr/share/tcltk/tk8.6/tkfbox.tcl', 'DATA'),
|
||||
('_tcl_data/msgs/sk.msg', '/usr/share/tcltk/tcl8.6/msgs/sk.msg', 'DATA'),
|
||||
('_tcl_data/encoding/macUkraine.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/macUkraine.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/ebcdic.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/ebcdic.enc',
|
||||
'DATA'),
|
||||
('_tk_data/ttk/clamTheme.tcl',
|
||||
'/usr/share/tcltk/tk8.6/ttk/clamTheme.tcl',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/macJapan.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/macJapan.enc',
|
||||
'DATA'),
|
||||
('_tk_data/msgs/fi.msg', '/usr/share/tcltk/tk8.6/msgs/fi.msg', 'DATA'),
|
||||
('_tcl_data/tm.tcl', '/usr/share/tcltk/tcl8.6/tm.tcl', 'DATA'),
|
||||
('_tk_data/images/logoLarge.gif',
|
||||
'/usr/share/tcltk/tk8.6/images/logoLarge.gif',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/ja.msg', '/usr/share/tcltk/tcl8.6/msgs/ja.msg', 'DATA'),
|
||||
('_tcl_data/msgs/gl.msg', '/usr/share/tcltk/tcl8.6/msgs/gl.msg', 'DATA'),
|
||||
('_tk_data/safetk.tcl', '/usr/share/tcltk/tk8.6/safetk.tcl', 'DATA'),
|
||||
('_tcl_data/msgs/kok.msg', '/usr/share/tcltk/tcl8.6/msgs/kok.msg', 'DATA'),
|
||||
('_tcl_data/msgs/mr_in.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/mr_in.msg',
|
||||
'DATA'),
|
||||
('_tk_data/iconlist.tcl', '/usr/share/tcltk/tk8.6/iconlist.tcl', 'DATA'),
|
||||
('_tcl_data/msgs/es_ni.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/es_ni.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/macRomania.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/macRomania.enc',
|
||||
'DATA'),
|
||||
('_tk_data/fontchooser.tcl',
|
||||
'/usr/share/tcltk/tk8.6/fontchooser.tcl',
|
||||
'DATA'),
|
||||
('_tk_data/ttk/entry.tcl', '/usr/share/tcltk/tk8.6/ttk/entry.tcl', 'DATA'),
|
||||
('_tcl_data/encoding/cp737.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/cp737.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/zh_tw.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/zh_tw.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/es_co.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/es_co.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/pl.msg', '/usr/share/tcltk/tcl8.6/msgs/pl.msg', 'DATA'),
|
||||
('_tk_data/images/logo64.gif',
|
||||
'/usr/share/tcltk/tk8.6/images/logo64.gif',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/sl.msg', '/usr/share/tcltk/tcl8.6/msgs/sl.msg', 'DATA'),
|
||||
('_tk_data/msgs/en_gb.msg', '/usr/share/tcltk/tk8.6/msgs/en_gb.msg', 'DATA'),
|
||||
('_tcl_data/msgs/kl.msg', '/usr/share/tcltk/tcl8.6/msgs/kl.msg', 'DATA'),
|
||||
('_tcl_data/encoding/cp864.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/cp864.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/lv.msg', '/usr/share/tcltk/tcl8.6/msgs/lv.msg', 'DATA'),
|
||||
('_tcl_data/encoding/iso8859-8.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/iso8859-8.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/de_be.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/de_be.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/cp936.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/cp936.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/hr.msg', '/usr/share/tcltk/tcl8.6/msgs/hr.msg', 'DATA'),
|
||||
('_tcl_data/encoding/big5.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/big5.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/macIceland.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/macIceland.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/history.tcl', '/usr/share/tcltk/tcl8.6/history.tcl', 'DATA'),
|
||||
('_tcl_data/msgs/hi.msg', '/usr/share/tcltk/tcl8.6/msgs/hi.msg', 'DATA'),
|
||||
('_tcl_data/msgs/kw.msg', '/usr/share/tcltk/tcl8.6/msgs/kw.msg', 'DATA'),
|
||||
('_tcl_data/msgs/en_au.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/en_au.msg',
|
||||
'DATA'),
|
||||
('_tk_data/ttk/scale.tcl', '/usr/share/tcltk/tk8.6/ttk/scale.tcl', 'DATA'),
|
||||
('_tcl_data/msgs/fa_in.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/fa_in.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/iso8859-4.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/iso8859-4.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/ru_ua.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/ru_ua.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/iso8859-6.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/iso8859-6.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/cp1251.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/cp1251.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/es_pe.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/es_pe.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/opt0.4/pkgIndex.tcl',
|
||||
'/usr/share/tcltk/tcl8.6/opt0.4/pkgIndex.tcl',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/et.msg', '/usr/share/tcltk/tcl8.6/msgs/et.msg', 'DATA'),
|
||||
('_tcl_data/msgs/kl_gl.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/kl_gl.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/cp1256.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/cp1256.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/jis0201.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/jis0201.enc',
|
||||
'DATA'),
|
||||
('_tk_data/text.tcl', '/usr/share/tcltk/tk8.6/text.tcl', 'DATA'),
|
||||
('_tk_data/images/tai-ku.gif',
|
||||
'/usr/share/tcltk/tk8.6/images/tai-ku.gif',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/kok_in.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/kok_in.msg',
|
||||
'DATA'),
|
||||
('_tk_data/ttk/xpTheme.tcl',
|
||||
'/usr/share/tcltk/tk8.6/ttk/xpTheme.tcl',
|
||||
'DATA'),
|
||||
('_tk_data/icons.tcl', '/usr/share/tcltk/tk8.6/icons.tcl', 'DATA'),
|
||||
('_tcl_data/msgs/sv.msg', '/usr/share/tcltk/tcl8.6/msgs/sv.msg', 'DATA'),
|
||||
('_tk_data/ttk/aquaTheme.tcl',
|
||||
'/usr/share/tcltk/tk8.6/ttk/aquaTheme.tcl',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/lt.msg', '/usr/share/tcltk/tcl8.6/msgs/lt.msg', 'DATA'),
|
||||
('_tcl_data/msgs/fo_fo.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/fo_fo.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/macCentEuro.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/macCentEuro.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/en_bw.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/en_bw.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/iso8859-14.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/iso8859-14.enc',
|
||||
'DATA'),
|
||||
('_tk_data/ttk/altTheme.tcl',
|
||||
'/usr/share/tcltk/tk8.6/ttk/altTheme.tcl',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/gb2312.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/gb2312.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/cp1252.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/cp1252.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/cp1255.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/cp1255.enc',
|
||||
'DATA'),
|
||||
('_tk_data/palette.tcl', '/usr/share/tcltk/tk8.6/palette.tcl', 'DATA'),
|
||||
('_tcl_data/msgs/eo.msg', '/usr/share/tcltk/tcl8.6/msgs/eo.msg', 'DATA'),
|
||||
('_tcl_data/encoding/iso8859-13.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/iso8859-13.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/nl.msg', '/usr/share/tcltk/tcl8.6/msgs/nl.msg', 'DATA'),
|
||||
('_tcl_data/msgs/en_ie.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/en_ie.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/es_bo.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/es_bo.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/ta.msg', '/usr/share/tcltk/tcl8.6/msgs/ta.msg', 'DATA'),
|
||||
('_tcl_data/encoding/euc-kr.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/euc-kr.enc',
|
||||
'DATA'),
|
||||
('_tk_data/scale.tcl', '/usr/share/tcltk/tk8.6/scale.tcl', 'DATA'),
|
||||
('_tcl_data/tclAppInit.c', '/usr/share/tcltk/tcl8.6/tclAppInit.c', 'DATA'),
|
||||
('_tcl_data/encoding/iso2022-kr.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/iso2022-kr.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/ar_jo.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/ar_jo.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/en_gb.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/en_gb.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/sh.msg', '/usr/share/tcltk/tcl8.6/msgs/sh.msg', 'DATA'),
|
||||
('_tcl_data/msgs/da.msg', '/usr/share/tcltk/tcl8.6/msgs/da.msg', 'DATA'),
|
||||
('_tcl_data/msgs/nl_be.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/nl_be.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/cp852.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/cp852.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/be.msg', '/usr/share/tcltk/tcl8.6/msgs/be.msg', 'DATA'),
|
||||
('_tk_data/msgs/nl.msg', '/usr/share/tcltk/tk8.6/msgs/nl.msg', 'DATA'),
|
||||
('_tcl_data/msgs/fa_ir.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/fa_ir.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/it.msg', '/usr/share/tcltk/tcl8.6/msgs/it.msg', 'DATA'),
|
||||
('_tk_data/ttk/cursors.tcl',
|
||||
'/usr/share/tcltk/tk8.6/ttk/cursors.tcl',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/zh_sg.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/zh_sg.msg',
|
||||
'DATA'),
|
||||
('_tk_data/spinbox.tcl', '/usr/share/tcltk/tk8.6/spinbox.tcl', 'DATA'),
|
||||
('_tk_data/msgs/es.msg', '/usr/share/tcltk/tk8.6/msgs/es.msg', 'DATA'),
|
||||
('_tk_data/msgs/el.msg', '/usr/share/tcltk/tk8.6/msgs/el.msg', 'DATA'),
|
||||
('_tcl_data/msgs/ar_sy.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/ar_sy.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/ar.msg', '/usr/share/tcltk/tcl8.6/msgs/ar.msg', 'DATA'),
|
||||
('_tcl_data/msgs/ga_ie.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/ga_ie.msg',
|
||||
'DATA'),
|
||||
('_tk_data/msgs/sv.msg', '/usr/share/tcltk/tk8.6/msgs/sv.msg', 'DATA'),
|
||||
('_tk_data/tclIndex', '/usr/share/tcltk/tk8.6/tclIndex', 'DATA'),
|
||||
('_tcl_data/msgs/uk.msg', '/usr/share/tcltk/tcl8.6/msgs/uk.msg', 'DATA'),
|
||||
('_tcl_data/word.tcl', '/usr/share/tcltk/tcl8.6/word.tcl', 'DATA'),
|
||||
('_tcl_data/msgs/ga.msg', '/usr/share/tcltk/tcl8.6/msgs/ga.msg', 'DATA'),
|
||||
('_tcl_data/msgs/en_za.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/en_za.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/fr_be.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/fr_be.msg',
|
||||
'DATA'),
|
||||
('_tk_data/msgbox.tcl', '/usr/share/tcltk/tk8.6/msgbox.tcl', 'DATA'),
|
||||
('_tcl_data/encoding/cp1257.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/cp1257.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/iso8859-3.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/iso8859-3.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/euc-cn.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/euc-cn.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/id.msg', '/usr/share/tcltk/tcl8.6/msgs/id.msg', 'DATA'),
|
||||
('_tk_data/ttk/menubutton.tcl',
|
||||
'/usr/share/tcltk/tk8.6/ttk/menubutton.tcl',
|
||||
'DATA'),
|
||||
('_tk_data/tearoff.tcl', '/usr/share/tcltk/tk8.6/tearoff.tcl', 'DATA'),
|
||||
('_tk_data/optMenu.tcl', '/usr/share/tcltk/tk8.6/optMenu.tcl', 'DATA'),
|
||||
('_tcl_data/tcl8/platform/shell-1.1.4.tm',
|
||||
'/usr/share/tcltk/tcl8.6/tcl8/platform/shell-1.1.4.tm',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/cp860.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/cp860.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/macCroatian.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/macCroatian.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/cp1253.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/cp1253.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/gv.msg', '/usr/share/tcltk/tcl8.6/msgs/gv.msg', 'DATA'),
|
||||
('_tcl_data/init.tcl', '/usr/share/tcltk/tcl8.6/init.tcl', 'DATA'),
|
||||
('_tcl_data/msgs/fr_ch.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/fr_ch.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/iso8859-10.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/iso8859-10.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/bg.msg', '/usr/share/tcltk/tcl8.6/msgs/bg.msg', 'DATA'),
|
||||
('_tcl_data/msgs/ro.msg', '/usr/share/tcltk/tcl8.6/msgs/ro.msg', 'DATA'),
|
||||
('_tcl_data/encoding/cp857.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/cp857.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/gl_es.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/gl_es.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/es_uy.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/es_uy.msg',
|
||||
'DATA'),
|
||||
('_tk_data/ttk/panedwindow.tcl',
|
||||
'/usr/share/tcltk/tk8.6/ttk/panedwindow.tcl',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/af.msg', '/usr/share/tcltk/tcl8.6/msgs/af.msg', 'DATA'),
|
||||
('_tcl_data/msgs/de_at.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/de_at.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/auto.tcl', '/usr/share/tcltk/tcl8.6/auto.tcl', 'DATA'),
|
||||
('_tcl_data/msgs/ms_my.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/ms_my.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/ms.msg', '/usr/share/tcltk/tcl8.6/msgs/ms.msg', 'DATA'),
|
||||
('_tcl_data/encoding/gb12345.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/gb12345.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/ru.msg', '/usr/share/tcltk/tcl8.6/msgs/ru.msg', 'DATA'),
|
||||
('_tcl_data/msgs/sr.msg', '/usr/share/tcltk/tcl8.6/msgs/sr.msg', 'DATA'),
|
||||
('_tcl_data/msgs/zh.msg', '/usr/share/tcltk/tcl8.6/msgs/zh.msg', 'DATA'),
|
||||
('_tcl_data/msgs/mt.msg', '/usr/share/tcltk/tcl8.6/msgs/mt.msg', 'DATA'),
|
||||
('_tcl_data/encoding/jis0208.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/jis0208.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/iso8859-15.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/iso8859-15.enc',
|
||||
'DATA'),
|
||||
('_tk_data/msgs/zh_cn.msg', '/usr/share/tcltk/tk8.6/msgs/zh_cn.msg', 'DATA'),
|
||||
('_tcl_data/encoding/iso8859-16.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/iso8859-16.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/koi8-u.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/koi8-u.enc',
|
||||
'DATA'),
|
||||
('_tk_data/unsupported.tcl',
|
||||
'/usr/share/tcltk/tk8.6/unsupported.tcl',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/cp865.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/cp865.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/es_ar.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/es_ar.msg',
|
||||
'DATA'),
|
||||
('_tk_data/msgs/cs.msg', '/usr/share/tcltk/tk8.6/msgs/cs.msg', 'DATA'),
|
||||
('_tcl_data/encoding/koi8-r.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/koi8-r.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/parray.tcl', '/usr/share/tcltk/tcl8.6/parray.tcl', 'DATA'),
|
||||
('_tk_data/ttk/classicTheme.tcl',
|
||||
'/usr/share/tcltk/tk8.6/ttk/classicTheme.tcl',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/cp1254.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/cp1254.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/symbol.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/symbol.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/sw.msg', '/usr/share/tcltk/tcl8.6/msgs/sw.msg', 'DATA'),
|
||||
('_tk_data/images/pwrdLogo.eps',
|
||||
'/usr/share/tcltk/tk8.6/images/pwrdLogo.eps',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/es.msg', '/usr/share/tcltk/tcl8.6/msgs/es.msg', 'DATA'),
|
||||
('_tcl_data/package.tcl', '/usr/share/tcltk/tcl8.6/package.tcl', 'DATA'),
|
||||
('_tcl_data/encoding/macTurkish.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/macTurkish.enc',
|
||||
'DATA'),
|
||||
('_tk_data/bgerror.tcl', '/usr/share/tcltk/tk8.6/bgerror.tcl', 'DATA'),
|
||||
('_tk_data/listbox.tcl', '/usr/share/tcltk/tk8.6/listbox.tcl', 'DATA'),
|
||||
('_tcl_data/msgs/es_mx.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/es_mx.msg',
|
||||
'DATA'),
|
||||
('_tk_data/msgs/it.msg', '/usr/share/tcltk/tk8.6/msgs/it.msg', 'DATA'),
|
||||
('_tcl_data/encoding/iso8859-2.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/iso8859-2.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/cp1250.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/cp1250.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/macThai.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/macThai.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/macGreek.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/macGreek.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/opt0.4/optparse.tcl',
|
||||
'/usr/share/tcltk/tcl8.6/opt0.4/optparse.tcl',
|
||||
'DATA'),
|
||||
('_tk_data/msgs/ru.msg', '/usr/share/tcltk/tk8.6/msgs/ru.msg', 'DATA'),
|
||||
('_tcl_data/encoding/ksc5601.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/ksc5601.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/jis0212.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/jis0212.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/tis-620.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/tis-620.enc',
|
||||
'DATA'),
|
||||
('_tk_data/tk.tcl', '/usr/share/tcltk/tk8.6/tk.tcl', 'DATA'),
|
||||
('_tk_data/console.tcl', '/usr/share/tcltk/tk8.6/console.tcl', 'DATA'),
|
||||
('_tcl_data/msgs/it_ch.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/it_ch.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/macDingbats.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/macDingbats.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/cp437.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/cp437.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/en_be.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/en_be.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/tcl8/platform-1.0.19.tm',
|
||||
'/usr/share/tcltk/tcl8.6/tcl8/platform-1.0.19.tm',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/pt_br.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/pt_br.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/clock.tcl', '/usr/share/tcltk/tcl8.6/clock.tcl', 'DATA'),
|
||||
('_tk_data/ttk/spinbox.tcl',
|
||||
'/usr/share/tcltk/tk8.6/ttk/spinbox.tcl',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/iso8859-7.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/iso8859-7.enc',
|
||||
'DATA'),
|
||||
('_tk_data/obsolete.tcl', '/usr/share/tcltk/tk8.6/obsolete.tcl', 'DATA'),
|
||||
('_tcl_data/tcl8/http-2.9.8.tm',
|
||||
'/usr/share/tcltk/tcl8.6/tcl8/http-2.9.8.tm',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/es_ec.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/es_ec.msg',
|
||||
'DATA'),
|
||||
('_tk_data/msgs/pt.msg', '/usr/share/tcltk/tk8.6/msgs/pt.msg', 'DATA'),
|
||||
('_tcl_data/encoding/cns11643.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/cns11643.enc',
|
||||
'DATA'),
|
||||
('_tk_data/focus.tcl', '/usr/share/tcltk/tk8.6/focus.tcl', 'DATA'),
|
||||
('_tcl_data/msgs/is.msg', '/usr/share/tcltk/tcl8.6/msgs/is.msg', 'DATA'),
|
||||
('_tcl_data/msgs/en_hk.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/en_hk.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/bn.msg', '/usr/share/tcltk/tcl8.6/msgs/bn.msg', 'DATA'),
|
||||
('_tcl_data/encoding/cp861.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/cp861.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/kw_gb.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/kw_gb.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/cp869.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/cp869.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/en_zw.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/en_zw.msg',
|
||||
'DATA'),
|
||||
('_tk_data/button.tcl', '/usr/share/tcltk/tk8.6/button.tcl', 'DATA'),
|
||||
('_tk_data/ttk/treeview.tcl',
|
||||
'/usr/share/tcltk/tk8.6/ttk/treeview.tcl',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/es_cl.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/es_cl.msg',
|
||||
'DATA'),
|
||||
('_tk_data/ttk/defaults.tcl',
|
||||
'/usr/share/tcltk/tk8.6/ttk/defaults.tcl',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/cp932.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/cp932.enc',
|
||||
'DATA'),
|
||||
('_tk_data/xmfbox.tcl', '/usr/share/tcltk/tk8.6/xmfbox.tcl', 'DATA'),
|
||||
('_tcl_data/msgs/el.msg', '/usr/share/tcltk/tcl8.6/msgs/el.msg', 'DATA'),
|
||||
('_tcl_data/msgs/fo.msg', '/usr/share/tcltk/tcl8.6/msgs/fo.msg', 'DATA'),
|
||||
('_tcl_data/encoding/cp949.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/cp949.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/safe.tcl', '/usr/share/tcltk/tcl8.6/safe.tcl', 'DATA'),
|
||||
('_tk_data/images/pwrdLogo150.gif',
|
||||
'/usr/share/tcltk/tk8.6/images/pwrdLogo150.gif',
|
||||
'DATA'),
|
||||
('_tk_data/entry.tcl', '/usr/share/tcltk/tk8.6/entry.tcl', 'DATA'),
|
||||
('_tcl_data/msgs/vi.msg', '/usr/share/tcltk/tcl8.6/msgs/vi.msg', 'DATA'),
|
||||
('_tcl_data/http1.0/pkgIndex.tcl',
|
||||
'/usr/share/tcltk/tcl8.6/http1.0/pkgIndex.tcl',
|
||||
'DATA'),
|
||||
('_tk_data/msgs/de.msg', '/usr/share/tcltk/tk8.6/msgs/de.msg', 'DATA'),
|
||||
('_tcl_data/encoding/cp855.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/cp855.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/ar_lb.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/ar_lb.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/eu_es.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/eu_es.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/cs.msg', '/usr/share/tcltk/tcl8.6/msgs/cs.msg', 'DATA'),
|
||||
('_tcl_data/encoding/cp862.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/cp862.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/pt.msg', '/usr/share/tcltk/tcl8.6/msgs/pt.msg', 'DATA'),
|
||||
('_tk_data/ttk/progress.tcl',
|
||||
'/usr/share/tcltk/tk8.6/ttk/progress.tcl',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/gb2312-raw.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/gb2312-raw.enc',
|
||||
'DATA'),
|
||||
('_tk_data/clrpick.tcl', '/usr/share/tcltk/tk8.6/clrpick.tcl', 'DATA'),
|
||||
('_tcl_data/encoding/shiftjis.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/shiftjis.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/nb.msg', '/usr/share/tcltk/tcl8.6/msgs/nb.msg', 'DATA'),
|
||||
('_tcl_data/msgs/he.msg', '/usr/share/tcltk/tcl8.6/msgs/he.msg', 'DATA'),
|
||||
('_tk_data/msgs/fr.msg', '/usr/share/tcltk/tk8.6/msgs/fr.msg', 'DATA'),
|
||||
('_tk_data/comdlg.tcl', '/usr/share/tcltk/tk8.6/comdlg.tcl', 'DATA'),
|
||||
('_tcl_data/http1.0/http.tcl',
|
||||
'/usr/share/tcltk/tcl8.6/http1.0/http.tcl',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/fa.msg', '/usr/share/tcltk/tcl8.6/msgs/fa.msg', 'DATA'),
|
||||
('_tcl_data/encoding/gb1988.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/gb1988.enc',
|
||||
'DATA'),
|
||||
('_tk_data/images/logo100.gif',
|
||||
'/usr/share/tcltk/tk8.6/images/logo100.gif',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/es_gt.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/es_gt.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/ta_in.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/ta_in.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/cp863.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/cp863.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/tr.msg', '/usr/share/tcltk/tcl8.6/msgs/tr.msg', 'DATA'),
|
||||
('_tcl_data/msgs/es_pr.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/es_pr.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/ca.msg', '/usr/share/tcltk/tcl8.6/msgs/ca.msg', 'DATA'),
|
||||
('_tk_data/menu.tcl', '/usr/share/tcltk/tk8.6/menu.tcl', 'DATA'),
|
||||
('_tk_data/msgs/da.msg', '/usr/share/tcltk/tk8.6/msgs/da.msg', 'DATA'),
|
||||
('_tk_data/images/README', '/usr/share/tcltk/tk8.6/images/README', 'DATA'),
|
||||
('_tcl_data/encoding/iso8859-1.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/iso8859-1.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/es_py.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/es_py.msg',
|
||||
'DATA'),
|
||||
('_tk_data/ttk/notebook.tcl',
|
||||
'/usr/share/tcltk/tk8.6/ttk/notebook.tcl',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/ar_in.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/ar_in.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/cp1258.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/cp1258.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/hi_in.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/hi_in.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/de.msg', '/usr/share/tcltk/tcl8.6/msgs/de.msg', 'DATA'),
|
||||
('_tk_data/ttk/button.tcl', '/usr/share/tcltk/tk8.6/ttk/button.tcl', 'DATA'),
|
||||
('_tk_data/msgs/eo.msg', '/usr/share/tcltk/tk8.6/msgs/eo.msg', 'DATA'),
|
||||
('_tcl_data/msgs/id_id.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/id_id.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/en_sg.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/en_sg.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/es_ve.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/es_ve.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/te_in.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/te_in.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/macCyrillic.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/macCyrillic.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/cp950.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/cp950.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/iso8859-11.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/iso8859-11.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/en_in.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/en_in.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/iso2022-jp.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/iso2022-jp.enc',
|
||||
'DATA'),
|
||||
('_tk_data/ttk/utils.tcl', '/usr/share/tcltk/tk8.6/ttk/utils.tcl', 'DATA'),
|
||||
('_tcl_data/msgs/te.msg', '/usr/share/tcltk/tcl8.6/msgs/te.msg', 'DATA'),
|
||||
('_tcl_data/msgs/ko_kr.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/ko_kr.msg',
|
||||
'DATA'),
|
||||
('_tk_data/images/logo.eps',
|
||||
'/usr/share/tcltk/tk8.6/images/logo.eps',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/gv_gb.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/gv_gb.msg',
|
||||
'DATA'),
|
||||
('_tk_data/scrlbar.tcl', '/usr/share/tcltk/tk8.6/scrlbar.tcl', 'DATA'),
|
||||
('_tcl_data/msgs/en_ca.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/en_ca.msg',
|
||||
'DATA'),
|
||||
('_tk_data/images/pwrdLogo200.gif',
|
||||
'/usr/share/tcltk/tk8.6/images/pwrdLogo200.gif',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/es_do.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/es_do.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/nn.msg', '/usr/share/tcltk/tcl8.6/msgs/nn.msg', 'DATA'),
|
||||
('_tk_data/megawidget.tcl', '/usr/share/tcltk/tk8.6/megawidget.tcl', 'DATA'),
|
||||
('_tcl_data/encoding/ascii.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/ascii.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/encoding/cp775.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/cp775.enc',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/en_nz.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/en_nz.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/eu.msg', '/usr/share/tcltk/tcl8.6/msgs/eu.msg', 'DATA'),
|
||||
('_tcl_data/msgs/es_cr.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/es_cr.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/es_sv.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/es_sv.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/af_za.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/af_za.msg',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/es_pa.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/es_pa.msg',
|
||||
'DATA'),
|
||||
('_tk_data/ttk/fonts.tcl', '/usr/share/tcltk/tk8.6/ttk/fonts.tcl', 'DATA'),
|
||||
('_tk_data/images/pwrdLogo100.gif',
|
||||
'/usr/share/tcltk/tk8.6/images/pwrdLogo100.gif',
|
||||
'DATA'),
|
||||
('_tcl_data/msgs/zh_hk.msg',
|
||||
'/usr/share/tcltk/tcl8.6/msgs/zh_hk.msg',
|
||||
'DATA'),
|
||||
('_tk_data/mkpsenc.tcl', '/usr/share/tcltk/tk8.6/mkpsenc.tcl', 'DATA'),
|
||||
('_tcl_data/msgs/ko.msg', '/usr/share/tcltk/tcl8.6/msgs/ko.msg', 'DATA'),
|
||||
('_tcl_data/encoding/iso8859-5.enc',
|
||||
'/usr/share/tcltk/tcl8.6/encoding/iso8859-5.enc',
|
||||
'DATA'),
|
||||
('base_library.zip',
|
||||
'/home/ubuntu/pointcab_renamer/build/pointcab_renamer/base_library.zip',
|
||||
'DATA')],
|
||||
'libpython3.11.so.1.0',
|
||||
False,
|
||||
False,
|
||||
False,
|
||||
[],
|
||||
None,
|
||||
None,
|
||||
None)
|
||||
Binary file not shown.
|
|
@ -0,0 +1,412 @@
|
|||
('/home/ubuntu/pointcab_renamer/build/pointcab_renamer/PYZ-00.pyz',
|
||||
[('_compat_pickle',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/_compat_pickle.py',
|
||||
'PYMODULE'),
|
||||
('_compression',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/_compression.py',
|
||||
'PYMODULE'),
|
||||
('_py_abc',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/_py_abc.py',
|
||||
'PYMODULE'),
|
||||
('_pydecimal',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/_pydecimal.py',
|
||||
'PYMODULE'),
|
||||
('_strptime',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/_strptime.py',
|
||||
'PYMODULE'),
|
||||
('_threading_local',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/_threading_local.py',
|
||||
'PYMODULE'),
|
||||
('argparse',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/argparse.py',
|
||||
'PYMODULE'),
|
||||
('ast',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/ast.py',
|
||||
'PYMODULE'),
|
||||
('base64',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/base64.py',
|
||||
'PYMODULE'),
|
||||
('bisect',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/bisect.py',
|
||||
'PYMODULE'),
|
||||
('bz2',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/bz2.py',
|
||||
'PYMODULE'),
|
||||
('calendar',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/calendar.py',
|
||||
'PYMODULE'),
|
||||
('contextlib',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/contextlib.py',
|
||||
'PYMODULE'),
|
||||
('contextvars',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/contextvars.py',
|
||||
'PYMODULE'),
|
||||
('copy',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/copy.py',
|
||||
'PYMODULE'),
|
||||
('csv',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/csv.py',
|
||||
'PYMODULE'),
|
||||
('dataclasses',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/dataclasses.py',
|
||||
'PYMODULE'),
|
||||
('datetime',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/datetime.py',
|
||||
'PYMODULE'),
|
||||
('decimal',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/decimal.py',
|
||||
'PYMODULE'),
|
||||
('dis',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/dis.py',
|
||||
'PYMODULE'),
|
||||
('email',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/email/__init__.py',
|
||||
'PYMODULE'),
|
||||
('email._encoded_words',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/email/_encoded_words.py',
|
||||
'PYMODULE'),
|
||||
('email._header_value_parser',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/email/_header_value_parser.py',
|
||||
'PYMODULE'),
|
||||
('email._parseaddr',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/email/_parseaddr.py',
|
||||
'PYMODULE'),
|
||||
('email._policybase',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/email/_policybase.py',
|
||||
'PYMODULE'),
|
||||
('email.base64mime',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/email/base64mime.py',
|
||||
'PYMODULE'),
|
||||
('email.charset',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/email/charset.py',
|
||||
'PYMODULE'),
|
||||
('email.contentmanager',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/email/contentmanager.py',
|
||||
'PYMODULE'),
|
||||
('email.encoders',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/email/encoders.py',
|
||||
'PYMODULE'),
|
||||
('email.errors',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/email/errors.py',
|
||||
'PYMODULE'),
|
||||
('email.feedparser',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/email/feedparser.py',
|
||||
'PYMODULE'),
|
||||
('email.generator',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/email/generator.py',
|
||||
'PYMODULE'),
|
||||
('email.header',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/email/header.py',
|
||||
'PYMODULE'),
|
||||
('email.headerregistry',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/email/headerregistry.py',
|
||||
'PYMODULE'),
|
||||
('email.iterators',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/email/iterators.py',
|
||||
'PYMODULE'),
|
||||
('email.message',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/email/message.py',
|
||||
'PYMODULE'),
|
||||
('email.parser',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/email/parser.py',
|
||||
'PYMODULE'),
|
||||
('email.policy',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/email/policy.py',
|
||||
'PYMODULE'),
|
||||
('email.quoprimime',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/email/quoprimime.py',
|
||||
'PYMODULE'),
|
||||
('email.utils',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/email/utils.py',
|
||||
'PYMODULE'),
|
||||
('fnmatch',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/fnmatch.py',
|
||||
'PYMODULE'),
|
||||
('fractions',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/fractions.py',
|
||||
'PYMODULE'),
|
||||
('ftplib',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/ftplib.py',
|
||||
'PYMODULE'),
|
||||
('getopt',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/getopt.py',
|
||||
'PYMODULE'),
|
||||
('getpass',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/getpass.py',
|
||||
'PYMODULE'),
|
||||
('gettext',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/gettext.py',
|
||||
'PYMODULE'),
|
||||
('gzip',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/gzip.py',
|
||||
'PYMODULE'),
|
||||
('hashlib',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/hashlib.py',
|
||||
'PYMODULE'),
|
||||
('http',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/http/__init__.py',
|
||||
'PYMODULE'),
|
||||
('http.client',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/http/client.py',
|
||||
'PYMODULE'),
|
||||
('http.cookiejar',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/http/cookiejar.py',
|
||||
'PYMODULE'),
|
||||
('importlib',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/importlib/__init__.py',
|
||||
'PYMODULE'),
|
||||
('importlib._abc',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/importlib/_abc.py',
|
||||
'PYMODULE'),
|
||||
('importlib._bootstrap',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/importlib/_bootstrap.py',
|
||||
'PYMODULE'),
|
||||
('importlib._bootstrap_external',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/importlib/_bootstrap_external.py',
|
||||
'PYMODULE'),
|
||||
('importlib.abc',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/importlib/abc.py',
|
||||
'PYMODULE'),
|
||||
('importlib.machinery',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/importlib/machinery.py',
|
||||
'PYMODULE'),
|
||||
('importlib.metadata',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/importlib/metadata/__init__.py',
|
||||
'PYMODULE'),
|
||||
('importlib.metadata._adapters',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/importlib/metadata/_adapters.py',
|
||||
'PYMODULE'),
|
||||
('importlib.metadata._collections',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/importlib/metadata/_collections.py',
|
||||
'PYMODULE'),
|
||||
('importlib.metadata._functools',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/importlib/metadata/_functools.py',
|
||||
'PYMODULE'),
|
||||
('importlib.metadata._itertools',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/importlib/metadata/_itertools.py',
|
||||
'PYMODULE'),
|
||||
('importlib.metadata._meta',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/importlib/metadata/_meta.py',
|
||||
'PYMODULE'),
|
||||
('importlib.metadata._text',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/importlib/metadata/_text.py',
|
||||
'PYMODULE'),
|
||||
('importlib.readers',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/importlib/readers.py',
|
||||
'PYMODULE'),
|
||||
('importlib.resources',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/importlib/resources/__init__.py',
|
||||
'PYMODULE'),
|
||||
('importlib.resources._adapters',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/importlib/resources/_adapters.py',
|
||||
'PYMODULE'),
|
||||
('importlib.resources._common',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/importlib/resources/_common.py',
|
||||
'PYMODULE'),
|
||||
('importlib.resources._itertools',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/importlib/resources/_itertools.py',
|
||||
'PYMODULE'),
|
||||
('importlib.resources._legacy',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/importlib/resources/_legacy.py',
|
||||
'PYMODULE'),
|
||||
('importlib.resources.abc',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/importlib/resources/abc.py',
|
||||
'PYMODULE'),
|
||||
('importlib.resources.readers',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/importlib/resources/readers.py',
|
||||
'PYMODULE'),
|
||||
('importlib.util',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/importlib/util.py',
|
||||
'PYMODULE'),
|
||||
('inspect',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/inspect.py',
|
||||
'PYMODULE'),
|
||||
('ipaddress',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/ipaddress.py',
|
||||
'PYMODULE'),
|
||||
('logging',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/logging/__init__.py',
|
||||
'PYMODULE'),
|
||||
('lzma',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/lzma.py',
|
||||
'PYMODULE'),
|
||||
('mimetypes',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/mimetypes.py',
|
||||
'PYMODULE'),
|
||||
('netrc',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/netrc.py',
|
||||
'PYMODULE'),
|
||||
('nturl2path',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/nturl2path.py',
|
||||
'PYMODULE'),
|
||||
('numbers',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/numbers.py',
|
||||
'PYMODULE'),
|
||||
('opcode',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/opcode.py',
|
||||
'PYMODULE'),
|
||||
('pathlib',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/pathlib.py',
|
||||
'PYMODULE'),
|
||||
('pickle',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/pickle.py',
|
||||
'PYMODULE'),
|
||||
('platform',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/platform.py',
|
||||
'PYMODULE'),
|
||||
('pprint',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/pprint.py',
|
||||
'PYMODULE'),
|
||||
('py_compile',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/py_compile.py',
|
||||
'PYMODULE'),
|
||||
('quopri',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/quopri.py',
|
||||
'PYMODULE'),
|
||||
('random',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/random.py',
|
||||
'PYMODULE'),
|
||||
('selectors',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/selectors.py',
|
||||
'PYMODULE'),
|
||||
('shlex',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/shlex.py',
|
||||
'PYMODULE'),
|
||||
('shutil',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/shutil.py',
|
||||
'PYMODULE'),
|
||||
('signal',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/signal.py',
|
||||
'PYMODULE'),
|
||||
('socket',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/socket.py',
|
||||
'PYMODULE'),
|
||||
('ssl',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/ssl.py',
|
||||
'PYMODULE'),
|
||||
('statistics',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/statistics.py',
|
||||
'PYMODULE'),
|
||||
('string',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/string.py',
|
||||
'PYMODULE'),
|
||||
('stringprep',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/stringprep.py',
|
||||
'PYMODULE'),
|
||||
('subprocess',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/subprocess.py',
|
||||
'PYMODULE'),
|
||||
('tarfile',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/tarfile.py',
|
||||
'PYMODULE'),
|
||||
('tempfile',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/tempfile.py',
|
||||
'PYMODULE'),
|
||||
('textwrap',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/textwrap.py',
|
||||
'PYMODULE'),
|
||||
('threading',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/threading.py',
|
||||
'PYMODULE'),
|
||||
('tkinter',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/tkinter/__init__.py',
|
||||
'PYMODULE'),
|
||||
('tkinter.commondialog',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/tkinter/commondialog.py',
|
||||
'PYMODULE'),
|
||||
('tkinter.constants',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/tkinter/constants.py',
|
||||
'PYMODULE'),
|
||||
('tkinter.dialog',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/tkinter/dialog.py',
|
||||
'PYMODULE'),
|
||||
('tkinter.filedialog',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/tkinter/filedialog.py',
|
||||
'PYMODULE'),
|
||||
('tkinter.messagebox',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/tkinter/messagebox.py',
|
||||
'PYMODULE'),
|
||||
('tkinter.scrolledtext',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/tkinter/scrolledtext.py',
|
||||
'PYMODULE'),
|
||||
('tkinter.simpledialog',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/tkinter/simpledialog.py',
|
||||
'PYMODULE'),
|
||||
('tkinter.ttk',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/tkinter/ttk.py',
|
||||
'PYMODULE'),
|
||||
('token',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/token.py',
|
||||
'PYMODULE'),
|
||||
('tokenize',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/tokenize.py',
|
||||
'PYMODULE'),
|
||||
('tracemalloc',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/tracemalloc.py',
|
||||
'PYMODULE'),
|
||||
('typing',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/typing.py',
|
||||
'PYMODULE'),
|
||||
('urllib',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/urllib/__init__.py',
|
||||
'PYMODULE'),
|
||||
('urllib.error',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/urllib/error.py',
|
||||
'PYMODULE'),
|
||||
('urllib.parse',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/urllib/parse.py',
|
||||
'PYMODULE'),
|
||||
('urllib.request',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/urllib/request.py',
|
||||
'PYMODULE'),
|
||||
('urllib.response',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/urllib/response.py',
|
||||
'PYMODULE'),
|
||||
('uuid',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/uuid.py',
|
||||
'PYMODULE'),
|
||||
('xml',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/xml/__init__.py',
|
||||
'PYMODULE'),
|
||||
('xml.etree',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/xml/etree/__init__.py',
|
||||
'PYMODULE'),
|
||||
('xml.etree.ElementInclude',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/xml/etree/ElementInclude.py',
|
||||
'PYMODULE'),
|
||||
('xml.etree.ElementPath',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/xml/etree/ElementPath.py',
|
||||
'PYMODULE'),
|
||||
('xml.etree.ElementTree',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/xml/etree/ElementTree.py',
|
||||
'PYMODULE'),
|
||||
('xml.etree.cElementTree',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/xml/etree/cElementTree.py',
|
||||
'PYMODULE'),
|
||||
('xml.parsers',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/xml/parsers/__init__.py',
|
||||
'PYMODULE'),
|
||||
('xml.parsers.expat',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/xml/parsers/expat.py',
|
||||
'PYMODULE'),
|
||||
('xml.sax',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/xml/sax/__init__.py',
|
||||
'PYMODULE'),
|
||||
('xml.sax._exceptions',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/xml/sax/_exceptions.py',
|
||||
'PYMODULE'),
|
||||
('xml.sax.expatreader',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/xml/sax/expatreader.py',
|
||||
'PYMODULE'),
|
||||
('xml.sax.handler',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/xml/sax/handler.py',
|
||||
'PYMODULE'),
|
||||
('xml.sax.saxutils',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/xml/sax/saxutils.py',
|
||||
'PYMODULE'),
|
||||
('xml.sax.xmlreader',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/xml/sax/xmlreader.py',
|
||||
'PYMODULE'),
|
||||
('zipfile',
|
||||
'/opt/computersetup/.pyenv/versions/3.11.6/lib/python3.11/zipfile.py',
|
||||
'PYMODULE')])
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -0,0 +1,29 @@
|
|||
|
||||
This file lists modules PyInstaller was not able to find. This does not
|
||||
necessarily mean these modules are required for running your program. Both
|
||||
Python's standard library and 3rd-party Python packages often conditionally
|
||||
import optional modules, some of which may be available only on certain
|
||||
platforms.
|
||||
|
||||
Types of import:
|
||||
* top-level: imported at the top-level - look at these first
|
||||
* conditional: imported within an if-statement
|
||||
* delayed: imported within a function
|
||||
* optional: imported within a try-except-statement
|
||||
|
||||
IMPORTANT: Do NOT post this list to the issue-tracker. Use it as a basis for
|
||||
tracking down the missing module yourself. Thanks!
|
||||
|
||||
missing module named _frozen_importlib_external - imported by importlib._bootstrap (delayed), importlib (optional), importlib.abc (optional)
|
||||
excluded module named _frozen_importlib - imported by importlib (optional), importlib.abc (optional)
|
||||
missing module named winreg - imported by importlib._bootstrap_external (conditional), platform (delayed, optional), mimetypes (optional), urllib.request (delayed, conditional, optional)
|
||||
missing module named nt - imported by os (delayed, conditional, optional), ntpath (optional), shutil (conditional), importlib._bootstrap_external (conditional)
|
||||
missing module named org - imported by pickle (optional)
|
||||
missing module named _winapi - imported by encodings (delayed, conditional, optional), ntpath (optional), subprocess (conditional), mimetypes (optional)
|
||||
missing module named 'org.python' - imported by copy (optional), xml.sax (delayed, conditional)
|
||||
missing module named msvcrt - imported by subprocess (optional), getpass (optional)
|
||||
missing module named vms_lib - imported by platform (delayed, optional)
|
||||
missing module named 'java.lang' - imported by platform (delayed, optional), xml.sax._exceptions (conditional)
|
||||
missing module named java - imported by platform (delayed)
|
||||
missing module named _winreg - imported by platform (delayed, optional)
|
||||
missing module named _scproxy - imported by urllib.request (conditional)
|
||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,160 @@
|
|||
#!/bin/bash
|
||||
# ============================================
|
||||
# PointCab Renamer - Linux Build Script
|
||||
# Version 4.2.1
|
||||
# ============================================
|
||||
|
||||
set -e # Bei Fehlern abbrechen
|
||||
|
||||
echo ""
|
||||
echo "==================================="
|
||||
echo " PointCab Renamer - Linux Build"
|
||||
echo " Version 4.2.1"
|
||||
echo "==================================="
|
||||
echo ""
|
||||
|
||||
# Farben für Ausgabe
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Arbeitsverzeichnis
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
cd "$SCRIPT_DIR"
|
||||
|
||||
echo -e "${BLUE}[1/6] Prüfe Voraussetzungen...${NC}"
|
||||
|
||||
# Prüfe ob Python3 installiert ist
|
||||
if ! command -v python3 &> /dev/null; then
|
||||
echo -e "${RED}[FEHLER] Python3 ist nicht installiert.${NC}"
|
||||
echo ""
|
||||
echo "Installation:"
|
||||
echo " Ubuntu/Debian: sudo apt install python3 python3-pip python3-tk"
|
||||
echo " Fedora: sudo dnf install python3 python3-pip python3-tkinter"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
PYTHON_VERSION=$(python3 --version 2>&1)
|
||||
echo -e "${GREEN}✓ Python3 gefunden: $PYTHON_VERSION${NC}"
|
||||
|
||||
# Prüfe ob tkinter installiert ist
|
||||
echo -e "${BLUE}[2/6] Prüfe tkinter...${NC}"
|
||||
if ! python3 -c "import tkinter" 2>/dev/null; then
|
||||
echo -e "${YELLOW}[WARNUNG] tkinter nicht gefunden.${NC}"
|
||||
echo ""
|
||||
echo "Installation von tkinter:"
|
||||
echo " Ubuntu/Debian: sudo apt install python3-tk"
|
||||
echo " Fedora: sudo dnf install python3-tkinter"
|
||||
echo ""
|
||||
|
||||
# Versuche automatische Installation (nur wenn sudo verfügbar)
|
||||
if command -v apt &> /dev/null && [ -w /etc/apt ]; then
|
||||
echo "Versuche automatische Installation..."
|
||||
sudo apt install -y python3-tk || {
|
||||
echo -e "${RED}[FEHLER] Automatische Installation fehlgeschlagen.${NC}"
|
||||
echo "Bitte manuell installieren: sudo apt install python3-tk"
|
||||
exit 1
|
||||
}
|
||||
else
|
||||
echo -e "${RED}[FEHLER] tkinter muss manuell installiert werden.${NC}"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
echo -e "${GREEN}✓ tkinter verfügbar${NC}"
|
||||
|
||||
# Prüfe ob pip installiert ist
|
||||
echo -e "${BLUE}[3/6] Prüfe pip...${NC}"
|
||||
if ! command -v pip3 &> /dev/null && ! python3 -m pip --version &> /dev/null; then
|
||||
echo -e "${YELLOW}[INFO] pip3 nicht gefunden.${NC}"
|
||||
echo ""
|
||||
echo "Installation von pip:"
|
||||
echo " Ubuntu/Debian: sudo apt install python3-pip"
|
||||
echo " Fedora: sudo dnf install python3-pip"
|
||||
echo " Oder: python3 -m ensurepip --upgrade"
|
||||
exit 1
|
||||
fi
|
||||
echo -e "${GREEN}✓ pip verfügbar${NC}"
|
||||
|
||||
# Prüfe ob PyInstaller installiert ist
|
||||
echo -e "${BLUE}[4/6] Prüfe PyInstaller...${NC}"
|
||||
if ! python3 -m PyInstaller --version &> /dev/null 2>&1; then
|
||||
echo -e "${YELLOW}[INFO] PyInstaller nicht gefunden. Installiere...${NC}"
|
||||
python3 -m pip install --user pyinstaller || {
|
||||
echo -e "${RED}[FEHLER] PyInstaller konnte nicht installiert werden.${NC}"
|
||||
echo "Versuche: pip3 install pyinstaller"
|
||||
exit 1
|
||||
}
|
||||
fi
|
||||
PYINSTALLER_VERSION=$(python3 -m PyInstaller --version 2>&1)
|
||||
echo -e "${GREEN}✓ PyInstaller installiert: $PYINSTALLER_VERSION${NC}"
|
||||
|
||||
# Prüfe Projektdateien
|
||||
echo -e "${BLUE}[5/6] Prüfe Projektdateien...${NC}"
|
||||
if [ ! -f "pointcab_renamer.py" ]; then
|
||||
echo -e "${RED}[FEHLER] pointcab_renamer.py nicht gefunden!${NC}"
|
||||
echo "Bitte führen Sie das Skript im Projektverzeichnis aus."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -f "cluster_cleanup.txt" ]; then
|
||||
echo -e "${RED}[FEHLER] cluster_cleanup.txt nicht gefunden!${NC}"
|
||||
exit 1
|
||||
fi
|
||||
echo -e "${GREEN}✓ Projektdateien vorhanden${NC}"
|
||||
|
||||
# Lösche alte Build-Verzeichnisse
|
||||
echo ""
|
||||
echo -e "${BLUE}[6/6] Starte Build-Prozess...${NC}"
|
||||
echo "[INFO] Räume alte Build-Dateien auf..."
|
||||
rm -rf build dist *.spec 2>/dev/null || true
|
||||
|
||||
echo "[INFO] Erstelle Linux-Binary..."
|
||||
echo ""
|
||||
|
||||
# PyInstaller ausführen
|
||||
python3 -m PyInstaller \
|
||||
--onefile \
|
||||
--name "pointcab_renamer" \
|
||||
--add-data "cluster_cleanup.txt:." \
|
||||
pointcab_renamer.py
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo ""
|
||||
echo -e "${RED}[FEHLER] Build fehlgeschlagen!${NC}"
|
||||
echo ""
|
||||
echo "Mögliche Ursachen:"
|
||||
echo " - PyInstaller-Version inkompatibel"
|
||||
echo " - Fehlende Abhängigkeiten"
|
||||
echo ""
|
||||
echo "Versuche: pip3 install --upgrade pyinstaller"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo -e "${GREEN}[INFO] Build erfolgreich!${NC}"
|
||||
echo ""
|
||||
|
||||
# Kopiere notwendige Dateien in dist-Ordner
|
||||
echo "[INFO] Kopiere zusätzliche Dateien..."
|
||||
cp cluster_cleanup.txt dist/
|
||||
[ -f BENUTZERHANDBUCH.md ] && cp BENUTZERHANDBUCH.md dist/
|
||||
|
||||
# Mache das Binary ausführbar
|
||||
chmod +x dist/pointcab_renamer
|
||||
|
||||
# Zeige Ergebnis
|
||||
echo ""
|
||||
echo -e "${GREEN}===================================${NC}"
|
||||
echo -e "${GREEN} BUILD ERFOLGREICH!${NC}"
|
||||
echo -e "${GREEN}===================================${NC}"
|
||||
echo ""
|
||||
echo "Erstellte Dateien:"
|
||||
ls -lh dist/
|
||||
echo ""
|
||||
echo "Verwendung:"
|
||||
echo " cd dist && ./pointcab_renamer"
|
||||
echo ""
|
||||
echo "Für Distribution alle Dateien aus dist/ kopieren."
|
||||
echo ""
|
||||
|
|
@ -0,0 +1,119 @@
|
|||
@echo off
|
||||
REM ============================================
|
||||
REM PointCab Renamer - Windows Build Script v4.2
|
||||
REM ============================================
|
||||
REM Verwendet den Python Launcher (py) für bessere Kompatibilität
|
||||
REM
|
||||
REM Voraussetzungen:
|
||||
REM - Python 3.8+ mit py Launcher installiert
|
||||
REM - PyInstaller (wird bei Bedarf installiert)
|
||||
REM
|
||||
REM Verwendung:
|
||||
REM 1. Öffnen Sie die Eingabeaufforderung (cmd)
|
||||
REM 2. Navigieren Sie zum Projektordner
|
||||
REM 3. Führen Sie: build_windows.bat aus
|
||||
REM ============================================
|
||||
|
||||
setlocal enabledelayedexpansion
|
||||
|
||||
echo.
|
||||
echo ============================================
|
||||
echo PointCab Renamer - Windows Build v4.2
|
||||
echo ============================================
|
||||
echo.
|
||||
|
||||
REM Prüfe Python Installation
|
||||
echo [1/5] Prüfe Python Installation...
|
||||
py --version >nul 2>&1
|
||||
if errorlevel 1 (
|
||||
echo.
|
||||
echo FEHLER: Python wurde nicht gefunden!
|
||||
echo.
|
||||
echo Bitte installieren Sie Python von:
|
||||
echo https://www.python.org/downloads/
|
||||
echo.
|
||||
echo Stellen Sie sicher, dass bei der Installation
|
||||
echo "Add Python to PATH" aktiviert ist.
|
||||
echo.
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
for /f "tokens=2" %%v in ('py --version 2^>^&1') do set PYTHON_VERSION=%%v
|
||||
echo Python %PYTHON_VERSION% gefunden.
|
||||
|
||||
REM Prüfe/Installiere PyInstaller
|
||||
echo.
|
||||
echo [2/5] Prüfe PyInstaller...
|
||||
py -m PyInstaller --version >nul 2>&1
|
||||
if errorlevel 1 (
|
||||
echo PyInstaller nicht gefunden. Installiere...
|
||||
py -m pip install pyinstaller
|
||||
if errorlevel 1 (
|
||||
echo.
|
||||
echo FEHLER: PyInstaller konnte nicht installiert werden!
|
||||
echo Bitte führen Sie manuell aus:
|
||||
echo py -m pip install pyinstaller
|
||||
echo.
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
)
|
||||
for /f "tokens=*" %%v in ('py -m PyInstaller --version 2^>^&1') do set PYINSTALLER_VERSION=%%v
|
||||
echo PyInstaller %PYINSTALLER_VERSION% gefunden.
|
||||
|
||||
REM Bereinige alte Builds
|
||||
echo.
|
||||
echo [3/5] Bereinige alte Build-Dateien...
|
||||
if exist build rmdir /s /q build
|
||||
if exist dist rmdir /s /q dist
|
||||
if exist *.spec del /f /q *.spec
|
||||
echo Alte Dateien entfernt.
|
||||
|
||||
REM Erstelle Executable
|
||||
echo.
|
||||
echo [4/5] Erstelle Windows Executable...
|
||||
echo Dies kann einige Minuten dauern...
|
||||
echo.
|
||||
|
||||
py -m PyInstaller --onefile --windowed --name "PointCab_Renamer" ^
|
||||
--add-data "cluster_cleanup.txt;." ^
|
||||
--add-data "BENUTZERHANDBUCH.md;." ^
|
||||
pointcab_renamer.py
|
||||
|
||||
if errorlevel 1 (
|
||||
echo.
|
||||
echo FEHLER: Build fehlgeschlagen!
|
||||
echo Bitte prüfen Sie die Fehlermeldungen oben.
|
||||
echo.
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
REM Kopiere zusätzliche Dateien
|
||||
echo.
|
||||
echo [5/5] Kopiere zusätzliche Dateien...
|
||||
copy cluster_cleanup.txt dist\ >nul 2>&1
|
||||
copy BENUTZERHANDBUCH.md dist\ >nul 2>&1
|
||||
copy README.md dist\ >nul 2>&1
|
||||
echo Dateien kopiert.
|
||||
|
||||
REM Erfolgsmeldung
|
||||
echo.
|
||||
echo ============================================
|
||||
echo BUILD ERFOLGREICH!
|
||||
echo ============================================
|
||||
echo.
|
||||
echo Die Executable befindet sich in:
|
||||
echo dist\PointCab_Renamer.exe
|
||||
echo.
|
||||
echo Zusätzliche Dateien in dist\:
|
||||
echo - cluster_cleanup.txt
|
||||
echo - BENUTZERHANDBUCH.md
|
||||
echo - README.md
|
||||
echo.
|
||||
echo Hinweis: Die cluster_cleanup.txt muss neben
|
||||
echo der .exe Datei liegen!
|
||||
echo.
|
||||
echo ============================================
|
||||
pause
|
||||
|
|
@ -0,0 +1,278 @@
|
|||
#!/bin/bash
|
||||
# ============================================================================
|
||||
# PointCab Renamer - Windows Build unter Linux (Docker-Methode)
|
||||
# Version: 4.1.2
|
||||
# ============================================================================
|
||||
#
|
||||
# Dieses Skript erstellt eine Windows .exe unter Linux mittels Docker.
|
||||
# Es verwendet das cdrx/pyinstaller-windows Image für zuverlässige Builds.
|
||||
#
|
||||
# VORAUSSETZUNGEN:
|
||||
# - Docker muss installiert sein (wird bei Bedarf mit sudo gestartet)
|
||||
# - Internet-Verbindung für den ersten Docker-Image-Download
|
||||
#
|
||||
# VERWENDUNG:
|
||||
# ./build_windows_on_linux.sh
|
||||
#
|
||||
# TROUBLESHOOTING:
|
||||
# Falls Docker nicht startet, prüfen Sie:
|
||||
# - sudo systemctl start docker
|
||||
# - Benutzer zur docker-Gruppe hinzufügen: sudo usermod -aG docker $USER
|
||||
# - In Container-Umgebungen (z.B. Docker-in-Docker): --privileged Flag nötig
|
||||
#
|
||||
# ============================================================================
|
||||
|
||||
set -e # Bei Fehlern abbrechen
|
||||
|
||||
# Farben für Ausgabe
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Banner
|
||||
echo -e "${BLUE}"
|
||||
echo "============================================================================"
|
||||
echo " PointCab Renamer - Windows Cross-Compilation unter Linux"
|
||||
echo " Version 4.1.2"
|
||||
echo "============================================================================"
|
||||
echo -e "${NC}"
|
||||
|
||||
# Hilfsfunktion: Docker-Befehl mit oder ohne sudo
|
||||
docker_cmd() {
|
||||
if docker "$@" 2>/dev/null; then
|
||||
return 0
|
||||
elif sudo docker "$@" 2>/dev/null; then
|
||||
USE_SUDO=1
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
run_docker() {
|
||||
if [ "$USE_SUDO" = "1" ]; then
|
||||
sudo docker "$@"
|
||||
else
|
||||
docker "$@"
|
||||
fi
|
||||
}
|
||||
|
||||
# [1/7] Prüfe ob Docker installiert ist
|
||||
echo -e "${YELLOW}[1/7] Prüfe Docker-Installation...${NC}"
|
||||
if ! command -v docker &> /dev/null; then
|
||||
echo -e "${RED}FEHLER: Docker ist nicht installiert!${NC}"
|
||||
echo ""
|
||||
echo "Installiere Docker mit:"
|
||||
echo " Ubuntu/Debian:"
|
||||
echo " sudo apt update"
|
||||
echo " sudo apt install docker.io"
|
||||
echo " sudo systemctl start docker"
|
||||
echo " sudo systemctl enable docker"
|
||||
echo " sudo usermod -aG docker \$USER"
|
||||
echo " # Danach neu einloggen oder: newgrp docker"
|
||||
echo ""
|
||||
echo " Fedora/RHEL:"
|
||||
echo " sudo dnf install docker"
|
||||
echo " sudo systemctl start docker"
|
||||
echo ""
|
||||
echo "Alternativ: Verwende ./build_windows_wine.sh (Wine-basiert)"
|
||||
exit 1
|
||||
fi
|
||||
echo -e "${GREEN}✓ Docker ist installiert${NC}"
|
||||
|
||||
# [2/7] Prüfe ob Docker-Daemon läuft, versuche Start mit sudo falls nötig
|
||||
echo -e "${YELLOW}[2/7] Prüfe Docker-Daemon...${NC}"
|
||||
USE_SUDO=0
|
||||
|
||||
if docker info &> /dev/null; then
|
||||
echo -e "${GREEN}✓ Docker-Daemon läuft (ohne sudo)${NC}"
|
||||
elif sudo docker info &> /dev/null; then
|
||||
USE_SUDO=1
|
||||
echo -e "${GREEN}✓ Docker-Daemon läuft (mit sudo)${NC}"
|
||||
else
|
||||
# Versuche Docker zu starten
|
||||
echo -e "${YELLOW}Docker-Daemon läuft nicht. Versuche zu starten...${NC}"
|
||||
|
||||
# Versuche systemd
|
||||
if command -v systemctl &> /dev/null; then
|
||||
sudo systemctl start docker 2>/dev/null && sleep 2
|
||||
fi
|
||||
|
||||
# Prüfe erneut
|
||||
if docker info &> /dev/null; then
|
||||
echo -e "${GREEN}✓ Docker-Daemon erfolgreich gestartet${NC}"
|
||||
elif sudo docker info &> /dev/null; then
|
||||
USE_SUDO=1
|
||||
echo -e "${GREEN}✓ Docker-Daemon erfolgreich gestartet (mit sudo)${NC}"
|
||||
else
|
||||
echo -e "${RED}FEHLER: Docker-Daemon konnte nicht gestartet werden!${NC}"
|
||||
echo ""
|
||||
echo "Mögliche Ursachen und Lösungen:"
|
||||
echo ""
|
||||
echo "1. Docker-Service nicht gestartet:"
|
||||
echo " sudo systemctl start docker"
|
||||
echo ""
|
||||
echo "2. Berechtigungsproblem:"
|
||||
echo " sudo usermod -aG docker \$USER"
|
||||
echo " # Dann neu einloggen"
|
||||
echo ""
|
||||
echo "3. In Container-Umgebung (Docker-in-Docker):"
|
||||
echo " Docker kann nicht in unprivilegierten Containern laufen."
|
||||
echo " Nutze stattdessen: ./build_windows_wine.sh"
|
||||
echo " Oder: Baue auf einem System mit nativem Docker."
|
||||
echo ""
|
||||
echo "4. WSL2 unter Windows:"
|
||||
echo " Starte Docker Desktop und aktiviere WSL2-Integration."
|
||||
echo ""
|
||||
echo "Alternative Build-Methoden:"
|
||||
echo " - ./build_windows_wine.sh (Wine-basiert)"
|
||||
echo " - GitHub Actions (siehe .github/workflows/)"
|
||||
echo " - Natives Windows: build_windows.bat"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# Arbeitsverzeichnis
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
cd "$SCRIPT_DIR"
|
||||
|
||||
# [3/7] Prüfe ob notwendige Dateien existieren
|
||||
echo -e "${YELLOW}[3/7] Prüfe Projektdateien...${NC}"
|
||||
if [ ! -f "pointcab_renamer.py" ]; then
|
||||
echo -e "${RED}FEHLER: pointcab_renamer.py nicht gefunden!${NC}"
|
||||
echo "Stelle sicher, dass du dich im richtigen Verzeichnis befindest."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -f "cluster_cleanup.txt" ]; then
|
||||
echo -e "${RED}FEHLER: cluster_cleanup.txt nicht gefunden!${NC}"
|
||||
exit 1
|
||||
fi
|
||||
echo -e "${GREEN}✓ Alle Projektdateien vorhanden${NC}"
|
||||
|
||||
# [4/7] Aufräumen
|
||||
echo -e "${YELLOW}[4/7] Räume alte Build-Artefakte auf...${NC}"
|
||||
rm -rf build/ dist/ *.spec 2>/dev/null || true
|
||||
mkdir -p dist
|
||||
echo -e "${GREEN}✓ Build-Verzeichnisse bereinigt${NC}"
|
||||
|
||||
# Docker Image
|
||||
DOCKER_IMAGE="cdrx/pyinstaller-windows:python3"
|
||||
|
||||
# [5/7] Prüfe/Lade Docker Image
|
||||
echo -e "${YELLOW}[5/7] Prüfe Docker Image...${NC}"
|
||||
echo " Image: $DOCKER_IMAGE"
|
||||
echo " (Beim ersten Mal wird ~1.5 GB heruntergeladen)"
|
||||
|
||||
if ! run_docker image inspect "$DOCKER_IMAGE" &> /dev/null; then
|
||||
echo ""
|
||||
echo "Lade Docker Image herunter..."
|
||||
run_docker pull "$DOCKER_IMAGE"
|
||||
fi
|
||||
echo -e "${GREEN}✓ Docker Image bereit${NC}"
|
||||
|
||||
# [6/7] Build durchführen
|
||||
echo -e "${YELLOW}[6/7] Erstelle Windows .exe mit PyInstaller...${NC}"
|
||||
echo " Dies kann 2-5 Minuten dauern..."
|
||||
echo ""
|
||||
|
||||
# Erstelle temporäres Build-Skript für Docker-Container
|
||||
BUILD_SCRIPT=$(mktemp)
|
||||
cat > "$BUILD_SCRIPT" << 'DOCKERSCRIPT'
|
||||
#!/bin/bash
|
||||
set -e
|
||||
cd /src
|
||||
|
||||
echo "=== Docker Container gestartet ==="
|
||||
echo "Python-Version: $(python --version)"
|
||||
echo "PyInstaller-Version: $(pip show pyinstaller | grep Version)"
|
||||
echo ""
|
||||
|
||||
# Installiere requirements falls vorhanden
|
||||
if [ -f "requirements.txt" ]; then
|
||||
echo "Installiere requirements..."
|
||||
pip install -r requirements.txt --quiet
|
||||
fi
|
||||
|
||||
echo "Starte PyInstaller Build..."
|
||||
|
||||
# PyInstaller Build
|
||||
pyinstaller --onefile \
|
||||
--windowed \
|
||||
--name "PointCab_Renamer" \
|
||||
--add-data "cluster_cleanup.txt;." \
|
||||
--add-data "BENUTZERHANDBUCH.md;." \
|
||||
--icon="NONE" \
|
||||
--clean \
|
||||
pointcab_renamer.py
|
||||
|
||||
echo ""
|
||||
echo "=== Build im Container abgeschlossen ==="
|
||||
DOCKERSCRIPT
|
||||
|
||||
chmod +x "$BUILD_SCRIPT"
|
||||
|
||||
# Docker Container ausführen
|
||||
if [ "$USE_SUDO" = "1" ]; then
|
||||
sudo docker run --rm \
|
||||
-v "$SCRIPT_DIR":/src \
|
||||
-v "$BUILD_SCRIPT":/docker_build.sh:ro \
|
||||
"$DOCKER_IMAGE" \
|
||||
bash /docker_build.sh
|
||||
else
|
||||
docker run --rm \
|
||||
-v "$SCRIPT_DIR":/src \
|
||||
-v "$BUILD_SCRIPT":/docker_build.sh:ro \
|
||||
"$DOCKER_IMAGE" \
|
||||
bash /docker_build.sh
|
||||
fi
|
||||
|
||||
# Aufräumen
|
||||
rm -f "$BUILD_SCRIPT"
|
||||
|
||||
# [7/7] Prüfe Ergebnis
|
||||
echo ""
|
||||
echo -e "${YELLOW}[7/7] Verifiziere Build-Ergebnis...${NC}"
|
||||
|
||||
if [ -f "dist/PointCab_Renamer.exe" ]; then
|
||||
echo -e "${GREEN}✓ Windows .exe erfolgreich erstellt!${NC}"
|
||||
|
||||
# Kopiere zusätzliche Dateien
|
||||
cp cluster_cleanup.txt dist/
|
||||
[ -f "BENUTZERHANDBUCH.md" ] && cp BENUTZERHANDBUCH.md dist/
|
||||
[ -f "BENUTZERHANDBUCH.pdf" ] && cp BENUTZERHANDBUCH.pdf dist/
|
||||
[ -f "README.md" ] && cp README.md dist/
|
||||
[ -f "LICENSE.txt" ] && cp LICENSE.txt dist/
|
||||
|
||||
# Zeige Ergebnis
|
||||
echo ""
|
||||
echo -e "${BLUE}============================================================================${NC}"
|
||||
echo -e "${GREEN}BUILD ERFOLGREICH!${NC}"
|
||||
echo -e "${BLUE}============================================================================${NC}"
|
||||
echo ""
|
||||
echo "Erstellte Dateien in dist/:"
|
||||
ls -lh dist/
|
||||
echo ""
|
||||
EXE_SIZE=$(du -h "dist/PointCab_Renamer.exe" | cut -f1)
|
||||
echo "Executable-Größe: $EXE_SIZE"
|
||||
echo ""
|
||||
echo "Pfad: $SCRIPT_DIR/dist/"
|
||||
echo ""
|
||||
echo -e "${YELLOW}WICHTIG:${NC}"
|
||||
echo " 1. Teste die .exe auf einem echten Windows-System!"
|
||||
echo " 2. Stelle sicher, dass cluster_cleanup.txt im gleichen"
|
||||
echo " Ordner wie die .exe liegt."
|
||||
echo ""
|
||||
else
|
||||
echo -e "${RED}FEHLER: Build fehlgeschlagen!${NC}"
|
||||
echo ""
|
||||
echo "Die Datei dist/PointCab_Renamer.exe wurde nicht erstellt."
|
||||
echo ""
|
||||
echo "Prüfe die Fehlermeldungen oben und versuche:"
|
||||
echo " 1. ./build_windows_wine.sh (Wine-Alternative)"
|
||||
echo " 2. Build auf nativem Windows mit build_windows.bat"
|
||||
echo ""
|
||||
exit 1
|
||||
fi
|
||||
|
|
@ -0,0 +1,274 @@
|
|||
#!/bin/bash
|
||||
# ============================================================================
|
||||
# PointCab Renamer - Windows Build unter Linux (Wine-Methode)
|
||||
# Version: 4.2.1
|
||||
# ============================================================================
|
||||
#
|
||||
# WICHTIG: Wine-basierte Builds sind EXPERIMENTELL und können fehlschlagen!
|
||||
#
|
||||
# BEKANNTE EINSCHRÄNKUNGEN:
|
||||
# - Headless Server (ohne GUI): Python-Installation kann fehlschlagen
|
||||
# - Manche Wine-Versionen haben Kompatibilitätsprobleme
|
||||
# - GUI-basierte Python-Installer benötigen X11/Display
|
||||
#
|
||||
# EMPFOHLENE ALTERNATIVEN:
|
||||
# 1. Windows-PC: build_windows.bat direkt ausführen
|
||||
# 2. GitHub Actions: CI/CD für automatisierte Builds
|
||||
# 3. Dual-Boot/VM: Windows-Build in echter Windows-Umgebung
|
||||
#
|
||||
# ============================================================================
|
||||
|
||||
# Farben für Ausgabe
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Konfiguration
|
||||
PYTHON_VERSION="3.10.11"
|
||||
PYTHON_INSTALLER="python-${PYTHON_VERSION}-amd64.exe"
|
||||
PYTHON_URL="https://www.python.org/ftp/python/${PYTHON_VERSION}/${PYTHON_INSTALLER}"
|
||||
WINE_PREFIX="$HOME/.wine_python"
|
||||
|
||||
# Banner
|
||||
echo -e "${BLUE}"
|
||||
echo "============================================================================"
|
||||
echo " PointCab Renamer - Windows Cross-Compilation (Wine-Methode)"
|
||||
echo " Version 4.2.1 - EXPERIMENTELL"
|
||||
echo "============================================================================"
|
||||
echo -e "${NC}"
|
||||
|
||||
echo -e "${YELLOW}╔════════════════════════════════════════════════════════════════════╗${NC}"
|
||||
echo -e "${YELLOW}║ WARNUNG: Diese Methode ist EXPERIMENTELL und kann fehlschlagen! ║${NC}"
|
||||
echo -e "${YELLOW}╚════════════════════════════════════════════════════════════════════╝${NC}"
|
||||
echo ""
|
||||
echo "Bekannte Probleme:"
|
||||
echo " • Headless Server ohne X11: Python-Installer kann hängen"
|
||||
echo " • Wine-Kompatibilität variiert je nach Version"
|
||||
echo " • ~500MB Download und 10+ Minuten Installationszeit"
|
||||
echo ""
|
||||
echo "Empfohlene Alternativen:"
|
||||
echo " 1. Windows-PC: build_windows.bat ausführen"
|
||||
echo " 2. GitHub Actions: Automatisierte CI/CD Builds"
|
||||
echo ""
|
||||
read -p "Trotzdem fortfahren? (j/N): " -n 1 -r
|
||||
echo
|
||||
if [[ ! $REPLY =~ ^[Jj]$ ]]; then
|
||||
echo ""
|
||||
echo "Abgebrochen. Alternative Methoden:"
|
||||
echo " • Kopiere das Projekt auf einen Windows-PC"
|
||||
echo " • Führe dort build_windows.bat aus"
|
||||
exit 0
|
||||
fi
|
||||
echo ""
|
||||
|
||||
# Arbeitsverzeichnis
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
cd "$SCRIPT_DIR"
|
||||
|
||||
# Funktion für Fehlerbehandlung
|
||||
fail_with_alternatives() {
|
||||
echo ""
|
||||
echo -e "${RED}╔════════════════════════════════════════════════════════════════════╗${NC}"
|
||||
echo -e "${RED}║ BUILD FEHLGESCHLAGEN ║${NC}"
|
||||
echo -e "${RED}╚════════════════════════════════════════════════════════════════════╝${NC}"
|
||||
echo ""
|
||||
echo -e "${YELLOW}Alternative Methoden:${NC}"
|
||||
echo ""
|
||||
echo " 1. ${GREEN}Windows-PC (EMPFOHLEN):${NC}"
|
||||
echo " - Kopiere das gesamte Projektverzeichnis"
|
||||
echo " - Führe build_windows.bat aus"
|
||||
echo ""
|
||||
echo " 2. ${GREEN}GitHub Actions:${NC}"
|
||||
echo " - Push zu GitHub mit Actions Workflow"
|
||||
echo " - Automatisierter Windows-Build"
|
||||
echo ""
|
||||
echo " 3. ${GREEN}Virtual Machine:${NC}"
|
||||
echo " - Windows-VM mit VirtualBox/VMware"
|
||||
echo " - Shared Folder für Projektdateien"
|
||||
echo ""
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Prüfe Wine
|
||||
echo -e "${BLUE}[1/7] Prüfe Wine-Installation...${NC}"
|
||||
if ! command -v wine &> /dev/null; then
|
||||
echo -e "${RED}FEHLER: Wine ist nicht installiert!${NC}"
|
||||
echo ""
|
||||
echo "Installation auf Ubuntu/Debian:"
|
||||
echo " sudo dpkg --add-architecture i386"
|
||||
echo " sudo apt update"
|
||||
echo " sudo apt install wine64 wine32"
|
||||
echo ""
|
||||
echo "Installation auf Fedora:"
|
||||
echo " sudo dnf install wine"
|
||||
echo ""
|
||||
fail_with_alternatives
|
||||
fi
|
||||
|
||||
WINE_VERSION=$(wine --version 2>/dev/null || echo "unknown")
|
||||
echo -e "${GREEN}✓ Wine installiert: $WINE_VERSION${NC}"
|
||||
|
||||
# Prüfe auf Display (wichtig für GUI-Installer)
|
||||
echo -e "${BLUE}[2/7] Prüfe Display-Umgebung...${NC}"
|
||||
if [ -z "$DISPLAY" ]; then
|
||||
echo -e "${YELLOW}⚠ Kein DISPLAY gesetzt - Headless-Modus erkannt${NC}"
|
||||
echo ""
|
||||
echo "Python-Installer benötigt möglicherweise X11/GUI."
|
||||
echo "Dies kann in Headless-Umgebungen fehlschlagen."
|
||||
echo ""
|
||||
echo "Optionen:"
|
||||
echo " • Virtuelles Display mit Xvfb (experimentell)"
|
||||
echo " • X11 Forwarding bei SSH (-X Option)"
|
||||
echo " • Desktop-Umgebung verwenden"
|
||||
echo ""
|
||||
|
||||
# Versuche Xvfb falls verfügbar
|
||||
if command -v Xvfb &> /dev/null; then
|
||||
echo "Xvfb gefunden - starte virtuelles Display..."
|
||||
Xvfb :99 -screen 0 1024x768x24 &
|
||||
XVFB_PID=$!
|
||||
export DISPLAY=:99
|
||||
sleep 2
|
||||
echo -e "${GREEN}✓ Virtuelles Display gestartet (:99)${NC}"
|
||||
else
|
||||
echo -e "${YELLOW}Xvfb nicht installiert. Versuche ohne Display...${NC}"
|
||||
echo " Installation: sudo apt install xvfb"
|
||||
fi
|
||||
else
|
||||
echo -e "${GREEN}✓ Display vorhanden: $DISPLAY${NC}"
|
||||
fi
|
||||
|
||||
# Prüfe Projektdateien
|
||||
echo -e "${BLUE}[3/7] Prüfe Projektdateien...${NC}"
|
||||
if [ ! -f "pointcab_renamer.py" ]; then
|
||||
echo -e "${RED}FEHLER: pointcab_renamer.py nicht gefunden!${NC}"
|
||||
exit 1
|
||||
fi
|
||||
if [ ! -f "cluster_cleanup.txt" ]; then
|
||||
echo -e "${RED}FEHLER: cluster_cleanup.txt nicht gefunden!${NC}"
|
||||
exit 1
|
||||
fi
|
||||
echo -e "${GREEN}✓ Projektdateien vorhanden${NC}"
|
||||
|
||||
# Wine-Prefix initialisieren
|
||||
echo -e "${BLUE}[4/7] Initialisiere Wine-Umgebung...${NC}"
|
||||
export WINEPREFIX="$WINE_PREFIX"
|
||||
export WINEARCH=win64
|
||||
export WINEDEBUG=-all # Unterdrücke Wine Debug-Meldungen
|
||||
|
||||
if [ ! -d "$WINE_PREFIX" ]; then
|
||||
echo "Erstelle Wine-Prefix unter: $WINE_PREFIX"
|
||||
echo "Dies kann einige Minuten dauern..."
|
||||
wineboot --init 2>/dev/null || true
|
||||
sleep 5
|
||||
fi
|
||||
echo -e "${GREEN}✓ Wine-Umgebung bereit${NC}"
|
||||
|
||||
# Python-Pfade in Wine
|
||||
WINE_PYTHON="$WINE_PREFIX/drive_c/Python310/python.exe"
|
||||
WINE_PIP="$WINE_PREFIX/drive_c/Python310/Scripts/pip.exe"
|
||||
WINE_PYINSTALLER="$WINE_PREFIX/drive_c/Python310/Scripts/pyinstaller.exe"
|
||||
|
||||
# Python installieren falls nicht vorhanden
|
||||
echo -e "${BLUE}[5/7] Prüfe Windows-Python...${NC}"
|
||||
if [ ! -f "$WINE_PYTHON" ]; then
|
||||
echo "Windows-Python nicht gefunden, installiere..."
|
||||
echo ""
|
||||
|
||||
# Download Python installer
|
||||
if [ ! -f "/tmp/$PYTHON_INSTALLER" ]; then
|
||||
echo "Lade Python herunter: $PYTHON_URL"
|
||||
echo "Größe: ~28MB"
|
||||
wget -q --show-progress -O "/tmp/$PYTHON_INSTALLER" "$PYTHON_URL" || {
|
||||
echo -e "${RED}FEHLER: Python-Download fehlgeschlagen!${NC}"
|
||||
fail_with_alternatives
|
||||
}
|
||||
fi
|
||||
|
||||
# Installiere Python
|
||||
echo ""
|
||||
echo "Installiere Python in Wine..."
|
||||
echo "Dies kann 5-10 Minuten dauern..."
|
||||
echo ""
|
||||
|
||||
# Silent Installation mit Timeout
|
||||
timeout 300 wine "/tmp/$PYTHON_INSTALLER" /quiet InstallAllUsers=0 PrependPath=1 Include_test=0 2>/dev/null || {
|
||||
echo -e "${YELLOW}⚠ Python-Installation möglicherweise fehlgeschlagen oder Timeout${NC}"
|
||||
}
|
||||
|
||||
sleep 5
|
||||
|
||||
# Prüfe Installation
|
||||
if [ ! -f "$WINE_PYTHON" ]; then
|
||||
echo ""
|
||||
echo -e "${RED}FEHLER: Python-Installation fehlgeschlagen!${NC}"
|
||||
echo ""
|
||||
echo "Mögliche Ursachen:"
|
||||
echo " • Headless-Umgebung ohne GUI"
|
||||
echo " • Wine-Kompatibilitätsproblem"
|
||||
echo " • Nicht genug Speicherplatz"
|
||||
echo ""
|
||||
|
||||
# Cleanup Xvfb falls gestartet
|
||||
[ -n "$XVFB_PID" ] && kill $XVFB_PID 2>/dev/null
|
||||
|
||||
fail_with_alternatives
|
||||
fi
|
||||
fi
|
||||
echo -e "${GREEN}✓ Windows-Python installiert${NC}"
|
||||
|
||||
# PyInstaller installieren
|
||||
echo -e "${BLUE}[6/7] Prüfe PyInstaller...${NC}"
|
||||
if [ ! -f "$WINE_PYINSTALLER" ]; then
|
||||
echo "Installiere PyInstaller..."
|
||||
wine "$WINE_PIP" install pyinstaller 2>/dev/null || {
|
||||
echo -e "${RED}FEHLER: PyInstaller-Installation fehlgeschlagen!${NC}"
|
||||
fail_with_alternatives
|
||||
}
|
||||
fi
|
||||
echo -e "${GREEN}✓ PyInstaller installiert${NC}"
|
||||
|
||||
# Aufräumen
|
||||
echo -e "${BLUE}[7/7] Erstelle Windows .exe...${NC}"
|
||||
rm -rf build/ dist/ *.spec 2>/dev/null || true
|
||||
|
||||
echo "Build läuft... (kann einige Minuten dauern)"
|
||||
echo ""
|
||||
|
||||
# Führe PyInstaller aus
|
||||
wine "$WINE_PYINSTALLER" \
|
||||
--onefile \
|
||||
--windowed \
|
||||
--name "PointCab_Renamer" \
|
||||
--add-data "cluster_cleanup.txt;." \
|
||||
pointcab_renamer.py 2>&1 | grep -v "^fixme:" | grep -v "^err:" || true
|
||||
|
||||
# Cleanup Xvfb falls gestartet
|
||||
[ -n "$XVFB_PID" ] && kill $XVFB_PID 2>/dev/null
|
||||
|
||||
# Prüfe Ergebnis
|
||||
echo ""
|
||||
if [ -f "dist/PointCab_Renamer.exe" ]; then
|
||||
echo -e "${GREEN}╔════════════════════════════════════════════════════════════════════╗${NC}"
|
||||
echo -e "${GREEN}║ BUILD ERFOLGREICH! ║${NC}"
|
||||
echo -e "${GREEN}╚════════════════════════════════════════════════════════════════════╝${NC}"
|
||||
|
||||
# Kopiere zusätzliche Dateien
|
||||
cp cluster_cleanup.txt dist/
|
||||
cp BENUTZERHANDBUCH.md dist/ 2>/dev/null || true
|
||||
|
||||
echo ""
|
||||
echo "Erstellte Dateien:"
|
||||
ls -lh dist/
|
||||
echo ""
|
||||
echo "Die .exe befindet sich in: $SCRIPT_DIR/dist/"
|
||||
echo ""
|
||||
echo -e "${YELLOW}WICHTIG:${NC}"
|
||||
echo " Die .exe sollte auf einem echten Windows-System"
|
||||
echo " getestet werden, bevor sie verteilt wird!"
|
||||
echo ""
|
||||
else
|
||||
fail_with_alternatives
|
||||
fi
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
# Konfigurationsdatei für Clustername-Bereinigung
|
||||
# Jede Zeile enthält einen String, der aus dem Stammverzeichnisnamen entfernt wird
|
||||
# Leerzeilen und Zeilen die mit # beginnen werden ignoriert
|
||||
#
|
||||
# Beispiel: Stammverzeichnis "Am_Upstall_4_re" wird zu Clustername "Am_Upstall_4"
|
||||
#
|
||||
_re
|
||||
_li
|
||||
_mi
|
||||
_mi-li
|
||||
_mi-re
|
||||
_part_1
|
||||
_part_2
|
||||
_part_3
|
||||
_part_4
|
||||
_part_5
|
||||
|
|
@ -0,0 +1,385 @@
|
|||
# PointCab Renamer - Benutzerhandbuch
|
||||
|
||||
**Version 4.1** | Datum: 14. Januar 2026
|
||||
|
||||
---
|
||||
|
||||
## Inhaltsverzeichnis
|
||||
|
||||
1. [Einführung](#einführung)
|
||||
2. [Installation](#installation)
|
||||
3. [Programmstart](#programmstart)
|
||||
4. [Die drei Modi](#die-drei-modi)
|
||||
- [Einzelprojekt-Modus](#einzelprojekt-modus)
|
||||
- [Batch-Modus](#batch-modus)
|
||||
- [Projekt-Merger](#projekt-merger)
|
||||
5. [Konfiguration](#konfiguration)
|
||||
6. [Troubleshooting](#troubleshooting)
|
||||
7. [FAQ](#faq)
|
||||
|
||||
---
|
||||
|
||||
## Einführung
|
||||
|
||||
### Was ist der PointCab Renamer?
|
||||
|
||||
Der **PointCab Renamer** ist ein Werkzeug zur automatischen Umbenennung von PointCab-Projektdateien. Es löst das Problem, dass PointCab-Scandateien oft kryptische Namen haben (z.B. `1.lsd`, `2.lsd`) und benennt diese nach einem einheitlichen Schema um:
|
||||
|
||||
**Format:** `[ClusterName]_[ScanName].[Erweiterung]`
|
||||
|
||||
**Beispiel:** `EG_Flur_scan001.lsd`
|
||||
|
||||
### Hauptfunktionen
|
||||
|
||||
- **Einzelprojekt-Modus**: Ein einzelnes PointCab-Projekt umbenennen
|
||||
- **Batch-Modus**: Mehrere Projekte gleichzeitig verarbeiten
|
||||
- **Projekt-Merger**: Mehrere Projekte in ein Zielprojekt zusammenführen
|
||||
- **Cluster-Bereinigung**: Automatische Entfernung von Suffixen wie `_re`, `_li` aus Clusternamen
|
||||
- **Detailliertes Logging**: Vollständige Protokollierung aller Änderungen
|
||||
|
||||
---
|
||||
|
||||
## Installation
|
||||
|
||||
### Windows
|
||||
|
||||
1. Laden Sie die Datei `pointcab_renamer.exe` herunter
|
||||
2. Speichern Sie die Datei in einem beliebigen Ordner (z.B. `C:\Tools\`)
|
||||
3. Kopieren Sie die `cluster_cleanup.txt` in denselben Ordner
|
||||
4. Starten Sie das Programm mit Doppelklick auf die `.exe`
|
||||
|
||||
### Ubuntu/Linux
|
||||
|
||||
1. Laden Sie die Datei `pointcab_renamer` herunter
|
||||
2. Speichern Sie die Datei in einem beliebigen Ordner (z.B. `/home/benutzer/tools/`)
|
||||
3. Kopieren Sie die `cluster_cleanup.txt` in denselben Ordner
|
||||
4. Machen Sie die Datei ausführbar:
|
||||
```bash
|
||||
chmod +x pointcab_renamer
|
||||
```
|
||||
5. Starten Sie das Programm:
|
||||
```bash
|
||||
./pointcab_renamer
|
||||
```
|
||||
|
||||
### Aus dem Quellcode (für Entwickler)
|
||||
|
||||
1. Stellen Sie sicher, dass Python 3.8+ installiert ist
|
||||
2. Laden Sie den Quellcode herunter
|
||||
3. Starten Sie mit:
|
||||
```bash
|
||||
python pointcab_renamer.py
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Programmstart
|
||||
|
||||
### Hauptmenü
|
||||
|
||||
Nach dem Start erscheint das Hauptmenü mit drei Optionen:
|
||||
|
||||
```
|
||||
╔═══════════════════════════════════════════╗
|
||||
║ PointCab Renamer v4.1 ║
|
||||
╠═══════════════════════════════════════════╣
|
||||
║ ║
|
||||
║ [Einzelprojekt umbenennen] ║
|
||||
║ ║
|
||||
║ [Batch-Verarbeitung] ║
|
||||
║ ║
|
||||
║ [Projekt Merger] ║
|
||||
║ ║
|
||||
╚═══════════════════════════════════════════╝
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Die drei Modi
|
||||
|
||||
### Einzelprojekt-Modus
|
||||
|
||||
**Verwendung:** Wenn Sie ein einzelnes PointCab-Projekt umbenennen möchten.
|
||||
|
||||
#### Schritt-für-Schritt-Anleitung
|
||||
|
||||
1. Klicken Sie auf **"Einzelprojekt umbenennen"**
|
||||
2. Wählen Sie die **LSDX-Projektdatei** aus (z.B. `Am_Upstall_4.lsdx`)
|
||||
3. Wählen Sie den **PointCloud-Ordner** aus (enthält die `.lsd` Dateien)
|
||||
4. Das Programm zeigt eine **Vorschau** der Änderungen:
|
||||
```
|
||||
Vorschau der Umbenennung:
|
||||
─────────────────────────
|
||||
1.lsd → EG_Flur_scan001.lsd
|
||||
2.lsd → EG_Flur_scan002.lsd
|
||||
3.lsd → OG_Bad_scan001.lsd
|
||||
...
|
||||
```
|
||||
5. Klicken Sie auf **"Umbenennen starten"**
|
||||
6. Nach Abschluss wird ein Protokoll angezeigt
|
||||
|
||||
#### Dateistruktur (Vorher → Nachher)
|
||||
|
||||
**Vorher:**
|
||||
```
|
||||
Am_Upstall_4_PointCloud/
|
||||
├── 1.lsd
|
||||
├── 2.lsd
|
||||
├── 3.lsd
|
||||
└── ...
|
||||
```
|
||||
|
||||
**Nachher:**
|
||||
```
|
||||
Am_Upstall_4_PointCloud/
|
||||
├── EG_Flur_scan001.lsd
|
||||
├── EG_Flur_scan002.lsd
|
||||
├── OG_Bad_scan001.lsd
|
||||
└── ...
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Batch-Modus
|
||||
|
||||
**Verwendung:** Wenn Sie mehrere PointCab-Projekte auf einmal verarbeiten möchten.
|
||||
|
||||
#### Schritt-für-Schritt-Anleitung
|
||||
|
||||
1. Klicken Sie auf **"Batch-Verarbeitung"**
|
||||
2. Wählen Sie den **Basisordner** aus, der alle Projekte enthält
|
||||
3. Das Programm erkennt automatisch alle PointCab-Projekte:
|
||||
```
|
||||
Gefundene Projekte:
|
||||
─────────────────────
|
||||
☑ Projekt_A (15 Scans)
|
||||
☑ Projekt_B (22 Scans)
|
||||
☑ Projekt_C (8 Scans)
|
||||
```
|
||||
4. Wählen Sie die gewünschten Projekte aus (oder behalten Sie alle ausgewählt)
|
||||
5. Klicken Sie auf **"Batch-Verarbeitung starten"**
|
||||
6. Der Fortschritt wird angezeigt:
|
||||
```
|
||||
Verarbeite Projekt 1/3: Projekt_A
|
||||
[████████████░░░░░░░░] 60%
|
||||
```
|
||||
7. Nach Abschluss wird eine Zusammenfassung angezeigt
|
||||
|
||||
#### Erwartete Ordnerstruktur
|
||||
|
||||
```
|
||||
Basisordner/
|
||||
├── Projekt_A/
|
||||
│ ├── Projekt_A.lsdx
|
||||
│ └── Projekt_A_PointCloud/
|
||||
│ ├── 1.lsd
|
||||
│ └── ...
|
||||
├── Projekt_B/
|
||||
│ ├── Projekt_B.lsdx
|
||||
│ └── Projekt_B_PointCloud/
|
||||
└── Projekt_C/
|
||||
├── Projekt_C.lsdx
|
||||
└── Projekt_C_PointCloud/
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Projekt-Merger
|
||||
|
||||
**Verwendung:** Wenn Sie mehrere PointCab-Projekte in ein einziges Projekt zusammenführen möchten.
|
||||
|
||||
#### Schritt-für-Schritt-Anleitung
|
||||
|
||||
1. Klicken Sie auf **"Projekt Merger"**
|
||||
2. Wählen Sie den **Modus**:
|
||||
- **Einzelprojekt zusammenführen**: Ein Quellprojekt → Zielprojekt
|
||||
- **Batch-Merge**: Mehrere Quellprojekte → Zielprojekt
|
||||
3. Wählen Sie das **Zielprojekt** (in das zusammengeführt wird)
|
||||
4. Wählen Sie das/die **Quellprojekt(e)**
|
||||
5. Das Programm zeigt eine **Vorschau** mit Konfliktauflösung:
|
||||
```
|
||||
Merge-Vorschau:
|
||||
─────────────────────
|
||||
Zielprojekt: Haupt_Projekt (5 Cluster, 25 Scans)
|
||||
Quellprojekt: Teil_A (2 Cluster, 10 Scans)
|
||||
|
||||
Zu übertragende Dateien:
|
||||
- EG_Flur_scan001.lsd
|
||||
- EG_Flur_scan002.lsd (Konflikt → EG_Flur_scan002_merged_1.lsd)
|
||||
- ...
|
||||
```
|
||||
6. Klicken Sie auf **"Merge starten"**
|
||||
7. Nach Abschluss werden die Statistiken angezeigt:
|
||||
```
|
||||
Merge abgeschlossen!
|
||||
─────────────────────
|
||||
Cluster vorher: 5 → nachher: 7
|
||||
Scans vorher: 25 → nachher: 35
|
||||
Dateien kopiert: 10
|
||||
Konflikte gelöst: 1
|
||||
```
|
||||
|
||||
#### Konfliktauflösung
|
||||
|
||||
Wenn eine Datei im Zielprojekt bereits existiert:
|
||||
- Die neue Datei wird umbenannt: `dateiname_merged_1.lsd`
|
||||
- Bei weiteren Konflikten: `dateiname_merged_2.lsd`, etc.
|
||||
- Die LSDX-Datei wird entsprechend aktualisiert
|
||||
|
||||
#### Wichtige Hinweise
|
||||
|
||||
- **Backup**: Das Zielprojekt wird vor dem Merge gesichert (`.lsdx.backup`)
|
||||
- **UUID-Regenerierung**: Alle übertragenen Elemente erhalten neue eindeutige IDs
|
||||
- **Cluster-Duplikate**: Gleichnamige Cluster werden zusammengeführt
|
||||
|
||||
---
|
||||
|
||||
## Konfiguration
|
||||
|
||||
### Die Datei cluster_cleanup.txt
|
||||
|
||||
Diese Konfigurationsdatei definiert, welche Suffixe aus Clusternamen entfernt werden sollen.
|
||||
|
||||
#### Speicherort
|
||||
|
||||
- **Windows**: Im selben Ordner wie `pointcab_renamer.exe`
|
||||
- **Linux**: Im selben Ordner wie `pointcab_renamer`
|
||||
|
||||
#### Format
|
||||
|
||||
```
|
||||
# Dies ist ein Kommentar
|
||||
_re
|
||||
_li
|
||||
_mi
|
||||
_mi-li
|
||||
_mi-re
|
||||
```
|
||||
|
||||
- Jede Zeile = ein zu entfernender String
|
||||
- Zeilen mit `#` am Anfang sind Kommentare
|
||||
- Leere Zeilen werden ignoriert
|
||||
|
||||
#### Beispiel
|
||||
|
||||
Mit der obigen Konfiguration:
|
||||
- `Flur_re` → `Flur`
|
||||
- `Bad_mi-li` → `Bad`
|
||||
- `Küche_li` → `Küche`
|
||||
|
||||
#### Konfiguration neu laden
|
||||
|
||||
Änderungen an `cluster_cleanup.txt` werden nach einem Neustart oder über den Button **"Konfiguration neu laden"** übernommen.
|
||||
|
||||
---
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Häufige Fehler und Lösungen
|
||||
|
||||
#### "LSDX-Datei nicht gefunden"
|
||||
|
||||
**Problem**: Das Programm kann die Projektdatei nicht finden.
|
||||
|
||||
**Lösung**:
|
||||
- Stellen Sie sicher, dass die `.lsdx`-Datei im Projektordner existiert
|
||||
- Prüfen Sie, ob Sie Leserechte für die Datei haben
|
||||
- Der Dateiname sollte mit `.lsdx` enden (nicht `.LSDX`)
|
||||
|
||||
#### "PointCloud-Ordner nicht gefunden"
|
||||
|
||||
**Problem**: Der Ordner mit den Scandaten fehlt.
|
||||
|
||||
**Lösung**:
|
||||
- Der Ordner muss `_PointCloud` im Namen haben
|
||||
- Beispiel: `Projekt_A_PointCloud`
|
||||
- Prüfen Sie die Ordnerstruktur
|
||||
|
||||
#### "Keine Projekte gefunden" (Batch-Modus)
|
||||
|
||||
**Problem**: Im Basisordner werden keine Projekte erkannt.
|
||||
|
||||
**Lösung**:
|
||||
- Jedes Projekt muss eine `.lsdx`-Datei und einen `_PointCloud`-Ordner haben
|
||||
- Der Projektname in der LSDX muss mit dem Ordnernamen übereinstimmen
|
||||
|
||||
#### "Zugriff verweigert"
|
||||
|
||||
**Problem**: Dateien können nicht umbenannt werden.
|
||||
|
||||
**Lösung**:
|
||||
- Schließen Sie PointCab
|
||||
- Prüfen Sie, ob andere Programme die Dateien verwenden
|
||||
- Unter Windows: Als Administrator ausführen
|
||||
- Unter Linux: Prüfen Sie die Dateiberechtigungen
|
||||
|
||||
#### "GUI startet nicht" (Linux)
|
||||
|
||||
**Problem**: Keine grafische Oberfläche unter Linux.
|
||||
|
||||
**Lösung**:
|
||||
- Installieren Sie tkinter: `sudo apt install python3-tk`
|
||||
- Stellen Sie sicher, dass ein Display verfügbar ist
|
||||
|
||||
---
|
||||
|
||||
## FAQ
|
||||
|
||||
### Allgemeine Fragen
|
||||
|
||||
**F: Werden die Originaldateien gelöscht?**
|
||||
|
||||
A: Nein, die Dateien werden nur umbenannt. Es werden keine Daten gelöscht.
|
||||
|
||||
**F: Kann ich die Umbenennung rückgängig machen?**
|
||||
|
||||
A: Die ursprünglichen Namen werden im Log-Datei protokolliert. Eine automatische Rückgängig-Funktion gibt es nicht.
|
||||
|
||||
**F: Funktioniert das Tool auch mit älteren PointCab-Versionen?**
|
||||
|
||||
A: Das Tool wurde für PointCab-Projekte mit LSDX-Format entwickelt. Ältere Formate werden möglicherweise nicht unterstützt.
|
||||
|
||||
**F: Wie viele Projekte kann ich im Batch-Modus verarbeiten?**
|
||||
|
||||
A: Es gibt keine feste Grenze. Die Verarbeitungszeit hängt von der Anzahl der Scans ab.
|
||||
|
||||
### Technische Fragen
|
||||
|
||||
**F: Wo werden die Log-Dateien gespeichert?**
|
||||
|
||||
A: Im Projektordner, mit dem Format:
|
||||
- Einzelprojekt: `rename_YYYYMMDD_HHMMSS.log`
|
||||
- Batch: `batch_YYYYMMDD_HHMMSS.log`
|
||||
- Merger: `merge_YYYYMMDD_HHMMSS.log`
|
||||
|
||||
**F: Was passiert bei einem Stromausfall während der Verarbeitung?**
|
||||
|
||||
A: Die bereits umbenannten Dateien bleiben umbenannt. Die LSDX-Datei wird erst nach erfolgreicher Umbenennung aktualisiert.
|
||||
|
||||
**F: Kann ich das Tool über die Kommandozeile nutzen?**
|
||||
|
||||
A: Aktuell nur mit grafischer Oberfläche. Kommandozeilen-Unterstützung ist für eine zukünftige Version geplant.
|
||||
|
||||
### Merger-Fragen
|
||||
|
||||
**F: Was passiert mit den Originalprojekten beim Merge?**
|
||||
|
||||
A: Die Quellprojekte werden nicht verändert. Dateien werden kopiert, nicht verschoben.
|
||||
|
||||
**F: Kann ich den Merge rückgängig machen?**
|
||||
|
||||
A: Die ursprüngliche LSDX wird als `.backup` gespeichert. Die kopierten Dateien müssen manuell gelöscht werden.
|
||||
|
||||
**F: Werden alle Unterordner (Previews, etc.) auch gemergt?**
|
||||
|
||||
A: Ja, alle relevanten Unterordner werden übertragen.
|
||||
|
||||
---
|
||||
|
||||
## Support
|
||||
|
||||
Bei Fragen oder Problemen wenden Sie sich an Ihren Administrator.
|
||||
|
||||
---
|
||||
|
||||
*PointCab Renamer v4.1 - © 2026*
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
# Konfigurationsdatei für Clustername-Bereinigung
|
||||
# Jede Zeile enthält einen String, der aus dem Stammverzeichnisnamen entfernt wird
|
||||
# Leerzeilen und Zeilen die mit # beginnen werden ignoriert
|
||||
#
|
||||
# Beispiel: Stammverzeichnis "Am_Upstall_4_re" wird zu Clustername "Am_Upstall_4"
|
||||
#
|
||||
_re
|
||||
_li
|
||||
_mi
|
||||
_mi-li
|
||||
_mi-re
|
||||
_part_1
|
||||
_part_2
|
||||
_part_3
|
||||
_part_4
|
||||
_part_5
|
||||
Binary file not shown.
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,38 @@
|
|||
# -*- mode: python ; coding: utf-8 -*-
|
||||
|
||||
|
||||
a = Analysis(
|
||||
['pointcab_renamer.py'],
|
||||
pathex=[],
|
||||
binaries=[],
|
||||
datas=[('cluster_cleanup.txt', '.')],
|
||||
hiddenimports=[],
|
||||
hookspath=[],
|
||||
hooksconfig={},
|
||||
runtime_hooks=[],
|
||||
excludes=[],
|
||||
noarchive=False,
|
||||
optimize=0,
|
||||
)
|
||||
pyz = PYZ(a.pure)
|
||||
|
||||
exe = EXE(
|
||||
pyz,
|
||||
a.scripts,
|
||||
a.binaries,
|
||||
a.datas,
|
||||
[],
|
||||
name='pointcab_renamer',
|
||||
debug=False,
|
||||
bootloader_ignore_signals=False,
|
||||
strip=False,
|
||||
upx=True,
|
||||
upx_exclude=[],
|
||||
runtime_tmpdir=None,
|
||||
console=True,
|
||||
disable_windowed_traceback=False,
|
||||
argv_emulation=False,
|
||||
target_arch=None,
|
||||
codesign_identity=None,
|
||||
entitlements_file=None,
|
||||
)
|
||||
Binary file not shown.
|
|
@ -0,0 +1,385 @@
|
|||
# PointCab Renamer - Benutzerhandbuch
|
||||
|
||||
**Version 4.1** | Datum: 14. Januar 2026
|
||||
|
||||
---
|
||||
|
||||
## Inhaltsverzeichnis
|
||||
|
||||
1. [Einführung](#einführung)
|
||||
2. [Installation](#installation)
|
||||
3. [Programmstart](#programmstart)
|
||||
4. [Die drei Modi](#die-drei-modi)
|
||||
- [Einzelprojekt-Modus](#einzelprojekt-modus)
|
||||
- [Batch-Modus](#batch-modus)
|
||||
- [Projekt-Merger](#projekt-merger)
|
||||
5. [Konfiguration](#konfiguration)
|
||||
6. [Troubleshooting](#troubleshooting)
|
||||
7. [FAQ](#faq)
|
||||
|
||||
---
|
||||
|
||||
## Einführung
|
||||
|
||||
### Was ist der PointCab Renamer?
|
||||
|
||||
Der **PointCab Renamer** ist ein Werkzeug zur automatischen Umbenennung von PointCab-Projektdateien. Es löst das Problem, dass PointCab-Scandateien oft kryptische Namen haben (z.B. `1.lsd`, `2.lsd`) und benennt diese nach einem einheitlichen Schema um:
|
||||
|
||||
**Format:** `[ClusterName]_[ScanName].[Erweiterung]`
|
||||
|
||||
**Beispiel:** `EG_Flur_scan001.lsd`
|
||||
|
||||
### Hauptfunktionen
|
||||
|
||||
- **Einzelprojekt-Modus**: Ein einzelnes PointCab-Projekt umbenennen
|
||||
- **Batch-Modus**: Mehrere Projekte gleichzeitig verarbeiten
|
||||
- **Projekt-Merger**: Mehrere Projekte in ein Zielprojekt zusammenführen
|
||||
- **Cluster-Bereinigung**: Automatische Entfernung von Suffixen wie `_re`, `_li` aus Clusternamen
|
||||
- **Detailliertes Logging**: Vollständige Protokollierung aller Änderungen
|
||||
|
||||
---
|
||||
|
||||
## Installation
|
||||
|
||||
### Windows
|
||||
|
||||
1. Laden Sie die Datei `pointcab_renamer.exe` herunter
|
||||
2. Speichern Sie die Datei in einem beliebigen Ordner (z.B. `C:\Tools\`)
|
||||
3. Kopieren Sie die `cluster_cleanup.txt` in denselben Ordner
|
||||
4. Starten Sie das Programm mit Doppelklick auf die `.exe`
|
||||
|
||||
### Ubuntu/Linux
|
||||
|
||||
1. Laden Sie die Datei `pointcab_renamer` herunter
|
||||
2. Speichern Sie die Datei in einem beliebigen Ordner (z.B. `/home/benutzer/tools/`)
|
||||
3. Kopieren Sie die `cluster_cleanup.txt` in denselben Ordner
|
||||
4. Machen Sie die Datei ausführbar:
|
||||
```bash
|
||||
chmod +x pointcab_renamer
|
||||
```
|
||||
5. Starten Sie das Programm:
|
||||
```bash
|
||||
./pointcab_renamer
|
||||
```
|
||||
|
||||
### Aus dem Quellcode (für Entwickler)
|
||||
|
||||
1. Stellen Sie sicher, dass Python 3.8+ installiert ist
|
||||
2. Laden Sie den Quellcode herunter
|
||||
3. Starten Sie mit:
|
||||
```bash
|
||||
python pointcab_renamer.py
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Programmstart
|
||||
|
||||
### Hauptmenü
|
||||
|
||||
Nach dem Start erscheint das Hauptmenü mit drei Optionen:
|
||||
|
||||
```
|
||||
╔═══════════════════════════════════════════╗
|
||||
║ PointCab Renamer v4.1 ║
|
||||
╠═══════════════════════════════════════════╣
|
||||
║ ║
|
||||
║ [Einzelprojekt umbenennen] ║
|
||||
║ ║
|
||||
║ [Batch-Verarbeitung] ║
|
||||
║ ║
|
||||
║ [Projekt Merger] ║
|
||||
║ ║
|
||||
╚═══════════════════════════════════════════╝
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Die drei Modi
|
||||
|
||||
### Einzelprojekt-Modus
|
||||
|
||||
**Verwendung:** Wenn Sie ein einzelnes PointCab-Projekt umbenennen möchten.
|
||||
|
||||
#### Schritt-für-Schritt-Anleitung
|
||||
|
||||
1. Klicken Sie auf **"Einzelprojekt umbenennen"**
|
||||
2. Wählen Sie die **LSDX-Projektdatei** aus (z.B. `Am_Upstall_4.lsdx`)
|
||||
3. Wählen Sie den **PointCloud-Ordner** aus (enthält die `.lsd` Dateien)
|
||||
4. Das Programm zeigt eine **Vorschau** der Änderungen:
|
||||
```
|
||||
Vorschau der Umbenennung:
|
||||
─────────────────────────
|
||||
1.lsd → EG_Flur_scan001.lsd
|
||||
2.lsd → EG_Flur_scan002.lsd
|
||||
3.lsd → OG_Bad_scan001.lsd
|
||||
...
|
||||
```
|
||||
5. Klicken Sie auf **"Umbenennen starten"**
|
||||
6. Nach Abschluss wird ein Protokoll angezeigt
|
||||
|
||||
#### Dateistruktur (Vorher → Nachher)
|
||||
|
||||
**Vorher:**
|
||||
```
|
||||
Am_Upstall_4_PointCloud/
|
||||
├── 1.lsd
|
||||
├── 2.lsd
|
||||
├── 3.lsd
|
||||
└── ...
|
||||
```
|
||||
|
||||
**Nachher:**
|
||||
```
|
||||
Am_Upstall_4_PointCloud/
|
||||
├── EG_Flur_scan001.lsd
|
||||
├── EG_Flur_scan002.lsd
|
||||
├── OG_Bad_scan001.lsd
|
||||
└── ...
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Batch-Modus
|
||||
|
||||
**Verwendung:** Wenn Sie mehrere PointCab-Projekte auf einmal verarbeiten möchten.
|
||||
|
||||
#### Schritt-für-Schritt-Anleitung
|
||||
|
||||
1. Klicken Sie auf **"Batch-Verarbeitung"**
|
||||
2. Wählen Sie den **Basisordner** aus, der alle Projekte enthält
|
||||
3. Das Programm erkennt automatisch alle PointCab-Projekte:
|
||||
```
|
||||
Gefundene Projekte:
|
||||
─────────────────────
|
||||
☑ Projekt_A (15 Scans)
|
||||
☑ Projekt_B (22 Scans)
|
||||
☑ Projekt_C (8 Scans)
|
||||
```
|
||||
4. Wählen Sie die gewünschten Projekte aus (oder behalten Sie alle ausgewählt)
|
||||
5. Klicken Sie auf **"Batch-Verarbeitung starten"**
|
||||
6. Der Fortschritt wird angezeigt:
|
||||
```
|
||||
Verarbeite Projekt 1/3: Projekt_A
|
||||
[████████████░░░░░░░░] 60%
|
||||
```
|
||||
7. Nach Abschluss wird eine Zusammenfassung angezeigt
|
||||
|
||||
#### Erwartete Ordnerstruktur
|
||||
|
||||
```
|
||||
Basisordner/
|
||||
├── Projekt_A/
|
||||
│ ├── Projekt_A.lsdx
|
||||
│ └── Projekt_A_PointCloud/
|
||||
│ ├── 1.lsd
|
||||
│ └── ...
|
||||
├── Projekt_B/
|
||||
│ ├── Projekt_B.lsdx
|
||||
│ └── Projekt_B_PointCloud/
|
||||
└── Projekt_C/
|
||||
├── Projekt_C.lsdx
|
||||
└── Projekt_C_PointCloud/
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Projekt-Merger
|
||||
|
||||
**Verwendung:** Wenn Sie mehrere PointCab-Projekte in ein einziges Projekt zusammenführen möchten.
|
||||
|
||||
#### Schritt-für-Schritt-Anleitung
|
||||
|
||||
1. Klicken Sie auf **"Projekt Merger"**
|
||||
2. Wählen Sie den **Modus**:
|
||||
- **Einzelprojekt zusammenführen**: Ein Quellprojekt → Zielprojekt
|
||||
- **Batch-Merge**: Mehrere Quellprojekte → Zielprojekt
|
||||
3. Wählen Sie das **Zielprojekt** (in das zusammengeführt wird)
|
||||
4. Wählen Sie das/die **Quellprojekt(e)**
|
||||
5. Das Programm zeigt eine **Vorschau** mit Konfliktauflösung:
|
||||
```
|
||||
Merge-Vorschau:
|
||||
─────────────────────
|
||||
Zielprojekt: Haupt_Projekt (5 Cluster, 25 Scans)
|
||||
Quellprojekt: Teil_A (2 Cluster, 10 Scans)
|
||||
|
||||
Zu übertragende Dateien:
|
||||
- EG_Flur_scan001.lsd
|
||||
- EG_Flur_scan002.lsd (Konflikt → EG_Flur_scan002_merged_1.lsd)
|
||||
- ...
|
||||
```
|
||||
6. Klicken Sie auf **"Merge starten"**
|
||||
7. Nach Abschluss werden die Statistiken angezeigt:
|
||||
```
|
||||
Merge abgeschlossen!
|
||||
─────────────────────
|
||||
Cluster vorher: 5 → nachher: 7
|
||||
Scans vorher: 25 → nachher: 35
|
||||
Dateien kopiert: 10
|
||||
Konflikte gelöst: 1
|
||||
```
|
||||
|
||||
#### Konfliktauflösung
|
||||
|
||||
Wenn eine Datei im Zielprojekt bereits existiert:
|
||||
- Die neue Datei wird umbenannt: `dateiname_merged_1.lsd`
|
||||
- Bei weiteren Konflikten: `dateiname_merged_2.lsd`, etc.
|
||||
- Die LSDX-Datei wird entsprechend aktualisiert
|
||||
|
||||
#### Wichtige Hinweise
|
||||
|
||||
- **Backup**: Das Zielprojekt wird vor dem Merge gesichert (`.lsdx.backup`)
|
||||
- **UUID-Regenerierung**: Alle übertragenen Elemente erhalten neue eindeutige IDs
|
||||
- **Cluster-Duplikate**: Gleichnamige Cluster werden zusammengeführt
|
||||
|
||||
---
|
||||
|
||||
## Konfiguration
|
||||
|
||||
### Die Datei cluster_cleanup.txt
|
||||
|
||||
Diese Konfigurationsdatei definiert, welche Suffixe aus Clusternamen entfernt werden sollen.
|
||||
|
||||
#### Speicherort
|
||||
|
||||
- **Windows**: Im selben Ordner wie `pointcab_renamer.exe`
|
||||
- **Linux**: Im selben Ordner wie `pointcab_renamer`
|
||||
|
||||
#### Format
|
||||
|
||||
```
|
||||
# Dies ist ein Kommentar
|
||||
_re
|
||||
_li
|
||||
_mi
|
||||
_mi-li
|
||||
_mi-re
|
||||
```
|
||||
|
||||
- Jede Zeile = ein zu entfernender String
|
||||
- Zeilen mit `#` am Anfang sind Kommentare
|
||||
- Leere Zeilen werden ignoriert
|
||||
|
||||
#### Beispiel
|
||||
|
||||
Mit der obigen Konfiguration:
|
||||
- `Flur_re` → `Flur`
|
||||
- `Bad_mi-li` → `Bad`
|
||||
- `Küche_li` → `Küche`
|
||||
|
||||
#### Konfiguration neu laden
|
||||
|
||||
Änderungen an `cluster_cleanup.txt` werden nach einem Neustart oder über den Button **"Konfiguration neu laden"** übernommen.
|
||||
|
||||
---
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Häufige Fehler und Lösungen
|
||||
|
||||
#### "LSDX-Datei nicht gefunden"
|
||||
|
||||
**Problem**: Das Programm kann die Projektdatei nicht finden.
|
||||
|
||||
**Lösung**:
|
||||
- Stellen Sie sicher, dass die `.lsdx`-Datei im Projektordner existiert
|
||||
- Prüfen Sie, ob Sie Leserechte für die Datei haben
|
||||
- Der Dateiname sollte mit `.lsdx` enden (nicht `.LSDX`)
|
||||
|
||||
#### "PointCloud-Ordner nicht gefunden"
|
||||
|
||||
**Problem**: Der Ordner mit den Scandaten fehlt.
|
||||
|
||||
**Lösung**:
|
||||
- Der Ordner muss `_PointCloud` im Namen haben
|
||||
- Beispiel: `Projekt_A_PointCloud`
|
||||
- Prüfen Sie die Ordnerstruktur
|
||||
|
||||
#### "Keine Projekte gefunden" (Batch-Modus)
|
||||
|
||||
**Problem**: Im Basisordner werden keine Projekte erkannt.
|
||||
|
||||
**Lösung**:
|
||||
- Jedes Projekt muss eine `.lsdx`-Datei und einen `_PointCloud`-Ordner haben
|
||||
- Der Projektname in der LSDX muss mit dem Ordnernamen übereinstimmen
|
||||
|
||||
#### "Zugriff verweigert"
|
||||
|
||||
**Problem**: Dateien können nicht umbenannt werden.
|
||||
|
||||
**Lösung**:
|
||||
- Schließen Sie PointCab
|
||||
- Prüfen Sie, ob andere Programme die Dateien verwenden
|
||||
- Unter Windows: Als Administrator ausführen
|
||||
- Unter Linux: Prüfen Sie die Dateiberechtigungen
|
||||
|
||||
#### "GUI startet nicht" (Linux)
|
||||
|
||||
**Problem**: Keine grafische Oberfläche unter Linux.
|
||||
|
||||
**Lösung**:
|
||||
- Installieren Sie tkinter: `sudo apt install python3-tk`
|
||||
- Stellen Sie sicher, dass ein Display verfügbar ist
|
||||
|
||||
---
|
||||
|
||||
## FAQ
|
||||
|
||||
### Allgemeine Fragen
|
||||
|
||||
**F: Werden die Originaldateien gelöscht?**
|
||||
|
||||
A: Nein, die Dateien werden nur umbenannt. Es werden keine Daten gelöscht.
|
||||
|
||||
**F: Kann ich die Umbenennung rückgängig machen?**
|
||||
|
||||
A: Die ursprünglichen Namen werden im Log-Datei protokolliert. Eine automatische Rückgängig-Funktion gibt es nicht.
|
||||
|
||||
**F: Funktioniert das Tool auch mit älteren PointCab-Versionen?**
|
||||
|
||||
A: Das Tool wurde für PointCab-Projekte mit LSDX-Format entwickelt. Ältere Formate werden möglicherweise nicht unterstützt.
|
||||
|
||||
**F: Wie viele Projekte kann ich im Batch-Modus verarbeiten?**
|
||||
|
||||
A: Es gibt keine feste Grenze. Die Verarbeitungszeit hängt von der Anzahl der Scans ab.
|
||||
|
||||
### Technische Fragen
|
||||
|
||||
**F: Wo werden die Log-Dateien gespeichert?**
|
||||
|
||||
A: Im Projektordner, mit dem Format:
|
||||
- Einzelprojekt: `rename_YYYYMMDD_HHMMSS.log`
|
||||
- Batch: `batch_YYYYMMDD_HHMMSS.log`
|
||||
- Merger: `merge_YYYYMMDD_HHMMSS.log`
|
||||
|
||||
**F: Was passiert bei einem Stromausfall während der Verarbeitung?**
|
||||
|
||||
A: Die bereits umbenannten Dateien bleiben umbenannt. Die LSDX-Datei wird erst nach erfolgreicher Umbenennung aktualisiert.
|
||||
|
||||
**F: Kann ich das Tool über die Kommandozeile nutzen?**
|
||||
|
||||
A: Aktuell nur mit grafischer Oberfläche. Kommandozeilen-Unterstützung ist für eine zukünftige Version geplant.
|
||||
|
||||
### Merger-Fragen
|
||||
|
||||
**F: Was passiert mit den Originalprojekten beim Merge?**
|
||||
|
||||
A: Die Quellprojekte werden nicht verändert. Dateien werden kopiert, nicht verschoben.
|
||||
|
||||
**F: Kann ich den Merge rückgängig machen?**
|
||||
|
||||
A: Die ursprüngliche LSDX wird als `.backup` gespeichert. Die kopierten Dateien müssen manuell gelöscht werden.
|
||||
|
||||
**F: Werden alle Unterordner (Previews, etc.) auch gemergt?**
|
||||
|
||||
A: Ja, alle relevanten Unterordner werden übertragen.
|
||||
|
||||
---
|
||||
|
||||
## Support
|
||||
|
||||
Bei Fragen oder Problemen wenden Sie sich an Ihren Administrator.
|
||||
|
||||
---
|
||||
|
||||
*PointCab Renamer v4.1 - © 2026*
|
||||
|
|
@ -0,0 +1,171 @@
|
|||
# Changelog - PointCab Renamer
|
||||
|
||||
Alle wichtigen Änderungen an diesem Projekt werden hier dokumentiert.
|
||||
|
||||
---
|
||||
|
||||
## [v4.2.1] - 2026-01-16
|
||||
|
||||
### Behoben
|
||||
- **build_linux.sh überarbeitet und getestet**
|
||||
- Verwendet `python3 -m PyInstaller` für bessere Kompatibilität
|
||||
- Verbesserte Voraussetzungsprüfungen
|
||||
- Bessere Fehlerbehandlung und Statusmeldungen
|
||||
- ✅ GETESTET: Funktioniert erfolgreich
|
||||
|
||||
- **build_windows_wine.sh überarbeitet**
|
||||
- Bessere Erkennung von Headless-Umgebungen
|
||||
- Automatische Xvfb-Unterstützung falls verfügbar
|
||||
- Klare Warnungen zu Wine-Einschränkungen
|
||||
- Hilfreiche Alternativ-Vorschläge bei Fehlern
|
||||
- ⚠️ HINWEIS: Wine-Builds in Headless-Umgebungen oft problematisch
|
||||
|
||||
### Dokumentation
|
||||
- Build-Skript-Versionsnummern auf 4.2.1 aktualisiert
|
||||
- DEPLOYMENT.md mit Testergebnissen aktualisiert
|
||||
|
||||
### Bekannte Einschränkungen
|
||||
- Wine-basierte Windows-Builds funktionieren nicht zuverlässig auf Headless-Servern
|
||||
- Empfehlung: Windows .exe auf echtem Windows-System erstellen
|
||||
|
||||
---
|
||||
|
||||
## [v4.2] - 2026-01-16
|
||||
|
||||
### Behoben
|
||||
- **Windows build_windows.bat komplett überarbeitet**
|
||||
- Verwendet jetzt `py` statt `python` (Python Launcher für Windows)
|
||||
- Verwendet `py -m PyInstaller` statt direktem `pyinstaller`-Aufruf
|
||||
- Korrekte --add-data Syntax für Windows (Semikolon als Trennzeichen)
|
||||
- Verbesserte Fehlerbehandlung und Statusmeldungen
|
||||
|
||||
- **cluster_cleanup.txt Parser verbessert**
|
||||
- Unterstützt jetzt UTF-8-BOM (von Windows-Editoren erzeugt)
|
||||
- Robustere Behandlung von Leerzeilen und Kommentaren
|
||||
- Gibt jetzt Anzahl geladener Einträge aus
|
||||
|
||||
### Hinzugefügt
|
||||
- **cluster_cleanup.txt erweitert**
|
||||
- Neue Einträge: `_part_1`, `_part_2`, `_part_3`, `_part_4`, `_part_5`
|
||||
|
||||
- **Git-Repository Setup**
|
||||
- `.gitignore` für sauberes Repository
|
||||
- `GIT_SETUP.md` mit Anleitung für Gitea/GitHub Push
|
||||
|
||||
### Dokumentation
|
||||
- VERSION.txt aktualisiert
|
||||
- CHANGELOG.md erweitert
|
||||
|
||||
---
|
||||
|
||||
## [v4.1.1] - 2026-01-14
|
||||
|
||||
### Hinzugefügt
|
||||
- **Cross-Compilation-Unterstützung**: Windows .exe unter Linux erstellen
|
||||
- `build_windows_on_linux.sh`: Docker-basiertes Build (empfohlen)
|
||||
- `build_windows_wine.sh`: Wine-basiertes Build (Fallback)
|
||||
- GitHub Actions Workflow-Beispiel für automatisierte Builds
|
||||
|
||||
### Dokumentation
|
||||
- DEPLOYMENT.md um Cross-Compilation-Sektion erweitert
|
||||
- Schritt-für-Schritt-Anleitung für Docker-Methode
|
||||
- Troubleshooting für häufige Probleme
|
||||
- Vergleichstabelle der Build-Methoden
|
||||
- README.md mit Build-Optionen aktualisiert
|
||||
|
||||
---
|
||||
|
||||
## [v4.1] - 2026-01-14
|
||||
|
||||
### Behoben
|
||||
- **Projektmerger LSDx-Zusammenführung komplett überarbeitet**
|
||||
- Cluster-Duplikat-Erkennung: Verhindert doppelte Cluster bei gleichem Namen
|
||||
- Scans werden korrekt dem existierenden oder neuen Cluster zugeordnet
|
||||
- Parent-Referenzen werden korrekt gesetzt (Cluster→Registration, Scan→Cluster)
|
||||
- Detailliertes Logging aller Merge-Operationen
|
||||
- Finale Scan/Cluster-Statistik nach Merge
|
||||
|
||||
### Verbessert
|
||||
- LSDX-Struktur im Code dokumentiert
|
||||
- Verbesserte Fehlerbehandlung beim Merge
|
||||
|
||||
---
|
||||
|
||||
## [v4.0] - 2026-01-10
|
||||
|
||||
### Hinzugefügt
|
||||
- **Projekt Merger**: Neuer Modus zum Zusammenführen mehrerer PointCab-Projekte
|
||||
- Einzelprojekt-Merge: Ein Quellprojekt → Zielprojekt
|
||||
- Batch-Merge: Mehrere Quellprojekte → Zielprojekt
|
||||
- Intelligente Konfliktauflösung mit `_merged_N` Suffix
|
||||
- Vollständige LSDX-Zusammenführung (Cluster, Scans, Dateireferenzen)
|
||||
- UUID-Regenerierung für alle übertragenen Elemente
|
||||
- Automatisches Backup der Ziel-LSDX vor dem Merge
|
||||
|
||||
### Verbessert
|
||||
- Neue GUI für den Merger mit Konfliktvorschau
|
||||
- Batch-Merge mit Fortschrittsanzeige
|
||||
|
||||
---
|
||||
|
||||
## [v3.1] - 2026-01-05
|
||||
|
||||
### Geändert
|
||||
- **Neues Namensformat**: `[ClusterName]_[ScanName].[Erweiterung]`
|
||||
- Vorher: `[ClusterName].[Erweiterung]`
|
||||
- Nachher: `EG_Flur_scan001.lsd`
|
||||
- Scan-Namen werden aus der LSDX extrahiert
|
||||
- Cluster-Nummer-Duplikate werden vermieden
|
||||
|
||||
---
|
||||
|
||||
## [v3.0] - 2025-12-20
|
||||
|
||||
### Hinzugefügt
|
||||
- **Batch-Verarbeitung**: Mehrere Projekte gleichzeitig umbenennen
|
||||
- Automatische Projekterkennung im Basisordner
|
||||
- Selektive Projektauswahl
|
||||
- Fortschrittsanzeige für Batch-Operationen
|
||||
- Zusammenfassendes Batch-Log
|
||||
|
||||
### Verbessert
|
||||
- GUI-Umstrukturierung mit Hauptmenü
|
||||
- Verbesserte Fehlerbehandlung bei Dateioperationen
|
||||
|
||||
---
|
||||
|
||||
## [v2.0] - 2025-12-01
|
||||
|
||||
### Hinzugefügt
|
||||
- **Cluster-Bereinigung**: Automatische Entfernung von Suffixen
|
||||
- Konfigurierbar über `cluster_cleanup.txt`
|
||||
- Entfernt `_re`, `_li`, `_mi`, etc.
|
||||
- Button "Konfiguration neu laden"
|
||||
|
||||
### Verbessert
|
||||
- Verbesserte Vorschau der Umbenennung
|
||||
- Detaillierteres Logging
|
||||
|
||||
---
|
||||
|
||||
## [v1.0] - 2025-11-15
|
||||
|
||||
### Erstveröffentlichung
|
||||
- Grundfunktion: LSDX-Dateien einlesen
|
||||
- Scans aus PointCloud-Ordner umbenennen
|
||||
- Grafische Benutzeroberfläche (tkinter)
|
||||
- Vorschau vor Umbenennung
|
||||
- Log-Datei-Erstellung
|
||||
|
||||
---
|
||||
|
||||
## Geplante Features
|
||||
|
||||
- [ ] Kommandozeilen-Unterstützung (CLI-Modus)
|
||||
- [ ] Rückgängig-Funktion für Umbenennungen
|
||||
- [ ] Automatische Updates
|
||||
- [ ] Mehrsprachige Unterstützung (Englisch)
|
||||
|
||||
---
|
||||
|
||||
*Hinweis: Dieses Changelog folgt dem Format von [Keep a Changelog](https://keepachangelog.com/).*
|
||||
|
|
@ -0,0 +1,592 @@
|
|||
# PointCab Renamer - Deployment-Anleitung
|
||||
|
||||
**Version 4.2.1** | Datum: 16. Januar 2026
|
||||
|
||||
---
|
||||
|
||||
## Build-Status (Testergebnisse 2026-01-16)
|
||||
|
||||
| Build-Methode | Status | Hinweise |
|
||||
|---------------|--------|----------|
|
||||
| `build_windows.bat` | ✅ Funktioniert | Empfohlen auf Windows |
|
||||
| `build_linux.sh` | ✅ Getestet | Funktioniert auf Ubuntu 20.04+ |
|
||||
| `build_windows_wine.sh` | ⚠️ Experimentell | Fehlschläge auf Headless-Servern möglich |
|
||||
| `build_windows_on_linux.sh` | ⚠️ Docker | Nicht in Docker-in-Docker möglich |
|
||||
|
||||
---
|
||||
|
||||
## Übersicht
|
||||
|
||||
Diese Anleitung beschreibt, wie Sie aus dem Python-Quellcode ausführbare Dateien für Windows (.exe) und Ubuntu (Binary) erstellen.
|
||||
|
||||
---
|
||||
|
||||
## Voraussetzungen
|
||||
|
||||
### Benötigte Software
|
||||
|
||||
| Komponente | Windows | Ubuntu |
|
||||
|------------|---------|--------|
|
||||
| Python | 3.8+ | 3.8+ |
|
||||
| PyInstaller | 5.0+ | 5.0+ |
|
||||
| tkinter | (in Python enthalten) | `python3-tk` |
|
||||
|
||||
### Installation der Voraussetzungen
|
||||
|
||||
#### Windows
|
||||
|
||||
1. **Python installieren:**
|
||||
- Laden Sie Python von https://www.python.org/downloads/ herunter
|
||||
- Bei der Installation: ☑ "Add Python to PATH" aktivieren
|
||||
|
||||
2. **PyInstaller installieren:**
|
||||
```cmd
|
||||
pip install pyinstaller
|
||||
```
|
||||
|
||||
#### Ubuntu
|
||||
|
||||
1. **Python und tkinter installieren:**
|
||||
```bash
|
||||
sudo apt update
|
||||
sudo apt install python3 python3-pip python3-tk
|
||||
```
|
||||
|
||||
2. **PyInstaller installieren:**
|
||||
```bash
|
||||
pip3 install pyinstaller
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Windows-Build (.exe)
|
||||
|
||||
### Automatisch (empfohlen)
|
||||
|
||||
1. Öffnen Sie eine Eingabeaufforderung (cmd)
|
||||
2. Navigieren Sie zum Projektordner:
|
||||
```cmd
|
||||
cd C:\Pfad\zum\pointcab_renamer
|
||||
```
|
||||
3. Führen Sie das Build-Skript aus:
|
||||
```cmd
|
||||
build_windows.bat
|
||||
```
|
||||
4. Die fertige `.exe` finden Sie im Ordner `dist\pointcab_renamer\`
|
||||
|
||||
### Manuell
|
||||
|
||||
1. Öffnen Sie eine Eingabeaufforderung
|
||||
2. Navigieren Sie zum Quellcode-Ordner
|
||||
3. Führen Sie PyInstaller aus:
|
||||
```cmd
|
||||
pyinstaller --onefile --windowed --name "PointCab_Renamer" ^<br> --add-data "cluster_cleanup.txt;." ^<br> pointcab_renamer.py
|
||||
```
|
||||
4. Die `.exe` befindet sich in `dist\PointCab_Renamer.exe`
|
||||
|
||||
### PyInstaller-Optionen erklärt
|
||||
|
||||
| Option | Beschreibung |
|
||||
|--------|-------------|
|
||||
| `--onefile` | Alles in eine einzige .exe packen |
|
||||
| `--windowed` | Kein Konsolenfenster anzeigen |
|
||||
| `--name` | Name der Ausgabedatei |
|
||||
| `--add-data` | Zusätzliche Dateien einbinden |
|
||||
| `--icon` | (Optional) Icon-Datei (.ico) |
|
||||
|
||||
### Bekannte Probleme unter Windows
|
||||
|
||||
**Problem:** Antivirus blockiert die .exe
|
||||
|
||||
**Lösung:** Die erstellte .exe als Ausnahme hinzufügen oder signieren.
|
||||
|
||||
**Problem:** "DLL nicht gefunden"
|
||||
|
||||
**Lösung:** Visual C++ Redistributable installieren.
|
||||
|
||||
---
|
||||
|
||||
## Ubuntu-Build (Binary)
|
||||
|
||||
### Automatisch (empfohlen)
|
||||
|
||||
1. Öffnen Sie ein Terminal
|
||||
2. Navigieren Sie zum Projektordner:
|
||||
```bash
|
||||
cd /pfad/zum/pointcab_renamer
|
||||
```
|
||||
3. Machen Sie das Build-Skript ausführbar und führen Sie es aus:
|
||||
```bash
|
||||
chmod +x build_linux.sh
|
||||
./build_linux.sh
|
||||
```
|
||||
4. Das fertige Binary finden Sie im Ordner `dist/`
|
||||
|
||||
### Manuell
|
||||
|
||||
1. Öffnen Sie ein Terminal
|
||||
2. Navigieren Sie zum Quellcode-Ordner
|
||||
3. Führen Sie PyInstaller aus:
|
||||
```bash
|
||||
pyinstaller --onefile --name "pointcab_renamer" \
|
||||
--add-data "cluster_cleanup.txt:." \
|
||||
pointcab_renamer.py
|
||||
```
|
||||
4. Das Binary befindet sich in `dist/pointcab_renamer`
|
||||
5. Machen Sie es ausführbar:
|
||||
```bash
|
||||
chmod +x dist/pointcab_renamer
|
||||
```
|
||||
|
||||
### Bekannte Probleme unter Ubuntu
|
||||
|
||||
**Problem:** "No display name and no $DISPLAY environment variable"
|
||||
|
||||
**Lösung:** Das Binary muss in einer grafischen Umgebung gestartet werden, nicht über SSH.
|
||||
|
||||
**Problem:** "_tkinter not found"
|
||||
|
||||
**Lösung:** `sudo apt install python3-tk`
|
||||
|
||||
---
|
||||
|
||||
## Cross-Compilation: Windows .exe unter Linux erstellen
|
||||
|
||||
Es gibt mehrere Möglichkeiten, eine Windows .exe unter Linux zu erstellen, ohne Windows zu installieren.
|
||||
|
||||
### Methode 1: Docker (Empfohlen)
|
||||
|
||||
Die Docker-Methode ist die zuverlässigste und reproduzierbarste Option.
|
||||
|
||||
#### Voraussetzungen
|
||||
|
||||
1. **Docker installieren:**
|
||||
```bash
|
||||
sudo apt update
|
||||
sudo apt install docker.io
|
||||
sudo systemctl start docker
|
||||
sudo systemctl enable docker
|
||||
```
|
||||
|
||||
2. **Benutzer zur docker-Gruppe hinzufügen:**
|
||||
```bash
|
||||
sudo usermod -aG docker $USER
|
||||
# Danach neu einloggen oder:
|
||||
newgrp docker
|
||||
```
|
||||
|
||||
3. **Docker-Installation testen:**
|
||||
```bash
|
||||
docker run hello-world
|
||||
```
|
||||
|
||||
#### Verwendung
|
||||
|
||||
1. Navigieren Sie zum Projektordner:
|
||||
```bash
|
||||
cd /pfad/zum/pointcab_renamer
|
||||
```
|
||||
|
||||
2. Führen Sie das Build-Skript aus:
|
||||
```bash
|
||||
./build_windows_on_linux.sh
|
||||
```
|
||||
|
||||
3. Die fertige `.exe` befindet sich in `dist/PointCab_Renamer.exe`
|
||||
|
||||
#### Was das Skript macht
|
||||
|
||||
1. Prüft Docker-Installation und -Status
|
||||
2. Lädt das `cdrx/pyinstaller-windows` Docker-Image (beim ersten Mal)
|
||||
3. Startet einen Container mit Windows-Umgebung
|
||||
4. Führt PyInstaller im Container aus
|
||||
5. Kopiert die .exe und Zusatzdateien nach `dist/`
|
||||
|
||||
#### Vorteile der Docker-Methode
|
||||
|
||||
- ✅ Zuverlässig und reproduzierbar
|
||||
- ✅ Isolierte Build-Umgebung
|
||||
- ✅ Keine manuelle Windows-Python-Installation
|
||||
- ✅ Gleiche Ergebnisse wie auf echtem Windows
|
||||
- ✅ Einfach in CI/CD-Pipelines integrierbar
|
||||
|
||||
#### Troubleshooting Docker
|
||||
|
||||
**Problem:** "Permission denied" beim Docker-Aufruf
|
||||
|
||||
**Lösung:**
|
||||
```bash
|
||||
sudo usermod -aG docker $USER
|
||||
# Neu einloggen erforderlich!
|
||||
```
|
||||
|
||||
**Problem:** Docker-Image-Download schlägt fehl
|
||||
|
||||
**Lösung:** Proxy-Einstellungen prüfen oder manuell herunterladen:
|
||||
```bash
|
||||
docker pull cdrx/pyinstaller-windows:python3
|
||||
```
|
||||
|
||||
**Problem:** Container startet nicht
|
||||
|
||||
**Lösung:** Docker-Daemon prüfen:
|
||||
```bash
|
||||
sudo systemctl status docker
|
||||
sudo systemctl restart docker
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Methode 2: Wine (Fallback)
|
||||
|
||||
Die Wine-Methode ist weniger zuverlässig, kann aber ohne Docker verwendet werden.
|
||||
|
||||
#### Voraussetzungen
|
||||
|
||||
1. **Wine installieren:**
|
||||
```bash
|
||||
sudo dpkg --add-architecture i386
|
||||
sudo apt update
|
||||
sudo apt install wine64 wine32
|
||||
```
|
||||
|
||||
2. **Installation prüfen:**
|
||||
```bash
|
||||
wine --version
|
||||
```
|
||||
|
||||
#### Verwendung
|
||||
|
||||
1. Navigieren Sie zum Projektordner:
|
||||
```bash
|
||||
cd /pfad/zum/pointcab_renamer
|
||||
```
|
||||
|
||||
2. Führen Sie das Build-Skript aus:
|
||||
```bash
|
||||
./build_windows_wine.sh
|
||||
```
|
||||
|
||||
3. Das Skript installiert automatisch:
|
||||
- Windows-Python in Wine
|
||||
- PyInstaller
|
||||
|
||||
#### Einschränkungen der Wine-Methode
|
||||
|
||||
- ⚠️ Nicht alle Windows-Funktionen werden unterstützt
|
||||
- ⚠️ Kann bei komplexen Abhängigkeiten fehlschlagen
|
||||
- ⚠️ Langsamerer Build-Prozess
|
||||
- ⚠️ Ergebnisse können von echter Windows-Build abweichen
|
||||
|
||||
---
|
||||
|
||||
### Methode 3: GitHub Actions (Automatisiert)
|
||||
|
||||
Für regelmäßige Builds können Sie GitHub Actions verwenden.
|
||||
|
||||
Erstellen Sie `.github/workflows/build.yml`:
|
||||
|
||||
```yaml
|
||||
name: Build Windows Executable
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- 'v*'
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
build-windows:
|
||||
runs-on: windows-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: '3.10'
|
||||
|
||||
- name: Install dependencies
|
||||
run: pip install pyinstaller
|
||||
|
||||
- name: Build executable
|
||||
run: |
|
||||
pyinstaller --onefile --windowed --name "PointCab_Renamer" `
|
||||
--add-data "cluster_cleanup.txt;." `
|
||||
--add-data "BENUTZERHANDBUCH.md;." `
|
||||
pointcab_renamer.py
|
||||
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: PointCab_Renamer_Windows
|
||||
path: |
|
||||
dist/PointCab_Renamer.exe
|
||||
cluster_cleanup.txt
|
||||
BENUTZERHANDBUCH.md
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Vergleich der Cross-Compilation-Methoden
|
||||
|
||||
| Methode | Zuverlässigkeit | Geschwindigkeit | Aufwand |
|
||||
|---------|-----------------|-----------------|---------|
|
||||
| Docker | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | Niedrig |
|
||||
| Wine | ⭐⭐ | ⭐⭐ | Mittel |
|
||||
| GitHub Actions | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | Niedrig |
|
||||
| Echtes Windows | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | Hoch (VM) |
|
||||
|
||||
**Empfehlung:** Verwenden Sie die Docker-Methode für lokale Builds und GitHub Actions für automatisierte Release-Builds.
|
||||
|
||||
---
|
||||
|
||||
## Testen der Executables
|
||||
|
||||
### Windows-Test
|
||||
|
||||
1. Kopieren Sie die `.exe` und `cluster_cleanup.txt` in einen Testordner
|
||||
2. Doppelklicken Sie auf die `.exe`
|
||||
3. Das Hauptmenü sollte erscheinen
|
||||
4. Testen Sie alle drei Modi mit einem Testprojekt
|
||||
|
||||
### Ubuntu-Test
|
||||
|
||||
1. Kopieren Sie das Binary und `cluster_cleanup.txt` in einen Testordner
|
||||
2. Starten Sie das Programm:
|
||||
```bash
|
||||
./pointcab_renamer
|
||||
```
|
||||
3. Das Hauptmenü sollte erscheinen
|
||||
4. Testen Sie alle drei Modi mit einem Testprojekt
|
||||
|
||||
### Checkliste für Tests
|
||||
|
||||
- [ ] Programm startet ohne Fehler
|
||||
- [ ] Hauptmenü wird angezeigt
|
||||
- [ ] LSDX-Datei kann ausgewählt werden
|
||||
- [ ] PointCloud-Ordner wird erkannt
|
||||
- [ ] Vorschau wird korrekt angezeigt
|
||||
- [ ] Umbenennung funktioniert
|
||||
- [ ] LSDX wird aktualisiert
|
||||
- [ ] Log-Datei wird erstellt
|
||||
- [ ] Batch-Modus funktioniert
|
||||
- [ ] Merger funktioniert
|
||||
|
||||
---
|
||||
|
||||
## Distribution an Mitarbeiter
|
||||
|
||||
### Bereitstellung
|
||||
|
||||
1. **Für Windows:**
|
||||
- Kopieren Sie diese Dateien in einen Ordner:
|
||||
- `PointCab_Renamer.exe`
|
||||
- `cluster_cleanup.txt`
|
||||
- `BENUTZERHANDBUCH.md` (oder als PDF)
|
||||
- Erstellen Sie ein ZIP-Archiv
|
||||
- Verteilen Sie über Netzlaufwerk oder E-Mail
|
||||
|
||||
2. **Für Ubuntu:**
|
||||
- Kopieren Sie diese Dateien in einen Ordner:
|
||||
- `pointcab_renamer`
|
||||
- `cluster_cleanup.txt`
|
||||
- `BENUTZERHANDBUCH.md`
|
||||
- Erstellen Sie ein tar.gz-Archiv:
|
||||
```bash
|
||||
tar -czvf pointcab_renamer_linux.tar.gz pointcab_renamer cluster_cleanup.txt BENUTZERHANDBUCH.md
|
||||
```
|
||||
- Verteilen Sie über Netzlaufwerk
|
||||
|
||||
### Empfohlene Ordnerstruktur für Mitarbeiter
|
||||
|
||||
```
|
||||
PointCab_Renamer/
|
||||
├── PointCab_Renamer.exe (oder pointcab_renamer für Linux)
|
||||
├── cluster_cleanup.txt
|
||||
├── BENUTZERHANDBUCH.md
|
||||
└── logs/ (wird automatisch erstellt)
|
||||
```
|
||||
|
||||
### Updates verteilen
|
||||
|
||||
1. Erstellen Sie die neue Executable
|
||||
2. Informieren Sie die Mitarbeiter über Änderungen (CHANGELOG)
|
||||
3. Mitarbeiter ersetzen die alte .exe durch die neue
|
||||
4. `cluster_cleanup.txt` kann beibehalten werden (falls angepasst)
|
||||
|
||||
---
|
||||
|
||||
## Troubleshooting beim Build
|
||||
|
||||
### "ModuleNotFoundError"
|
||||
|
||||
**Lösung:** Fehlende Module installieren:
|
||||
```bash
|
||||
pip install <modulname>
|
||||
```
|
||||
|
||||
### "Hidden import not found"
|
||||
|
||||
**Lösung:** Hidden imports hinzufügen:
|
||||
```bash
|
||||
pyinstaller --hidden-import=<modulname> ...
|
||||
```
|
||||
|
||||
### "Executable zu groß" (>100MB)
|
||||
|
||||
**Lösung:** UPX-Kompression aktivieren:
|
||||
```bash
|
||||
pip install upx
|
||||
pyinstaller --onefile --upx-dir=/pfad/zu/upx ...
|
||||
```
|
||||
|
||||
### "tkinter funktioniert nicht"
|
||||
|
||||
**Windows:** tkinter ist normalerweise in Python enthalten. Reinstallieren Sie Python mit der "tcl/tk" Option.
|
||||
|
||||
**Ubuntu:** Installieren Sie python3-tk:
|
||||
```bash
|
||||
sudo apt install python3-tk
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Versionskontrolle
|
||||
|
||||
Bei jeder neuen Version:
|
||||
|
||||
1. Version im Quellcode aktualisieren (`VERSION = "4.2"` etc.)
|
||||
2. CHANGELOG.md aktualisieren
|
||||
3. Neue Builds für Windows und Ubuntu erstellen
|
||||
4. Builds testen
|
||||
5. Im Git-Repository taggen:
|
||||
```bash
|
||||
git tag -a v4.2 -m "Version 4.2"
|
||||
git push origin v4.2
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
---
|
||||
|
||||
## Troubleshooting: Docker-Probleme
|
||||
|
||||
### Docker ist nicht installiert
|
||||
|
||||
**Ubuntu/Debian:**
|
||||
```bash
|
||||
sudo apt update
|
||||
sudo apt install docker.io
|
||||
sudo systemctl start docker
|
||||
sudo systemctl enable docker
|
||||
sudo usermod -aG docker $USER
|
||||
# Dann neu einloggen oder: newgrp docker
|
||||
```
|
||||
|
||||
**Fedora/RHEL:**
|
||||
```bash
|
||||
sudo dnf install docker
|
||||
sudo systemctl start docker
|
||||
```
|
||||
|
||||
### Docker-Daemon startet nicht
|
||||
|
||||
**Symptom:** `Cannot connect to the Docker daemon`
|
||||
|
||||
**Lösungen:**
|
||||
|
||||
1. **Service starten:**
|
||||
```bash
|
||||
sudo systemctl start docker
|
||||
```
|
||||
|
||||
2. **Status prüfen:**
|
||||
```bash
|
||||
sudo systemctl status docker
|
||||
```
|
||||
|
||||
3. **Logs prüfen:**
|
||||
```bash
|
||||
sudo journalctl -u docker.service
|
||||
```
|
||||
|
||||
### Berechtigung verweigert
|
||||
|
||||
**Symptom:** `permission denied while trying to connect to the Docker daemon`
|
||||
|
||||
**Lösung:** Benutzer zur Docker-Gruppe hinzufügen:
|
||||
```bash
|
||||
sudo usermod -aG docker $USER
|
||||
# Danach neu einloggen
|
||||
```
|
||||
|
||||
Oder mit sudo ausführen:
|
||||
```bash
|
||||
sudo ./build_windows_on_linux.sh
|
||||
```
|
||||
|
||||
### Docker in Container-Umgebung (Docker-in-Docker)
|
||||
|
||||
**Problem:** Docker kann nicht in unprivilegierten Containern laufen.
|
||||
|
||||
**Lösungen:**
|
||||
|
||||
1. **Wine-Alternative verwenden:**
|
||||
```bash
|
||||
./build_windows_wine.sh
|
||||
```
|
||||
|
||||
2. **Auf Host-System bauen**
|
||||
|
||||
3. **GitHub Actions nutzen** (siehe `.github/workflows/`)
|
||||
|
||||
4. **Container mit `--privileged` starten** (nicht empfohlen für Produktion)
|
||||
|
||||
### WSL2 unter Windows
|
||||
|
||||
**Problem:** Docker-Befehle schlagen in WSL2 fehl.
|
||||
|
||||
**Lösung:**
|
||||
1. Docker Desktop für Windows installieren
|
||||
2. In Docker Desktop: Settings → Resources → WSL Integration aktivieren
|
||||
3. WSL-Distribution auswählen
|
||||
|
||||
### Docker-Image Download schlägt fehl
|
||||
|
||||
**Symptom:** `Error pulling image` oder Timeout
|
||||
|
||||
**Lösungen:**
|
||||
|
||||
1. **Internetverbindung prüfen**
|
||||
|
||||
2. **Proxy konfigurieren:**
|
||||
```bash
|
||||
export HTTP_PROXY=http://proxy:port
|
||||
export HTTPS_PROXY=http://proxy:port
|
||||
```
|
||||
|
||||
3. **Manueller Download:**
|
||||
```bash
|
||||
sudo docker pull cdrx/pyinstaller-windows:python3
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Vergleich der Build-Methoden
|
||||
|
||||
| Methode | Plattform | Vorteile | Nachteile |
|
||||
|---------|-----------|----------|-----------|
|
||||
| `build_windows.bat` | Windows | Nativ, zuverlässig | Braucht Windows |
|
||||
| `build_windows_on_linux.sh` | Linux + Docker | Cross-compilation | Docker erforderlich |
|
||||
| `build_windows_wine.sh` | Linux + Wine | Kein Docker nötig | Weniger zuverlässig |
|
||||
| GitHub Actions | Cloud | Automatisiert | Braucht GitHub-Repo |
|
||||
|
||||
**Empfehlung:** Für zuverlässige Windows-Builds verwenden Sie:
|
||||
1. **Native Windows** (build_windows.bat) - Am zuverlässigsten
|
||||
2. **Docker auf Linux** (build_windows_on_linux.sh) - Gut für CI/CD
|
||||
3. **GitHub Actions** - Automatisiert bei jedem Push/Release
|
||||
|
||||
---
|
||||
|
||||
*PointCab Renamer Deployment Guide v4.1.2 - © 2026*
|
||||
|
|
@ -0,0 +1,107 @@
|
|||
# Git-Repository Setup für PointCab Renamer
|
||||
|
||||
## Voraussetzungen
|
||||
|
||||
- Git installiert
|
||||
- Zugang zu Gitea/GitHub Repository
|
||||
|
||||
## Lokales Repository initialisieren
|
||||
|
||||
Das Repository wurde bereits initialisiert. Falls Sie ein neues Repository erstellen möchten:
|
||||
|
||||
```bash
|
||||
cd pointcab_renamer
|
||||
git init
|
||||
git add .
|
||||
git commit -m "Initial commit: PointCab Renamer v4.2"
|
||||
```
|
||||
|
||||
## Zu Gitea pushen
|
||||
|
||||
1. **Repository auf Gitea erstellen** (falls noch nicht geschehen)
|
||||
- Loggen Sie sich bei Gitea ein
|
||||
- Erstellen Sie ein neues Repository (z.B. `pointcab_renamer`)
|
||||
- Kopieren Sie die Repository-URL
|
||||
|
||||
2. **Remote hinzufügen und pushen:**
|
||||
|
||||
```bash
|
||||
# Remote hinzufügen
|
||||
git remote add origin https://gitea.example.com/username/pointcab_renamer.git
|
||||
|
||||
# Oder für SSH:
|
||||
git remote add origin git@gitea.example.com:username/pointcab_renamer.git
|
||||
|
||||
# Push zum Remote
|
||||
git push -u origin main
|
||||
```
|
||||
|
||||
## Zu GitHub pushen
|
||||
|
||||
```bash
|
||||
# Remote hinzufügen
|
||||
git remote add origin https://github.com/username/pointcab_renamer.git
|
||||
|
||||
# Oder für SSH:
|
||||
git remote add origin git@github.com:username/pointcab_renamer.git
|
||||
|
||||
# Push zum Remote
|
||||
git push -u origin main
|
||||
```
|
||||
|
||||
## Änderungen pushen
|
||||
|
||||
Nach dem initialen Push:
|
||||
|
||||
```bash
|
||||
# Änderungen hinzufügen
|
||||
git add .
|
||||
|
||||
# Commit erstellen
|
||||
git commit -m "Beschreibung der Änderungen"
|
||||
|
||||
# Pushen
|
||||
git push
|
||||
```
|
||||
|
||||
## Branching-Strategie
|
||||
|
||||
- `main` - Stabiler Release-Branch
|
||||
- `develop` - Entwicklungs-Branch
|
||||
- `feature/*` - Feature-Branches
|
||||
- `bugfix/*` - Bugfix-Branches
|
||||
|
||||
## Releases erstellen
|
||||
|
||||
```bash
|
||||
# Tag für Release erstellen
|
||||
git tag -a v4.2 -m "Release v4.2 - Bugfixes und Parser-Verbesserungen"
|
||||
|
||||
# Tag pushen
|
||||
git push origin v4.2
|
||||
```
|
||||
|
||||
## Häufige Befehle
|
||||
|
||||
```bash
|
||||
# Status anzeigen
|
||||
git status
|
||||
|
||||
# Log anzeigen
|
||||
git log --oneline
|
||||
|
||||
# Änderungen abrufen
|
||||
git pull
|
||||
|
||||
# Branch wechseln
|
||||
git checkout branch-name
|
||||
|
||||
# Neuen Branch erstellen
|
||||
git checkout -b neuer-branch
|
||||
```
|
||||
|
||||
## Hinweise
|
||||
|
||||
- Die `.gitignore` ignoriert Build-Artefakte, Logs und temporäre Dateien
|
||||
- Bei Konflikten: `git pull --rebase` verwenden
|
||||
- Regelmäßig pushen, um Datenverlust zu vermeiden
|
||||
|
|
@ -0,0 +1,73 @@
|
|||
=====================================================
|
||||
PointCab Renamer v4.1 - Schnellstart-Anleitung
|
||||
=====================================================
|
||||
|
||||
INHALT DES ARCHIVS:
|
||||
-------------------
|
||||
- pointcab_renamer.py - Hauptprogramm (Quellcode)
|
||||
- cluster_cleanup.txt - Konfigurationsdatei
|
||||
- BENUTZERHANDBUCH.md - Ausführliche Anleitung
|
||||
- DEPLOYMENT.md - Anleitung zum Erstellen von .exe/Binary
|
||||
- README.md - Projektübersicht
|
||||
- CHANGELOG.md - Versionsänderungen
|
||||
- build_windows.bat - Build-Skript für Windows
|
||||
- build_linux.sh - Build-Skript für Linux
|
||||
- requirements.txt - Python-Abhängigkeiten
|
||||
- LICENSE.txt - Lizenzinformationen
|
||||
- VERSION.txt - Versionsinformationen
|
||||
|
||||
|
||||
SCHNELLSTART - WINDOWS:
|
||||
-----------------------
|
||||
1. Entpacken Sie das Archiv in einen beliebigen Ordner
|
||||
2. Option A - Mit Python:
|
||||
- Python 3.8+ installieren (python.org)
|
||||
- Doppelklick auf pointcab_renamer.py
|
||||
|
||||
Option B - Als .exe erstellen:
|
||||
- Doppelklick auf build_windows.bat
|
||||
- Fertige .exe liegt in dist/
|
||||
|
||||
|
||||
SCHNELLSTART - LINUX/UBUNTU:
|
||||
----------------------------
|
||||
1. Entpacken Sie das Archiv:
|
||||
unzip pointcab_renamer_v4.1_release.zip
|
||||
cd pointcab_renamer_release
|
||||
|
||||
2. Option A - Mit Python:
|
||||
sudo apt install python3 python3-tk
|
||||
python3 pointcab_renamer.py
|
||||
|
||||
Option B - Als Binary erstellen:
|
||||
chmod +x build_linux.sh
|
||||
./build_linux.sh
|
||||
./dist/pointcab_renamer
|
||||
|
||||
|
||||
ERSTE SCHRITTE:
|
||||
---------------
|
||||
1. Starten Sie das Programm
|
||||
2. Wählen Sie einen Modus:
|
||||
- Einzelprojekt: Ein PointCab-Projekt umbenennen
|
||||
- Batch: Mehrere Projekte auf einmal
|
||||
- Merger: Projekte zusammenführen
|
||||
3. Folgen Sie den Anweisungen auf dem Bildschirm
|
||||
|
||||
|
||||
WICHTIGE HINWEISE:
|
||||
------------------
|
||||
- Die Datei cluster_cleanup.txt muss im selben Ordner
|
||||
wie das Programm liegen
|
||||
- Vor dem Umbenennen immer ein Backup erstellen!
|
||||
- Bei Problemen: BENUTZERHANDBUCH.md lesen
|
||||
|
||||
|
||||
SUPPORT:
|
||||
--------
|
||||
Bei Fragen wenden Sie sich an die IT-Abteilung.
|
||||
|
||||
|
||||
=====================================================
|
||||
Version 4.1 | Januar 2026
|
||||
=====================================================
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
PointCab Renamer - Lizenzvereinbarung
|
||||
=====================================
|
||||
|
||||
Copyright (c) 2026 - Alle Rechte vorbehalten
|
||||
|
||||
NUTZUNGSBEDINGUNGEN:
|
||||
|
||||
1. INTERNE NUTZUNG
|
||||
Diese Software ist ausschließlich für den internen Gebrauch
|
||||
innerhalb des Unternehmens bestimmt.
|
||||
|
||||
2. WEITERGABE
|
||||
Die Weitergabe an Dritte außerhalb des Unternehmens ist
|
||||
ohne ausdrückliche schriftliche Genehmigung untersagt.
|
||||
|
||||
3. VERÄNDERUNGEN
|
||||
Änderungen am Quellcode sind nur mit Rücksprache mit der
|
||||
IT-Abteilung gestattet.
|
||||
|
||||
4. GEWÄHRLEISTUNG
|
||||
Die Software wird "wie besehen" ohne jegliche Gewährleistung
|
||||
bereitgestellt. Der Autor haftet nicht für Schäden, die durch
|
||||
die Nutzung dieser Software entstehen könnten.
|
||||
|
||||
5. SUPPORT
|
||||
Bei Fragen oder Problemen wenden Sie sich bitte an die
|
||||
IT-Abteilung.
|
||||
|
||||
---
|
||||
|
||||
Diese Lizenz gilt für alle Versionen der Software, sofern
|
||||
nicht anders angegeben.
|
||||
|
|
@ -0,0 +1,276 @@
|
|||
# PointCab Projekt Umbenenner v4.1.1
|
||||
|
||||
Ein GUI-Tool zum Umbenennen von Scans in PointCab-Projekten und zum Zusammenführen mehrerer Projekte.
|
||||
|
||||
## Funktionen
|
||||
|
||||
### 1. 📁 Einzelprojekt bearbeiten
|
||||
- Einzelnes PointCab-Projekt auswählen und Scans umbenennen
|
||||
- Vollständige Scan-Namen: `1.lsd → Projektname_01.lsd`
|
||||
- Clustername-Bereinigung über Konfigurationsdatei
|
||||
- Automatisches Backup der LSDX-Datei
|
||||
|
||||
### 2. 📂 Batch Renamer
|
||||
- Mehrere Projekte in einem Verzeichnis automatisch verarbeiten
|
||||
- Fortschrittsanzeige und detailliertes Logging
|
||||
- Fehlertoleranz: Bei Fehler wird mit nächstem Projekt fortgefahren
|
||||
|
||||
### 3. 🔀 Projektmerger (verbessert in v4.1)
|
||||
- Mehrere PointCab-Projekte in ein Stammprojekt zusammenführen
|
||||
- Zwei Modi: Einzelprojekt oder Batch-Merge
|
||||
- **NEU**: Intelligente Cluster-Duplikat-Erkennung
|
||||
- Intelligente Namenskonflikt-Behandlung
|
||||
- Vollständige LSDX-Zusammenführung mit detailliertem Logging
|
||||
|
||||
## Installation
|
||||
|
||||
### Voraussetzungen
|
||||
- Python 3.8 oder höher
|
||||
- Tkinter (normalerweise in Python enthalten)
|
||||
|
||||
### Ausführen
|
||||
```bash
|
||||
python pointcab_renamer.py
|
||||
```
|
||||
|
||||
## Projektmerger - Detaillierte Dokumentation
|
||||
|
||||
### Konzept
|
||||
Der Projektmerger ermöglicht das Zusammenführen mehrerer PointCab-Projekte in ein einzelnes Stammprojekt. Dies ist nützlich wenn:
|
||||
- Mehrere Scan-Sessions zu einem Projekt gehören
|
||||
- Projekte nachträglich zusammengeführt werden sollen
|
||||
- Daten aus verschiedenen Quellen konsolidiert werden müssen
|
||||
|
||||
### Modi
|
||||
|
||||
#### Einzelprojekt hinzufügen
|
||||
1. Stammprojekt (Ziel) auswählen
|
||||
2. Ein einzelnes Quellprojekt auswählen
|
||||
3. Vorschau anzeigen
|
||||
4. Merge durchführen
|
||||
|
||||
#### Batch-Merge
|
||||
1. Stammprojekt (Ziel) auswählen
|
||||
2. Hauptverzeichnis mit mehreren Quellprojekten auswählen
|
||||
3. Alle gefundenen Projekte werden automatisch erkannt
|
||||
4. Vorschau anzeigen
|
||||
5. Merge durchführen
|
||||
|
||||
### Merge-Operationen
|
||||
|
||||
Der Projektmerger führt folgende Operationen durch:
|
||||
|
||||
1. **Backup erstellen**
|
||||
- Vor dem Merge wird ein Backup der Stammprojekt-LSDX erstellt
|
||||
- Format: `projektname.lsdx.backup_YYYYMMDD_HHMMSS`
|
||||
|
||||
2. **LSD-Dateien kopieren**
|
||||
- Alle LSD-Dateien aus den Quellprojekten werden in das Stammprojekt kopiert
|
||||
- Bei Namenskonflikten: Automatische Umbenennung (siehe unten)
|
||||
|
||||
3. **PNG-Dateien kopieren**
|
||||
- Alle Preview-Bilder werden in den Previews-Ordner des Stammprojekts kopiert
|
||||
- Bei Namenskonflikten: Automatische Umbenennung
|
||||
|
||||
4. **LSDX zusammenführen**
|
||||
- **Cluster-Duplikat-Erkennung** (NEU in v4.1):
|
||||
- Prüft ob Cluster mit gleichem Namen bereits existiert
|
||||
- Bei Duplikat: Scans werden dem existierenden Cluster zugeordnet
|
||||
- Bei neuem Cluster: Neuer Cluster wird mit neuer UUID hinzugefügt
|
||||
- Alle Scan-Elemente werden mit korrekten Parent-Referenzen eingefügt
|
||||
- UUIDs werden neu generiert um Konflikte zu vermeiden
|
||||
- FilePath-Referenzen werden bei Umbenennung angepasst
|
||||
- Detailliertes Logging aller Operationen
|
||||
|
||||
### Namenskonflikt-Behandlung
|
||||
|
||||
Wenn eine Datei im Zielordner bereits existiert:
|
||||
|
||||
```
|
||||
Vor Merge:
|
||||
Stammprojekt/PointCloud/scan_01.lsd (existiert)
|
||||
Quellprojekt/PointCloud/scan_01.lsd (zu mergen)
|
||||
|
||||
Nach Merge:
|
||||
Stammprojekt/PointCloud/scan_01.lsd (original)
|
||||
Stammprojekt/PointCloud/scan_01_merged_1.lsd (aus Quellprojekt)
|
||||
```
|
||||
|
||||
Die LSDX-Referenzen werden automatisch aktualisiert:
|
||||
```xml
|
||||
<!-- Vorher -->
|
||||
<FilePath type="lsd">scan_01.lsd</FilePath>
|
||||
|
||||
<!-- Nachher (für gemergtes Element) -->
|
||||
<FilePath type="lsd">scan_01_merged_1.lsd</FilePath>
|
||||
```
|
||||
|
||||
### Beispiel: Einzelprojekt-Merge
|
||||
|
||||
```
|
||||
Vorher:
|
||||
├── Stammprojekt/
|
||||
│ ├── Stammprojekt_PointCloud/
|
||||
│ │ ├── Stammprojekt.lsdx
|
||||
│ │ ├── 1.lsd
|
||||
│ │ ├── 2.lsd
|
||||
│ │ └── Previews/
|
||||
│ │ ├── 1.png
|
||||
│ │ └── 2.png
|
||||
|
||||
├── Quellprojekt/
|
||||
│ ├── Quellprojekt_PointCloud/
|
||||
│ │ ├── Quellprojekt.lsdx
|
||||
│ │ ├── 1.lsd
|
||||
│ │ ├── 2.lsd
|
||||
│ │ └── Previews/
|
||||
│ │ ├── 1.png
|
||||
│ │ └── 2.png
|
||||
|
||||
Nachher:
|
||||
├── Stammprojekt/
|
||||
│ ├── Stammprojekt_PointCloud/
|
||||
│ │ ├── Stammprojekt.lsdx (zusammengeführt)
|
||||
│ │ ├── Stammprojekt.lsdx.backup_20260114_101500
|
||||
│ │ ├── 1.lsd
|
||||
│ │ ├── 2.lsd
|
||||
│ │ ├── 1_merged_1.lsd (aus Quellprojekt)
|
||||
│ │ ├── 2_merged_2.lsd (aus Quellprojekt)
|
||||
│ │ └── Previews/
|
||||
│ │ ├── 1.png
|
||||
│ │ ├── 2.png
|
||||
│ │ ├── 1_merged_1.png
|
||||
│ │ └── 2_merged_2.png
|
||||
│ └── merge_20260114_101500.log
|
||||
```
|
||||
|
||||
### Beispiel: Batch-Merge
|
||||
|
||||
```
|
||||
Vorher:
|
||||
├── Hauptverzeichnis/
|
||||
│ ├── Stammprojekt/
|
||||
│ │ └── Stammprojekt_PointCloud/
|
||||
│ │ ├── Stammprojekt.lsdx
|
||||
│ │ └── (Scans 1-5)
|
||||
│ ├── Projekt_A/
|
||||
│ │ └── Projekt_A_PointCloud/
|
||||
│ │ ├── Projekt_A.lsdx
|
||||
│ │ └── (Scans 1-3)
|
||||
│ └── Projekt_B/
|
||||
│ └── Projekt_B_PointCloud/
|
||||
│ ├── Projekt_B.lsdx
|
||||
│ └── (Scans 1-4)
|
||||
|
||||
Nach Batch-Merge (Stammprojekt als Ziel, Hauptverzeichnis als Quelle):
|
||||
├── Stammprojekt/
|
||||
│ └── Stammprojekt_PointCloud/
|
||||
│ ├── Stammprojekt.lsdx (enthält jetzt 12 Scans)
|
||||
│ ├── Stammprojekt.lsdx.backup_...
|
||||
│ └── (alle LSD/PNG-Dateien)
|
||||
│ └── merge_....log
|
||||
```
|
||||
|
||||
### Logging
|
||||
|
||||
Jeder Merge-Vorgang erstellt eine detaillierte Log-Datei:
|
||||
|
||||
- **Einzelprojekt-Merge**: `merge_YYYYMMDD_HHMMSS.log` im Stammprojekt-Verzeichnis
|
||||
- **Batch-Merge**: Eine Log-Datei pro Merge-Vorgang
|
||||
|
||||
Log-Inhalt:
|
||||
- Alle kopierten Dateien
|
||||
- Umbenennungen bei Konflikten
|
||||
- Aktualisierte LSDX-Referenzen
|
||||
- Fehler und Warnungen
|
||||
|
||||
### Fehlerbehandlung
|
||||
|
||||
- **Fehlende Dateien**: Werden übersprungen, Warnung im Log
|
||||
- **Batch-Merge bei Fehler**: Verarbeitung wird mit nächstem Projekt fortgesetzt
|
||||
- **LSDX-Parsing-Fehler**: Projekt wird übersprungen
|
||||
- **Backup**: Immer vor Änderungen erstellt
|
||||
|
||||
## Konfiguration
|
||||
|
||||
### cluster_cleanup.txt
|
||||
Strings die aus dem Clusternamen entfernt werden:
|
||||
```
|
||||
_re
|
||||
_li
|
||||
_mi
|
||||
# Kommentare mit # beginnen
|
||||
```
|
||||
|
||||
## Executable erstellen
|
||||
|
||||
### Windows (auf Windows)
|
||||
```bash
|
||||
pip install pyinstaller
|
||||
pyinstaller --onefile --windowed pointcab_renamer.py
|
||||
```
|
||||
|
||||
### Linux
|
||||
```bash
|
||||
./build_linux.sh
|
||||
```
|
||||
|
||||
### Cross-Compilation: Windows .exe unter Linux
|
||||
Es ist möglich, eine Windows .exe unter Linux zu erstellen. Dazu stehen zwei Methoden zur Verfügung:
|
||||
|
||||
```bash
|
||||
# Methode 1: Docker (empfohlen)
|
||||
./build_windows_on_linux.sh
|
||||
|
||||
# Methode 2: Wine (Fallback)
|
||||
./build_windows_wine.sh
|
||||
```
|
||||
|
||||
Die Docker-Methode ist zuverlässiger und wird empfohlen. Für Details siehe [DEPLOYMENT.md](DEPLOYMENT.md).
|
||||
|
||||
**Wichtig:** Die `cluster_cleanup.txt` muss neben der .exe-Datei liegen.
|
||||
|
||||
## Changelog
|
||||
|
||||
### v4.1.1 (2026-01-14)
|
||||
- **NEU**: Cross-Compilation-Unterstützung für Windows .exe unter Linux
|
||||
- Docker-basiertes Build-Skript (`build_windows_on_linux.sh`)
|
||||
- Wine-basiertes Fallback-Skript (`build_windows_wine.sh`)
|
||||
- GitHub Actions Beispiel-Workflow
|
||||
- Erweiterte DEPLOYMENT.md-Dokumentation
|
||||
|
||||
### v4.1 (2026-01-14)
|
||||
- **FIX**: Projektmerger LSDX-Zusammenführung komplett überarbeitet
|
||||
- Cluster-Duplikat-Erkennung: Verhindert doppelte Cluster bei gleichem Namen
|
||||
- Scans werden korrekt dem existierenden oder neuen Cluster zugeordnet
|
||||
- Parent-Referenzen werden jetzt korrekt gesetzt (Cluster→Registration, Scan→Cluster)
|
||||
- Detailliertes Logging aller Merge-Operationen
|
||||
- Finale Scan/Cluster-Statistik nach Merge
|
||||
- LSDX-Struktur im Code dokumentiert
|
||||
|
||||
### v4.0 (2026-01-14)
|
||||
- **NEU**: Projektmerger-Funktion
|
||||
- Einzelprojekt- und Batch-Merge-Modi
|
||||
- Intelligente Namenskonflikt-Behandlung
|
||||
- Automatische UUID-Neugenerierung
|
||||
- Vollständige LSDX-Zusammenführung
|
||||
- Hauptmenü auf 3 Optionen erweitert
|
||||
- Verbesserte Fehlerbehandlung
|
||||
|
||||
### v3.1 (2026-01-14)
|
||||
- Full-Scan-Name-Pattern: `1.lsd → Projektname_01.lsd`
|
||||
- Konsistente Benennung in Dateien und LSDX
|
||||
|
||||
### v3.0 (2026-01-14)
|
||||
- Batch Renamer hinzugefügt
|
||||
- Hauptmenü für Modus-Auswahl
|
||||
|
||||
### v2.0 (2026-01-14)
|
||||
- Clustername-Bereinigung via Konfigurationsdatei
|
||||
|
||||
### v1.0 (2026-01-14)
|
||||
- Initiale Version
|
||||
|
||||
## Lizenz
|
||||
|
||||
MIT License
|
||||
|
|
@ -0,0 +1 @@
|
|||
4.2.1
|
||||
|
|
@ -0,0 +1,160 @@
|
|||
#!/bin/bash
|
||||
# ============================================
|
||||
# PointCab Renamer - Linux Build Script
|
||||
# Version 4.2.1
|
||||
# ============================================
|
||||
|
||||
set -e # Bei Fehlern abbrechen
|
||||
|
||||
echo ""
|
||||
echo "==================================="
|
||||
echo " PointCab Renamer - Linux Build"
|
||||
echo " Version 4.2.1"
|
||||
echo "==================================="
|
||||
echo ""
|
||||
|
||||
# Farben für Ausgabe
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Arbeitsverzeichnis
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
cd "$SCRIPT_DIR"
|
||||
|
||||
echo -e "${BLUE}[1/6] Prüfe Voraussetzungen...${NC}"
|
||||
|
||||
# Prüfe ob Python3 installiert ist
|
||||
if ! command -v python3 &> /dev/null; then
|
||||
echo -e "${RED}[FEHLER] Python3 ist nicht installiert.${NC}"
|
||||
echo ""
|
||||
echo "Installation:"
|
||||
echo " Ubuntu/Debian: sudo apt install python3 python3-pip python3-tk"
|
||||
echo " Fedora: sudo dnf install python3 python3-pip python3-tkinter"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
PYTHON_VERSION=$(python3 --version 2>&1)
|
||||
echo -e "${GREEN}✓ Python3 gefunden: $PYTHON_VERSION${NC}"
|
||||
|
||||
# Prüfe ob tkinter installiert ist
|
||||
echo -e "${BLUE}[2/6] Prüfe tkinter...${NC}"
|
||||
if ! python3 -c "import tkinter" 2>/dev/null; then
|
||||
echo -e "${YELLOW}[WARNUNG] tkinter nicht gefunden.${NC}"
|
||||
echo ""
|
||||
echo "Installation von tkinter:"
|
||||
echo " Ubuntu/Debian: sudo apt install python3-tk"
|
||||
echo " Fedora: sudo dnf install python3-tkinter"
|
||||
echo ""
|
||||
|
||||
# Versuche automatische Installation (nur wenn sudo verfügbar)
|
||||
if command -v apt &> /dev/null && [ -w /etc/apt ]; then
|
||||
echo "Versuche automatische Installation..."
|
||||
sudo apt install -y python3-tk || {
|
||||
echo -e "${RED}[FEHLER] Automatische Installation fehlgeschlagen.${NC}"
|
||||
echo "Bitte manuell installieren: sudo apt install python3-tk"
|
||||
exit 1
|
||||
}
|
||||
else
|
||||
echo -e "${RED}[FEHLER] tkinter muss manuell installiert werden.${NC}"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
echo -e "${GREEN}✓ tkinter verfügbar${NC}"
|
||||
|
||||
# Prüfe ob pip installiert ist
|
||||
echo -e "${BLUE}[3/6] Prüfe pip...${NC}"
|
||||
if ! command -v pip3 &> /dev/null && ! python3 -m pip --version &> /dev/null; then
|
||||
echo -e "${YELLOW}[INFO] pip3 nicht gefunden.${NC}"
|
||||
echo ""
|
||||
echo "Installation von pip:"
|
||||
echo " Ubuntu/Debian: sudo apt install python3-pip"
|
||||
echo " Fedora: sudo dnf install python3-pip"
|
||||
echo " Oder: python3 -m ensurepip --upgrade"
|
||||
exit 1
|
||||
fi
|
||||
echo -e "${GREEN}✓ pip verfügbar${NC}"
|
||||
|
||||
# Prüfe ob PyInstaller installiert ist
|
||||
echo -e "${BLUE}[4/6] Prüfe PyInstaller...${NC}"
|
||||
if ! python3 -m PyInstaller --version &> /dev/null 2>&1; then
|
||||
echo -e "${YELLOW}[INFO] PyInstaller nicht gefunden. Installiere...${NC}"
|
||||
python3 -m pip install --user pyinstaller || {
|
||||
echo -e "${RED}[FEHLER] PyInstaller konnte nicht installiert werden.${NC}"
|
||||
echo "Versuche: pip3 install pyinstaller"
|
||||
exit 1
|
||||
}
|
||||
fi
|
||||
PYINSTALLER_VERSION=$(python3 -m PyInstaller --version 2>&1)
|
||||
echo -e "${GREEN}✓ PyInstaller installiert: $PYINSTALLER_VERSION${NC}"
|
||||
|
||||
# Prüfe Projektdateien
|
||||
echo -e "${BLUE}[5/6] Prüfe Projektdateien...${NC}"
|
||||
if [ ! -f "pointcab_renamer.py" ]; then
|
||||
echo -e "${RED}[FEHLER] pointcab_renamer.py nicht gefunden!${NC}"
|
||||
echo "Bitte führen Sie das Skript im Projektverzeichnis aus."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -f "cluster_cleanup.txt" ]; then
|
||||
echo -e "${RED}[FEHLER] cluster_cleanup.txt nicht gefunden!${NC}"
|
||||
exit 1
|
||||
fi
|
||||
echo -e "${GREEN}✓ Projektdateien vorhanden${NC}"
|
||||
|
||||
# Lösche alte Build-Verzeichnisse
|
||||
echo ""
|
||||
echo -e "${BLUE}[6/6] Starte Build-Prozess...${NC}"
|
||||
echo "[INFO] Räume alte Build-Dateien auf..."
|
||||
rm -rf build dist *.spec 2>/dev/null || true
|
||||
|
||||
echo "[INFO] Erstelle Linux-Binary..."
|
||||
echo ""
|
||||
|
||||
# PyInstaller ausführen
|
||||
python3 -m PyInstaller \
|
||||
--onefile \
|
||||
--name "pointcab_renamer" \
|
||||
--add-data "cluster_cleanup.txt:." \
|
||||
pointcab_renamer.py
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo ""
|
||||
echo -e "${RED}[FEHLER] Build fehlgeschlagen!${NC}"
|
||||
echo ""
|
||||
echo "Mögliche Ursachen:"
|
||||
echo " - PyInstaller-Version inkompatibel"
|
||||
echo " - Fehlende Abhängigkeiten"
|
||||
echo ""
|
||||
echo "Versuche: pip3 install --upgrade pyinstaller"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo -e "${GREEN}[INFO] Build erfolgreich!${NC}"
|
||||
echo ""
|
||||
|
||||
# Kopiere notwendige Dateien in dist-Ordner
|
||||
echo "[INFO] Kopiere zusätzliche Dateien..."
|
||||
cp cluster_cleanup.txt dist/
|
||||
[ -f BENUTZERHANDBUCH.md ] && cp BENUTZERHANDBUCH.md dist/
|
||||
|
||||
# Mache das Binary ausführbar
|
||||
chmod +x dist/pointcab_renamer
|
||||
|
||||
# Zeige Ergebnis
|
||||
echo ""
|
||||
echo -e "${GREEN}===================================${NC}"
|
||||
echo -e "${GREEN} BUILD ERFOLGREICH!${NC}"
|
||||
echo -e "${GREEN}===================================${NC}"
|
||||
echo ""
|
||||
echo "Erstellte Dateien:"
|
||||
ls -lh dist/
|
||||
echo ""
|
||||
echo "Verwendung:"
|
||||
echo " cd dist && ./pointcab_renamer"
|
||||
echo ""
|
||||
echo "Für Distribution alle Dateien aus dist/ kopieren."
|
||||
echo ""
|
||||
|
|
@ -0,0 +1,119 @@
|
|||
@echo off
|
||||
REM ============================================
|
||||
REM PointCab Renamer - Windows Build Script v4.2
|
||||
REM ============================================
|
||||
REM Verwendet den Python Launcher (py) für bessere Kompatibilität
|
||||
REM
|
||||
REM Voraussetzungen:
|
||||
REM - Python 3.8+ mit py Launcher installiert
|
||||
REM - PyInstaller (wird bei Bedarf installiert)
|
||||
REM
|
||||
REM Verwendung:
|
||||
REM 1. Öffnen Sie die Eingabeaufforderung (cmd)
|
||||
REM 2. Navigieren Sie zum Projektordner
|
||||
REM 3. Führen Sie: build_windows.bat aus
|
||||
REM ============================================
|
||||
|
||||
setlocal enabledelayedexpansion
|
||||
|
||||
echo.
|
||||
echo ============================================
|
||||
echo PointCab Renamer - Windows Build v4.2
|
||||
echo ============================================
|
||||
echo.
|
||||
|
||||
REM Prüfe Python Installation
|
||||
echo [1/5] Prüfe Python Installation...
|
||||
py --version >nul 2>&1
|
||||
if errorlevel 1 (
|
||||
echo.
|
||||
echo FEHLER: Python wurde nicht gefunden!
|
||||
echo.
|
||||
echo Bitte installieren Sie Python von:
|
||||
echo https://www.python.org/downloads/
|
||||
echo.
|
||||
echo Stellen Sie sicher, dass bei der Installation
|
||||
echo "Add Python to PATH" aktiviert ist.
|
||||
echo.
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
for /f "tokens=2" %%v in ('py --version 2^>^&1') do set PYTHON_VERSION=%%v
|
||||
echo Python %PYTHON_VERSION% gefunden.
|
||||
|
||||
REM Prüfe/Installiere PyInstaller
|
||||
echo.
|
||||
echo [2/5] Prüfe PyInstaller...
|
||||
py -m PyInstaller --version >nul 2>&1
|
||||
if errorlevel 1 (
|
||||
echo PyInstaller nicht gefunden. Installiere...
|
||||
py -m pip install pyinstaller
|
||||
if errorlevel 1 (
|
||||
echo.
|
||||
echo FEHLER: PyInstaller konnte nicht installiert werden!
|
||||
echo Bitte führen Sie manuell aus:
|
||||
echo py -m pip install pyinstaller
|
||||
echo.
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
)
|
||||
for /f "tokens=*" %%v in ('py -m PyInstaller --version 2^>^&1') do set PYINSTALLER_VERSION=%%v
|
||||
echo PyInstaller %PYINSTALLER_VERSION% gefunden.
|
||||
|
||||
REM Bereinige alte Builds
|
||||
echo.
|
||||
echo [3/5] Bereinige alte Build-Dateien...
|
||||
if exist build rmdir /s /q build
|
||||
if exist dist rmdir /s /q dist
|
||||
if exist *.spec del /f /q *.spec
|
||||
echo Alte Dateien entfernt.
|
||||
|
||||
REM Erstelle Executable
|
||||
echo.
|
||||
echo [4/5] Erstelle Windows Executable...
|
||||
echo Dies kann einige Minuten dauern...
|
||||
echo.
|
||||
|
||||
py -m PyInstaller --onefile --windowed --name "PointCab_Renamer" ^
|
||||
--add-data "cluster_cleanup.txt;." ^
|
||||
--add-data "BENUTZERHANDBUCH.md;." ^
|
||||
pointcab_renamer.py
|
||||
|
||||
if errorlevel 1 (
|
||||
echo.
|
||||
echo FEHLER: Build fehlgeschlagen!
|
||||
echo Bitte prüfen Sie die Fehlermeldungen oben.
|
||||
echo.
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
REM Kopiere zusätzliche Dateien
|
||||
echo.
|
||||
echo [5/5] Kopiere zusätzliche Dateien...
|
||||
copy cluster_cleanup.txt dist\ >nul 2>&1
|
||||
copy BENUTZERHANDBUCH.md dist\ >nul 2>&1
|
||||
copy README.md dist\ >nul 2>&1
|
||||
echo Dateien kopiert.
|
||||
|
||||
REM Erfolgsmeldung
|
||||
echo.
|
||||
echo ============================================
|
||||
echo BUILD ERFOLGREICH!
|
||||
echo ============================================
|
||||
echo.
|
||||
echo Die Executable befindet sich in:
|
||||
echo dist\PointCab_Renamer.exe
|
||||
echo.
|
||||
echo Zusätzliche Dateien in dist\:
|
||||
echo - cluster_cleanup.txt
|
||||
echo - BENUTZERHANDBUCH.md
|
||||
echo - README.md
|
||||
echo.
|
||||
echo Hinweis: Die cluster_cleanup.txt muss neben
|
||||
echo der .exe Datei liegen!
|
||||
echo.
|
||||
echo ============================================
|
||||
pause
|
||||
|
|
@ -0,0 +1,278 @@
|
|||
#!/bin/bash
|
||||
# ============================================================================
|
||||
# PointCab Renamer - Windows Build unter Linux (Docker-Methode)
|
||||
# Version: 4.1.2
|
||||
# ============================================================================
|
||||
#
|
||||
# Dieses Skript erstellt eine Windows .exe unter Linux mittels Docker.
|
||||
# Es verwendet das cdrx/pyinstaller-windows Image für zuverlässige Builds.
|
||||
#
|
||||
# VORAUSSETZUNGEN:
|
||||
# - Docker muss installiert sein (wird bei Bedarf mit sudo gestartet)
|
||||
# - Internet-Verbindung für den ersten Docker-Image-Download
|
||||
#
|
||||
# VERWENDUNG:
|
||||
# ./build_windows_on_linux.sh
|
||||
#
|
||||
# TROUBLESHOOTING:
|
||||
# Falls Docker nicht startet, prüfen Sie:
|
||||
# - sudo systemctl start docker
|
||||
# - Benutzer zur docker-Gruppe hinzufügen: sudo usermod -aG docker $USER
|
||||
# - In Container-Umgebungen (z.B. Docker-in-Docker): --privileged Flag nötig
|
||||
#
|
||||
# ============================================================================
|
||||
|
||||
set -e # Bei Fehlern abbrechen
|
||||
|
||||
# Farben für Ausgabe
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Banner
|
||||
echo -e "${BLUE}"
|
||||
echo "============================================================================"
|
||||
echo " PointCab Renamer - Windows Cross-Compilation unter Linux"
|
||||
echo " Version 4.1.2"
|
||||
echo "============================================================================"
|
||||
echo -e "${NC}"
|
||||
|
||||
# Hilfsfunktion: Docker-Befehl mit oder ohne sudo
|
||||
docker_cmd() {
|
||||
if docker "$@" 2>/dev/null; then
|
||||
return 0
|
||||
elif sudo docker "$@" 2>/dev/null; then
|
||||
USE_SUDO=1
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
run_docker() {
|
||||
if [ "$USE_SUDO" = "1" ]; then
|
||||
sudo docker "$@"
|
||||
else
|
||||
docker "$@"
|
||||
fi
|
||||
}
|
||||
|
||||
# [1/7] Prüfe ob Docker installiert ist
|
||||
echo -e "${YELLOW}[1/7] Prüfe Docker-Installation...${NC}"
|
||||
if ! command -v docker &> /dev/null; then
|
||||
echo -e "${RED}FEHLER: Docker ist nicht installiert!${NC}"
|
||||
echo ""
|
||||
echo "Installiere Docker mit:"
|
||||
echo " Ubuntu/Debian:"
|
||||
echo " sudo apt update"
|
||||
echo " sudo apt install docker.io"
|
||||
echo " sudo systemctl start docker"
|
||||
echo " sudo systemctl enable docker"
|
||||
echo " sudo usermod -aG docker \$USER"
|
||||
echo " # Danach neu einloggen oder: newgrp docker"
|
||||
echo ""
|
||||
echo " Fedora/RHEL:"
|
||||
echo " sudo dnf install docker"
|
||||
echo " sudo systemctl start docker"
|
||||
echo ""
|
||||
echo "Alternativ: Verwende ./build_windows_wine.sh (Wine-basiert)"
|
||||
exit 1
|
||||
fi
|
||||
echo -e "${GREEN}✓ Docker ist installiert${NC}"
|
||||
|
||||
# [2/7] Prüfe ob Docker-Daemon läuft, versuche Start mit sudo falls nötig
|
||||
echo -e "${YELLOW}[2/7] Prüfe Docker-Daemon...${NC}"
|
||||
USE_SUDO=0
|
||||
|
||||
if docker info &> /dev/null; then
|
||||
echo -e "${GREEN}✓ Docker-Daemon läuft (ohne sudo)${NC}"
|
||||
elif sudo docker info &> /dev/null; then
|
||||
USE_SUDO=1
|
||||
echo -e "${GREEN}✓ Docker-Daemon läuft (mit sudo)${NC}"
|
||||
else
|
||||
# Versuche Docker zu starten
|
||||
echo -e "${YELLOW}Docker-Daemon läuft nicht. Versuche zu starten...${NC}"
|
||||
|
||||
# Versuche systemd
|
||||
if command -v systemctl &> /dev/null; then
|
||||
sudo systemctl start docker 2>/dev/null && sleep 2
|
||||
fi
|
||||
|
||||
# Prüfe erneut
|
||||
if docker info &> /dev/null; then
|
||||
echo -e "${GREEN}✓ Docker-Daemon erfolgreich gestartet${NC}"
|
||||
elif sudo docker info &> /dev/null; then
|
||||
USE_SUDO=1
|
||||
echo -e "${GREEN}✓ Docker-Daemon erfolgreich gestartet (mit sudo)${NC}"
|
||||
else
|
||||
echo -e "${RED}FEHLER: Docker-Daemon konnte nicht gestartet werden!${NC}"
|
||||
echo ""
|
||||
echo "Mögliche Ursachen und Lösungen:"
|
||||
echo ""
|
||||
echo "1. Docker-Service nicht gestartet:"
|
||||
echo " sudo systemctl start docker"
|
||||
echo ""
|
||||
echo "2. Berechtigungsproblem:"
|
||||
echo " sudo usermod -aG docker \$USER"
|
||||
echo " # Dann neu einloggen"
|
||||
echo ""
|
||||
echo "3. In Container-Umgebung (Docker-in-Docker):"
|
||||
echo " Docker kann nicht in unprivilegierten Containern laufen."
|
||||
echo " Nutze stattdessen: ./build_windows_wine.sh"
|
||||
echo " Oder: Baue auf einem System mit nativem Docker."
|
||||
echo ""
|
||||
echo "4. WSL2 unter Windows:"
|
||||
echo " Starte Docker Desktop und aktiviere WSL2-Integration."
|
||||
echo ""
|
||||
echo "Alternative Build-Methoden:"
|
||||
echo " - ./build_windows_wine.sh (Wine-basiert)"
|
||||
echo " - GitHub Actions (siehe .github/workflows/)"
|
||||
echo " - Natives Windows: build_windows.bat"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# Arbeitsverzeichnis
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
cd "$SCRIPT_DIR"
|
||||
|
||||
# [3/7] Prüfe ob notwendige Dateien existieren
|
||||
echo -e "${YELLOW}[3/7] Prüfe Projektdateien...${NC}"
|
||||
if [ ! -f "pointcab_renamer.py" ]; then
|
||||
echo -e "${RED}FEHLER: pointcab_renamer.py nicht gefunden!${NC}"
|
||||
echo "Stelle sicher, dass du dich im richtigen Verzeichnis befindest."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -f "cluster_cleanup.txt" ]; then
|
||||
echo -e "${RED}FEHLER: cluster_cleanup.txt nicht gefunden!${NC}"
|
||||
exit 1
|
||||
fi
|
||||
echo -e "${GREEN}✓ Alle Projektdateien vorhanden${NC}"
|
||||
|
||||
# [4/7] Aufräumen
|
||||
echo -e "${YELLOW}[4/7] Räume alte Build-Artefakte auf...${NC}"
|
||||
rm -rf build/ dist/ *.spec 2>/dev/null || true
|
||||
mkdir -p dist
|
||||
echo -e "${GREEN}✓ Build-Verzeichnisse bereinigt${NC}"
|
||||
|
||||
# Docker Image
|
||||
DOCKER_IMAGE="cdrx/pyinstaller-windows:python3"
|
||||
|
||||
# [5/7] Prüfe/Lade Docker Image
|
||||
echo -e "${YELLOW}[5/7] Prüfe Docker Image...${NC}"
|
||||
echo " Image: $DOCKER_IMAGE"
|
||||
echo " (Beim ersten Mal wird ~1.5 GB heruntergeladen)"
|
||||
|
||||
if ! run_docker image inspect "$DOCKER_IMAGE" &> /dev/null; then
|
||||
echo ""
|
||||
echo "Lade Docker Image herunter..."
|
||||
run_docker pull "$DOCKER_IMAGE"
|
||||
fi
|
||||
echo -e "${GREEN}✓ Docker Image bereit${NC}"
|
||||
|
||||
# [6/7] Build durchführen
|
||||
echo -e "${YELLOW}[6/7] Erstelle Windows .exe mit PyInstaller...${NC}"
|
||||
echo " Dies kann 2-5 Minuten dauern..."
|
||||
echo ""
|
||||
|
||||
# Erstelle temporäres Build-Skript für Docker-Container
|
||||
BUILD_SCRIPT=$(mktemp)
|
||||
cat > "$BUILD_SCRIPT" << 'DOCKERSCRIPT'
|
||||
#!/bin/bash
|
||||
set -e
|
||||
cd /src
|
||||
|
||||
echo "=== Docker Container gestartet ==="
|
||||
echo "Python-Version: $(python --version)"
|
||||
echo "PyInstaller-Version: $(pip show pyinstaller | grep Version)"
|
||||
echo ""
|
||||
|
||||
# Installiere requirements falls vorhanden
|
||||
if [ -f "requirements.txt" ]; then
|
||||
echo "Installiere requirements..."
|
||||
pip install -r requirements.txt --quiet
|
||||
fi
|
||||
|
||||
echo "Starte PyInstaller Build..."
|
||||
|
||||
# PyInstaller Build
|
||||
pyinstaller --onefile \
|
||||
--windowed \
|
||||
--name "PointCab_Renamer" \
|
||||
--add-data "cluster_cleanup.txt;." \
|
||||
--add-data "BENUTZERHANDBUCH.md;." \
|
||||
--icon="NONE" \
|
||||
--clean \
|
||||
pointcab_renamer.py
|
||||
|
||||
echo ""
|
||||
echo "=== Build im Container abgeschlossen ==="
|
||||
DOCKERSCRIPT
|
||||
|
||||
chmod +x "$BUILD_SCRIPT"
|
||||
|
||||
# Docker Container ausführen
|
||||
if [ "$USE_SUDO" = "1" ]; then
|
||||
sudo docker run --rm \
|
||||
-v "$SCRIPT_DIR":/src \
|
||||
-v "$BUILD_SCRIPT":/docker_build.sh:ro \
|
||||
"$DOCKER_IMAGE" \
|
||||
bash /docker_build.sh
|
||||
else
|
||||
docker run --rm \
|
||||
-v "$SCRIPT_DIR":/src \
|
||||
-v "$BUILD_SCRIPT":/docker_build.sh:ro \
|
||||
"$DOCKER_IMAGE" \
|
||||
bash /docker_build.sh
|
||||
fi
|
||||
|
||||
# Aufräumen
|
||||
rm -f "$BUILD_SCRIPT"
|
||||
|
||||
# [7/7] Prüfe Ergebnis
|
||||
echo ""
|
||||
echo -e "${YELLOW}[7/7] Verifiziere Build-Ergebnis...${NC}"
|
||||
|
||||
if [ -f "dist/PointCab_Renamer.exe" ]; then
|
||||
echo -e "${GREEN}✓ Windows .exe erfolgreich erstellt!${NC}"
|
||||
|
||||
# Kopiere zusätzliche Dateien
|
||||
cp cluster_cleanup.txt dist/
|
||||
[ -f "BENUTZERHANDBUCH.md" ] && cp BENUTZERHANDBUCH.md dist/
|
||||
[ -f "BENUTZERHANDBUCH.pdf" ] && cp BENUTZERHANDBUCH.pdf dist/
|
||||
[ -f "README.md" ] && cp README.md dist/
|
||||
[ -f "LICENSE.txt" ] && cp LICENSE.txt dist/
|
||||
|
||||
# Zeige Ergebnis
|
||||
echo ""
|
||||
echo -e "${BLUE}============================================================================${NC}"
|
||||
echo -e "${GREEN}BUILD ERFOLGREICH!${NC}"
|
||||
echo -e "${BLUE}============================================================================${NC}"
|
||||
echo ""
|
||||
echo "Erstellte Dateien in dist/:"
|
||||
ls -lh dist/
|
||||
echo ""
|
||||
EXE_SIZE=$(du -h "dist/PointCab_Renamer.exe" | cut -f1)
|
||||
echo "Executable-Größe: $EXE_SIZE"
|
||||
echo ""
|
||||
echo "Pfad: $SCRIPT_DIR/dist/"
|
||||
echo ""
|
||||
echo -e "${YELLOW}WICHTIG:${NC}"
|
||||
echo " 1. Teste die .exe auf einem echten Windows-System!"
|
||||
echo " 2. Stelle sicher, dass cluster_cleanup.txt im gleichen"
|
||||
echo " Ordner wie die .exe liegt."
|
||||
echo ""
|
||||
else
|
||||
echo -e "${RED}FEHLER: Build fehlgeschlagen!${NC}"
|
||||
echo ""
|
||||
echo "Die Datei dist/PointCab_Renamer.exe wurde nicht erstellt."
|
||||
echo ""
|
||||
echo "Prüfe die Fehlermeldungen oben und versuche:"
|
||||
echo " 1. ./build_windows_wine.sh (Wine-Alternative)"
|
||||
echo " 2. Build auf nativem Windows mit build_windows.bat"
|
||||
echo ""
|
||||
exit 1
|
||||
fi
|
||||
|
|
@ -0,0 +1,274 @@
|
|||
#!/bin/bash
|
||||
# ============================================================================
|
||||
# PointCab Renamer - Windows Build unter Linux (Wine-Methode)
|
||||
# Version: 4.2.1
|
||||
# ============================================================================
|
||||
#
|
||||
# WICHTIG: Wine-basierte Builds sind EXPERIMENTELL und können fehlschlagen!
|
||||
#
|
||||
# BEKANNTE EINSCHRÄNKUNGEN:
|
||||
# - Headless Server (ohne GUI): Python-Installation kann fehlschlagen
|
||||
# - Manche Wine-Versionen haben Kompatibilitätsprobleme
|
||||
# - GUI-basierte Python-Installer benötigen X11/Display
|
||||
#
|
||||
# EMPFOHLENE ALTERNATIVEN:
|
||||
# 1. Windows-PC: build_windows.bat direkt ausführen
|
||||
# 2. GitHub Actions: CI/CD für automatisierte Builds
|
||||
# 3. Dual-Boot/VM: Windows-Build in echter Windows-Umgebung
|
||||
#
|
||||
# ============================================================================
|
||||
|
||||
# Farben für Ausgabe
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Konfiguration
|
||||
PYTHON_VERSION="3.10.11"
|
||||
PYTHON_INSTALLER="python-${PYTHON_VERSION}-amd64.exe"
|
||||
PYTHON_URL="https://www.python.org/ftp/python/${PYTHON_VERSION}/${PYTHON_INSTALLER}"
|
||||
WINE_PREFIX="$HOME/.wine_python"
|
||||
|
||||
# Banner
|
||||
echo -e "${BLUE}"
|
||||
echo "============================================================================"
|
||||
echo " PointCab Renamer - Windows Cross-Compilation (Wine-Methode)"
|
||||
echo " Version 4.2.1 - EXPERIMENTELL"
|
||||
echo "============================================================================"
|
||||
echo -e "${NC}"
|
||||
|
||||
echo -e "${YELLOW}╔════════════════════════════════════════════════════════════════════╗${NC}"
|
||||
echo -e "${YELLOW}║ WARNUNG: Diese Methode ist EXPERIMENTELL und kann fehlschlagen! ║${NC}"
|
||||
echo -e "${YELLOW}╚════════════════════════════════════════════════════════════════════╝${NC}"
|
||||
echo ""
|
||||
echo "Bekannte Probleme:"
|
||||
echo " • Headless Server ohne X11: Python-Installer kann hängen"
|
||||
echo " • Wine-Kompatibilität variiert je nach Version"
|
||||
echo " • ~500MB Download und 10+ Minuten Installationszeit"
|
||||
echo ""
|
||||
echo "Empfohlene Alternativen:"
|
||||
echo " 1. Windows-PC: build_windows.bat ausführen"
|
||||
echo " 2. GitHub Actions: Automatisierte CI/CD Builds"
|
||||
echo ""
|
||||
read -p "Trotzdem fortfahren? (j/N): " -n 1 -r
|
||||
echo
|
||||
if [[ ! $REPLY =~ ^[Jj]$ ]]; then
|
||||
echo ""
|
||||
echo "Abgebrochen. Alternative Methoden:"
|
||||
echo " • Kopiere das Projekt auf einen Windows-PC"
|
||||
echo " • Führe dort build_windows.bat aus"
|
||||
exit 0
|
||||
fi
|
||||
echo ""
|
||||
|
||||
# Arbeitsverzeichnis
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
cd "$SCRIPT_DIR"
|
||||
|
||||
# Funktion für Fehlerbehandlung
|
||||
fail_with_alternatives() {
|
||||
echo ""
|
||||
echo -e "${RED}╔════════════════════════════════════════════════════════════════════╗${NC}"
|
||||
echo -e "${RED}║ BUILD FEHLGESCHLAGEN ║${NC}"
|
||||
echo -e "${RED}╚════════════════════════════════════════════════════════════════════╝${NC}"
|
||||
echo ""
|
||||
echo -e "${YELLOW}Alternative Methoden:${NC}"
|
||||
echo ""
|
||||
echo " 1. ${GREEN}Windows-PC (EMPFOHLEN):${NC}"
|
||||
echo " - Kopiere das gesamte Projektverzeichnis"
|
||||
echo " - Führe build_windows.bat aus"
|
||||
echo ""
|
||||
echo " 2. ${GREEN}GitHub Actions:${NC}"
|
||||
echo " - Push zu GitHub mit Actions Workflow"
|
||||
echo " - Automatisierter Windows-Build"
|
||||
echo ""
|
||||
echo " 3. ${GREEN}Virtual Machine:${NC}"
|
||||
echo " - Windows-VM mit VirtualBox/VMware"
|
||||
echo " - Shared Folder für Projektdateien"
|
||||
echo ""
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Prüfe Wine
|
||||
echo -e "${BLUE}[1/7] Prüfe Wine-Installation...${NC}"
|
||||
if ! command -v wine &> /dev/null; then
|
||||
echo -e "${RED}FEHLER: Wine ist nicht installiert!${NC}"
|
||||
echo ""
|
||||
echo "Installation auf Ubuntu/Debian:"
|
||||
echo " sudo dpkg --add-architecture i386"
|
||||
echo " sudo apt update"
|
||||
echo " sudo apt install wine64 wine32"
|
||||
echo ""
|
||||
echo "Installation auf Fedora:"
|
||||
echo " sudo dnf install wine"
|
||||
echo ""
|
||||
fail_with_alternatives
|
||||
fi
|
||||
|
||||
WINE_VERSION=$(wine --version 2>/dev/null || echo "unknown")
|
||||
echo -e "${GREEN}✓ Wine installiert: $WINE_VERSION${NC}"
|
||||
|
||||
# Prüfe auf Display (wichtig für GUI-Installer)
|
||||
echo -e "${BLUE}[2/7] Prüfe Display-Umgebung...${NC}"
|
||||
if [ -z "$DISPLAY" ]; then
|
||||
echo -e "${YELLOW}⚠ Kein DISPLAY gesetzt - Headless-Modus erkannt${NC}"
|
||||
echo ""
|
||||
echo "Python-Installer benötigt möglicherweise X11/GUI."
|
||||
echo "Dies kann in Headless-Umgebungen fehlschlagen."
|
||||
echo ""
|
||||
echo "Optionen:"
|
||||
echo " • Virtuelles Display mit Xvfb (experimentell)"
|
||||
echo " • X11 Forwarding bei SSH (-X Option)"
|
||||
echo " • Desktop-Umgebung verwenden"
|
||||
echo ""
|
||||
|
||||
# Versuche Xvfb falls verfügbar
|
||||
if command -v Xvfb &> /dev/null; then
|
||||
echo "Xvfb gefunden - starte virtuelles Display..."
|
||||
Xvfb :99 -screen 0 1024x768x24 &
|
||||
XVFB_PID=$!
|
||||
export DISPLAY=:99
|
||||
sleep 2
|
||||
echo -e "${GREEN}✓ Virtuelles Display gestartet (:99)${NC}"
|
||||
else
|
||||
echo -e "${YELLOW}Xvfb nicht installiert. Versuche ohne Display...${NC}"
|
||||
echo " Installation: sudo apt install xvfb"
|
||||
fi
|
||||
else
|
||||
echo -e "${GREEN}✓ Display vorhanden: $DISPLAY${NC}"
|
||||
fi
|
||||
|
||||
# Prüfe Projektdateien
|
||||
echo -e "${BLUE}[3/7] Prüfe Projektdateien...${NC}"
|
||||
if [ ! -f "pointcab_renamer.py" ]; then
|
||||
echo -e "${RED}FEHLER: pointcab_renamer.py nicht gefunden!${NC}"
|
||||
exit 1
|
||||
fi
|
||||
if [ ! -f "cluster_cleanup.txt" ]; then
|
||||
echo -e "${RED}FEHLER: cluster_cleanup.txt nicht gefunden!${NC}"
|
||||
exit 1
|
||||
fi
|
||||
echo -e "${GREEN}✓ Projektdateien vorhanden${NC}"
|
||||
|
||||
# Wine-Prefix initialisieren
|
||||
echo -e "${BLUE}[4/7] Initialisiere Wine-Umgebung...${NC}"
|
||||
export WINEPREFIX="$WINE_PREFIX"
|
||||
export WINEARCH=win64
|
||||
export WINEDEBUG=-all # Unterdrücke Wine Debug-Meldungen
|
||||
|
||||
if [ ! -d "$WINE_PREFIX" ]; then
|
||||
echo "Erstelle Wine-Prefix unter: $WINE_PREFIX"
|
||||
echo "Dies kann einige Minuten dauern..."
|
||||
wineboot --init 2>/dev/null || true
|
||||
sleep 5
|
||||
fi
|
||||
echo -e "${GREEN}✓ Wine-Umgebung bereit${NC}"
|
||||
|
||||
# Python-Pfade in Wine
|
||||
WINE_PYTHON="$WINE_PREFIX/drive_c/Python310/python.exe"
|
||||
WINE_PIP="$WINE_PREFIX/drive_c/Python310/Scripts/pip.exe"
|
||||
WINE_PYINSTALLER="$WINE_PREFIX/drive_c/Python310/Scripts/pyinstaller.exe"
|
||||
|
||||
# Python installieren falls nicht vorhanden
|
||||
echo -e "${BLUE}[5/7] Prüfe Windows-Python...${NC}"
|
||||
if [ ! -f "$WINE_PYTHON" ]; then
|
||||
echo "Windows-Python nicht gefunden, installiere..."
|
||||
echo ""
|
||||
|
||||
# Download Python installer
|
||||
if [ ! -f "/tmp/$PYTHON_INSTALLER" ]; then
|
||||
echo "Lade Python herunter: $PYTHON_URL"
|
||||
echo "Größe: ~28MB"
|
||||
wget -q --show-progress -O "/tmp/$PYTHON_INSTALLER" "$PYTHON_URL" || {
|
||||
echo -e "${RED}FEHLER: Python-Download fehlgeschlagen!${NC}"
|
||||
fail_with_alternatives
|
||||
}
|
||||
fi
|
||||
|
||||
# Installiere Python
|
||||
echo ""
|
||||
echo "Installiere Python in Wine..."
|
||||
echo "Dies kann 5-10 Minuten dauern..."
|
||||
echo ""
|
||||
|
||||
# Silent Installation mit Timeout
|
||||
timeout 300 wine "/tmp/$PYTHON_INSTALLER" /quiet InstallAllUsers=0 PrependPath=1 Include_test=0 2>/dev/null || {
|
||||
echo -e "${YELLOW}⚠ Python-Installation möglicherweise fehlgeschlagen oder Timeout${NC}"
|
||||
}
|
||||
|
||||
sleep 5
|
||||
|
||||
# Prüfe Installation
|
||||
if [ ! -f "$WINE_PYTHON" ]; then
|
||||
echo ""
|
||||
echo -e "${RED}FEHLER: Python-Installation fehlgeschlagen!${NC}"
|
||||
echo ""
|
||||
echo "Mögliche Ursachen:"
|
||||
echo " • Headless-Umgebung ohne GUI"
|
||||
echo " • Wine-Kompatibilitätsproblem"
|
||||
echo " • Nicht genug Speicherplatz"
|
||||
echo ""
|
||||
|
||||
# Cleanup Xvfb falls gestartet
|
||||
[ -n "$XVFB_PID" ] && kill $XVFB_PID 2>/dev/null
|
||||
|
||||
fail_with_alternatives
|
||||
fi
|
||||
fi
|
||||
echo -e "${GREEN}✓ Windows-Python installiert${NC}"
|
||||
|
||||
# PyInstaller installieren
|
||||
echo -e "${BLUE}[6/7] Prüfe PyInstaller...${NC}"
|
||||
if [ ! -f "$WINE_PYINSTALLER" ]; then
|
||||
echo "Installiere PyInstaller..."
|
||||
wine "$WINE_PIP" install pyinstaller 2>/dev/null || {
|
||||
echo -e "${RED}FEHLER: PyInstaller-Installation fehlgeschlagen!${NC}"
|
||||
fail_with_alternatives
|
||||
}
|
||||
fi
|
||||
echo -e "${GREEN}✓ PyInstaller installiert${NC}"
|
||||
|
||||
# Aufräumen
|
||||
echo -e "${BLUE}[7/7] Erstelle Windows .exe...${NC}"
|
||||
rm -rf build/ dist/ *.spec 2>/dev/null || true
|
||||
|
||||
echo "Build läuft... (kann einige Minuten dauern)"
|
||||
echo ""
|
||||
|
||||
# Führe PyInstaller aus
|
||||
wine "$WINE_PYINSTALLER" \
|
||||
--onefile \
|
||||
--windowed \
|
||||
--name "PointCab_Renamer" \
|
||||
--add-data "cluster_cleanup.txt;." \
|
||||
pointcab_renamer.py 2>&1 | grep -v "^fixme:" | grep -v "^err:" || true
|
||||
|
||||
# Cleanup Xvfb falls gestartet
|
||||
[ -n "$XVFB_PID" ] && kill $XVFB_PID 2>/dev/null
|
||||
|
||||
# Prüfe Ergebnis
|
||||
echo ""
|
||||
if [ -f "dist/PointCab_Renamer.exe" ]; then
|
||||
echo -e "${GREEN}╔════════════════════════════════════════════════════════════════════╗${NC}"
|
||||
echo -e "${GREEN}║ BUILD ERFOLGREICH! ║${NC}"
|
||||
echo -e "${GREEN}╚════════════════════════════════════════════════════════════════════╝${NC}"
|
||||
|
||||
# Kopiere zusätzliche Dateien
|
||||
cp cluster_cleanup.txt dist/
|
||||
cp BENUTZERHANDBUCH.md dist/ 2>/dev/null || true
|
||||
|
||||
echo ""
|
||||
echo "Erstellte Dateien:"
|
||||
ls -lh dist/
|
||||
echo ""
|
||||
echo "Die .exe befindet sich in: $SCRIPT_DIR/dist/"
|
||||
echo ""
|
||||
echo -e "${YELLOW}WICHTIG:${NC}"
|
||||
echo " Die .exe sollte auf einem echten Windows-System"
|
||||
echo " getestet werden, bevor sie verteilt wird!"
|
||||
echo ""
|
||||
else
|
||||
fail_with_alternatives
|
||||
fi
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
# Konfigurationsdatei für Clustername-Bereinigung
|
||||
# Jede Zeile enthält einen String, der aus dem Stammverzeichnisnamen entfernt wird
|
||||
# Leerzeilen und Zeilen die mit # beginnen werden ignoriert
|
||||
#
|
||||
# Beispiel: Stammverzeichnis "Am_Upstall_4_re" wird zu Clustername "Am_Upstall_4"
|
||||
#
|
||||
_re
|
||||
_li
|
||||
_mi
|
||||
_mi-li
|
||||
_mi-re
|
||||
_part_1
|
||||
_part_2
|
||||
_part_3
|
||||
_part_4
|
||||
_part_5
|
||||
|
|
@ -0,0 +1,385 @@
|
|||
# PointCab Renamer - Benutzerhandbuch
|
||||
|
||||
**Version 4.1** | Datum: 14. Januar 2026
|
||||
|
||||
---
|
||||
|
||||
## Inhaltsverzeichnis
|
||||
|
||||
1. [Einführung](#einführung)
|
||||
2. [Installation](#installation)
|
||||
3. [Programmstart](#programmstart)
|
||||
4. [Die drei Modi](#die-drei-modi)
|
||||
- [Einzelprojekt-Modus](#einzelprojekt-modus)
|
||||
- [Batch-Modus](#batch-modus)
|
||||
- [Projekt-Merger](#projekt-merger)
|
||||
5. [Konfiguration](#konfiguration)
|
||||
6. [Troubleshooting](#troubleshooting)
|
||||
7. [FAQ](#faq)
|
||||
|
||||
---
|
||||
|
||||
## Einführung
|
||||
|
||||
### Was ist der PointCab Renamer?
|
||||
|
||||
Der **PointCab Renamer** ist ein Werkzeug zur automatischen Umbenennung von PointCab-Projektdateien. Es löst das Problem, dass PointCab-Scandateien oft kryptische Namen haben (z.B. `1.lsd`, `2.lsd`) und benennt diese nach einem einheitlichen Schema um:
|
||||
|
||||
**Format:** `[ClusterName]_[ScanName].[Erweiterung]`
|
||||
|
||||
**Beispiel:** `EG_Flur_scan001.lsd`
|
||||
|
||||
### Hauptfunktionen
|
||||
|
||||
- **Einzelprojekt-Modus**: Ein einzelnes PointCab-Projekt umbenennen
|
||||
- **Batch-Modus**: Mehrere Projekte gleichzeitig verarbeiten
|
||||
- **Projekt-Merger**: Mehrere Projekte in ein Zielprojekt zusammenführen
|
||||
- **Cluster-Bereinigung**: Automatische Entfernung von Suffixen wie `_re`, `_li` aus Clusternamen
|
||||
- **Detailliertes Logging**: Vollständige Protokollierung aller Änderungen
|
||||
|
||||
---
|
||||
|
||||
## Installation
|
||||
|
||||
### Windows
|
||||
|
||||
1. Laden Sie die Datei `pointcab_renamer.exe` herunter
|
||||
2. Speichern Sie die Datei in einem beliebigen Ordner (z.B. `C:\Tools\`)
|
||||
3. Kopieren Sie die `cluster_cleanup.txt` in denselben Ordner
|
||||
4. Starten Sie das Programm mit Doppelklick auf die `.exe`
|
||||
|
||||
### Ubuntu/Linux
|
||||
|
||||
1. Laden Sie die Datei `pointcab_renamer` herunter
|
||||
2. Speichern Sie die Datei in einem beliebigen Ordner (z.B. `/home/benutzer/tools/`)
|
||||
3. Kopieren Sie die `cluster_cleanup.txt` in denselben Ordner
|
||||
4. Machen Sie die Datei ausführbar:
|
||||
```bash
|
||||
chmod +x pointcab_renamer
|
||||
```
|
||||
5. Starten Sie das Programm:
|
||||
```bash
|
||||
./pointcab_renamer
|
||||
```
|
||||
|
||||
### Aus dem Quellcode (für Entwickler)
|
||||
|
||||
1. Stellen Sie sicher, dass Python 3.8+ installiert ist
|
||||
2. Laden Sie den Quellcode herunter
|
||||
3. Starten Sie mit:
|
||||
```bash
|
||||
python pointcab_renamer.py
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Programmstart
|
||||
|
||||
### Hauptmenü
|
||||
|
||||
Nach dem Start erscheint das Hauptmenü mit drei Optionen:
|
||||
|
||||
```
|
||||
╔═══════════════════════════════════════════╗
|
||||
║ PointCab Renamer v4.1 ║
|
||||
╠═══════════════════════════════════════════╣
|
||||
║ ║
|
||||
║ [Einzelprojekt umbenennen] ║
|
||||
║ ║
|
||||
║ [Batch-Verarbeitung] ║
|
||||
║ ║
|
||||
║ [Projekt Merger] ║
|
||||
║ ║
|
||||
╚═══════════════════════════════════════════╝
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Die drei Modi
|
||||
|
||||
### Einzelprojekt-Modus
|
||||
|
||||
**Verwendung:** Wenn Sie ein einzelnes PointCab-Projekt umbenennen möchten.
|
||||
|
||||
#### Schritt-für-Schritt-Anleitung
|
||||
|
||||
1. Klicken Sie auf **"Einzelprojekt umbenennen"**
|
||||
2. Wählen Sie die **LSDX-Projektdatei** aus (z.B. `Am_Upstall_4.lsdx`)
|
||||
3. Wählen Sie den **PointCloud-Ordner** aus (enthält die `.lsd` Dateien)
|
||||
4. Das Programm zeigt eine **Vorschau** der Änderungen:
|
||||
```
|
||||
Vorschau der Umbenennung:
|
||||
─────────────────────────
|
||||
1.lsd → EG_Flur_scan001.lsd
|
||||
2.lsd → EG_Flur_scan002.lsd
|
||||
3.lsd → OG_Bad_scan001.lsd
|
||||
...
|
||||
```
|
||||
5. Klicken Sie auf **"Umbenennen starten"**
|
||||
6. Nach Abschluss wird ein Protokoll angezeigt
|
||||
|
||||
#### Dateistruktur (Vorher → Nachher)
|
||||
|
||||
**Vorher:**
|
||||
```
|
||||
Am_Upstall_4_PointCloud/
|
||||
├── 1.lsd
|
||||
├── 2.lsd
|
||||
├── 3.lsd
|
||||
└── ...
|
||||
```
|
||||
|
||||
**Nachher:**
|
||||
```
|
||||
Am_Upstall_4_PointCloud/
|
||||
├── EG_Flur_scan001.lsd
|
||||
├── EG_Flur_scan002.lsd
|
||||
├── OG_Bad_scan001.lsd
|
||||
└── ...
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Batch-Modus
|
||||
|
||||
**Verwendung:** Wenn Sie mehrere PointCab-Projekte auf einmal verarbeiten möchten.
|
||||
|
||||
#### Schritt-für-Schritt-Anleitung
|
||||
|
||||
1. Klicken Sie auf **"Batch-Verarbeitung"**
|
||||
2. Wählen Sie den **Basisordner** aus, der alle Projekte enthält
|
||||
3. Das Programm erkennt automatisch alle PointCab-Projekte:
|
||||
```
|
||||
Gefundene Projekte:
|
||||
─────────────────────
|
||||
☑ Projekt_A (15 Scans)
|
||||
☑ Projekt_B (22 Scans)
|
||||
☑ Projekt_C (8 Scans)
|
||||
```
|
||||
4. Wählen Sie die gewünschten Projekte aus (oder behalten Sie alle ausgewählt)
|
||||
5. Klicken Sie auf **"Batch-Verarbeitung starten"**
|
||||
6. Der Fortschritt wird angezeigt:
|
||||
```
|
||||
Verarbeite Projekt 1/3: Projekt_A
|
||||
[████████████░░░░░░░░] 60%
|
||||
```
|
||||
7. Nach Abschluss wird eine Zusammenfassung angezeigt
|
||||
|
||||
#### Erwartete Ordnerstruktur
|
||||
|
||||
```
|
||||
Basisordner/
|
||||
├── Projekt_A/
|
||||
│ ├── Projekt_A.lsdx
|
||||
│ └── Projekt_A_PointCloud/
|
||||
│ ├── 1.lsd
|
||||
│ └── ...
|
||||
├── Projekt_B/
|
||||
│ ├── Projekt_B.lsdx
|
||||
│ └── Projekt_B_PointCloud/
|
||||
└── Projekt_C/
|
||||
├── Projekt_C.lsdx
|
||||
└── Projekt_C_PointCloud/
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Projekt-Merger
|
||||
|
||||
**Verwendung:** Wenn Sie mehrere PointCab-Projekte in ein einziges Projekt zusammenführen möchten.
|
||||
|
||||
#### Schritt-für-Schritt-Anleitung
|
||||
|
||||
1. Klicken Sie auf **"Projekt Merger"**
|
||||
2. Wählen Sie den **Modus**:
|
||||
- **Einzelprojekt zusammenführen**: Ein Quellprojekt → Zielprojekt
|
||||
- **Batch-Merge**: Mehrere Quellprojekte → Zielprojekt
|
||||
3. Wählen Sie das **Zielprojekt** (in das zusammengeführt wird)
|
||||
4. Wählen Sie das/die **Quellprojekt(e)**
|
||||
5. Das Programm zeigt eine **Vorschau** mit Konfliktauflösung:
|
||||
```
|
||||
Merge-Vorschau:
|
||||
─────────────────────
|
||||
Zielprojekt: Haupt_Projekt (5 Cluster, 25 Scans)
|
||||
Quellprojekt: Teil_A (2 Cluster, 10 Scans)
|
||||
|
||||
Zu übertragende Dateien:
|
||||
- EG_Flur_scan001.lsd
|
||||
- EG_Flur_scan002.lsd (Konflikt → EG_Flur_scan002_merged_1.lsd)
|
||||
- ...
|
||||
```
|
||||
6. Klicken Sie auf **"Merge starten"**
|
||||
7. Nach Abschluss werden die Statistiken angezeigt:
|
||||
```
|
||||
Merge abgeschlossen!
|
||||
─────────────────────
|
||||
Cluster vorher: 5 → nachher: 7
|
||||
Scans vorher: 25 → nachher: 35
|
||||
Dateien kopiert: 10
|
||||
Konflikte gelöst: 1
|
||||
```
|
||||
|
||||
#### Konfliktauflösung
|
||||
|
||||
Wenn eine Datei im Zielprojekt bereits existiert:
|
||||
- Die neue Datei wird umbenannt: `dateiname_merged_1.lsd`
|
||||
- Bei weiteren Konflikten: `dateiname_merged_2.lsd`, etc.
|
||||
- Die LSDX-Datei wird entsprechend aktualisiert
|
||||
|
||||
#### Wichtige Hinweise
|
||||
|
||||
- **Backup**: Das Zielprojekt wird vor dem Merge gesichert (`.lsdx.backup`)
|
||||
- **UUID-Regenerierung**: Alle übertragenen Elemente erhalten neue eindeutige IDs
|
||||
- **Cluster-Duplikate**: Gleichnamige Cluster werden zusammengeführt
|
||||
|
||||
---
|
||||
|
||||
## Konfiguration
|
||||
|
||||
### Die Datei cluster_cleanup.txt
|
||||
|
||||
Diese Konfigurationsdatei definiert, welche Suffixe aus Clusternamen entfernt werden sollen.
|
||||
|
||||
#### Speicherort
|
||||
|
||||
- **Windows**: Im selben Ordner wie `pointcab_renamer.exe`
|
||||
- **Linux**: Im selben Ordner wie `pointcab_renamer`
|
||||
|
||||
#### Format
|
||||
|
||||
```
|
||||
# Dies ist ein Kommentar
|
||||
_re
|
||||
_li
|
||||
_mi
|
||||
_mi-li
|
||||
_mi-re
|
||||
```
|
||||
|
||||
- Jede Zeile = ein zu entfernender String
|
||||
- Zeilen mit `#` am Anfang sind Kommentare
|
||||
- Leere Zeilen werden ignoriert
|
||||
|
||||
#### Beispiel
|
||||
|
||||
Mit der obigen Konfiguration:
|
||||
- `Flur_re` → `Flur`
|
||||
- `Bad_mi-li` → `Bad`
|
||||
- `Küche_li` → `Küche`
|
||||
|
||||
#### Konfiguration neu laden
|
||||
|
||||
Änderungen an `cluster_cleanup.txt` werden nach einem Neustart oder über den Button **"Konfiguration neu laden"** übernommen.
|
||||
|
||||
---
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Häufige Fehler und Lösungen
|
||||
|
||||
#### "LSDX-Datei nicht gefunden"
|
||||
|
||||
**Problem**: Das Programm kann die Projektdatei nicht finden.
|
||||
|
||||
**Lösung**:
|
||||
- Stellen Sie sicher, dass die `.lsdx`-Datei im Projektordner existiert
|
||||
- Prüfen Sie, ob Sie Leserechte für die Datei haben
|
||||
- Der Dateiname sollte mit `.lsdx` enden (nicht `.LSDX`)
|
||||
|
||||
#### "PointCloud-Ordner nicht gefunden"
|
||||
|
||||
**Problem**: Der Ordner mit den Scandaten fehlt.
|
||||
|
||||
**Lösung**:
|
||||
- Der Ordner muss `_PointCloud` im Namen haben
|
||||
- Beispiel: `Projekt_A_PointCloud`
|
||||
- Prüfen Sie die Ordnerstruktur
|
||||
|
||||
#### "Keine Projekte gefunden" (Batch-Modus)
|
||||
|
||||
**Problem**: Im Basisordner werden keine Projekte erkannt.
|
||||
|
||||
**Lösung**:
|
||||
- Jedes Projekt muss eine `.lsdx`-Datei und einen `_PointCloud`-Ordner haben
|
||||
- Der Projektname in der LSDX muss mit dem Ordnernamen übereinstimmen
|
||||
|
||||
#### "Zugriff verweigert"
|
||||
|
||||
**Problem**: Dateien können nicht umbenannt werden.
|
||||
|
||||
**Lösung**:
|
||||
- Schließen Sie PointCab
|
||||
- Prüfen Sie, ob andere Programme die Dateien verwenden
|
||||
- Unter Windows: Als Administrator ausführen
|
||||
- Unter Linux: Prüfen Sie die Dateiberechtigungen
|
||||
|
||||
#### "GUI startet nicht" (Linux)
|
||||
|
||||
**Problem**: Keine grafische Oberfläche unter Linux.
|
||||
|
||||
**Lösung**:
|
||||
- Installieren Sie tkinter: `sudo apt install python3-tk`
|
||||
- Stellen Sie sicher, dass ein Display verfügbar ist
|
||||
|
||||
---
|
||||
|
||||
## FAQ
|
||||
|
||||
### Allgemeine Fragen
|
||||
|
||||
**F: Werden die Originaldateien gelöscht?**
|
||||
|
||||
A: Nein, die Dateien werden nur umbenannt. Es werden keine Daten gelöscht.
|
||||
|
||||
**F: Kann ich die Umbenennung rückgängig machen?**
|
||||
|
||||
A: Die ursprünglichen Namen werden im Log-Datei protokolliert. Eine automatische Rückgängig-Funktion gibt es nicht.
|
||||
|
||||
**F: Funktioniert das Tool auch mit älteren PointCab-Versionen?**
|
||||
|
||||
A: Das Tool wurde für PointCab-Projekte mit LSDX-Format entwickelt. Ältere Formate werden möglicherweise nicht unterstützt.
|
||||
|
||||
**F: Wie viele Projekte kann ich im Batch-Modus verarbeiten?**
|
||||
|
||||
A: Es gibt keine feste Grenze. Die Verarbeitungszeit hängt von der Anzahl der Scans ab.
|
||||
|
||||
### Technische Fragen
|
||||
|
||||
**F: Wo werden die Log-Dateien gespeichert?**
|
||||
|
||||
A: Im Projektordner, mit dem Format:
|
||||
- Einzelprojekt: `rename_YYYYMMDD_HHMMSS.log`
|
||||
- Batch: `batch_YYYYMMDD_HHMMSS.log`
|
||||
- Merger: `merge_YYYYMMDD_HHMMSS.log`
|
||||
|
||||
**F: Was passiert bei einem Stromausfall während der Verarbeitung?**
|
||||
|
||||
A: Die bereits umbenannten Dateien bleiben umbenannt. Die LSDX-Datei wird erst nach erfolgreicher Umbenennung aktualisiert.
|
||||
|
||||
**F: Kann ich das Tool über die Kommandozeile nutzen?**
|
||||
|
||||
A: Aktuell nur mit grafischer Oberfläche. Kommandozeilen-Unterstützung ist für eine zukünftige Version geplant.
|
||||
|
||||
### Merger-Fragen
|
||||
|
||||
**F: Was passiert mit den Originalprojekten beim Merge?**
|
||||
|
||||
A: Die Quellprojekte werden nicht verändert. Dateien werden kopiert, nicht verschoben.
|
||||
|
||||
**F: Kann ich den Merge rückgängig machen?**
|
||||
|
||||
A: Die ursprüngliche LSDX wird als `.backup` gespeichert. Die kopierten Dateien müssen manuell gelöscht werden.
|
||||
|
||||
**F: Werden alle Unterordner (Previews, etc.) auch gemergt?**
|
||||
|
||||
A: Ja, alle relevanten Unterordner werden übertragen.
|
||||
|
||||
---
|
||||
|
||||
## Support
|
||||
|
||||
Bei Fragen oder Problemen wenden Sie sich an Ihren Administrator.
|
||||
|
||||
---
|
||||
|
||||
*PointCab Renamer v4.1 - © 2026*
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
# Konfigurationsdatei für Clustername-Bereinigung
|
||||
# Jede Zeile enthält einen String, der aus dem Stammverzeichnisnamen entfernt wird
|
||||
# Leerzeilen und Zeilen die mit # beginnen werden ignoriert
|
||||
#
|
||||
# Beispiel: Stammverzeichnis "Am_Upstall_4_re" wird zu Clustername "Am_Upstall_4"
|
||||
#
|
||||
_re
|
||||
_li
|
||||
_mi
|
||||
_mi-li
|
||||
_mi-re
|
||||
_part_1
|
||||
_part_2
|
||||
_part_3
|
||||
_part_4
|
||||
_part_5
|
||||
Binary file not shown.
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,21 @@
|
|||
# PointCab Renamer v4.1 - Python Dependencies
|
||||
# ==========================================
|
||||
#
|
||||
# Diese Datei listet alle Python-Abhängigkeiten auf.
|
||||
# Installation: pip install -r requirements.txt
|
||||
#
|
||||
# Hinweis: tkinter ist Teil der Python-Standardbibliothek
|
||||
# und muss unter Ubuntu separat installiert werden:
|
||||
# sudo apt install python3-tk
|
||||
|
||||
# Für Build/Deployment:
|
||||
pyinstaller>=5.0
|
||||
|
||||
# Standardbibliotheken (keine Installation nötig):
|
||||
# - tkinter (GUI)
|
||||
# - xml.etree.ElementTree (LSDX-Parsing)
|
||||
# - uuid (UUID-Generierung)
|
||||
# - shutil (Dateioperationen)
|
||||
# - os (Betriebssystemfunktionen)
|
||||
# - datetime (Zeitstempel)
|
||||
# - logging (Protokollierung)
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
# PointCab Renamer v4.1 - Python Dependencies
|
||||
# ==========================================
|
||||
#
|
||||
# Diese Datei listet alle Python-Abhängigkeiten auf.
|
||||
# Installation: pip install -r requirements.txt
|
||||
#
|
||||
# Hinweis: tkinter ist Teil der Python-Standardbibliothek
|
||||
# und muss unter Ubuntu separat installiert werden:
|
||||
# sudo apt install python3-tk
|
||||
|
||||
# Für Build/Deployment:
|
||||
pyinstaller>=5.0
|
||||
|
||||
# Standardbibliotheken (keine Installation nötig):
|
||||
# - tkinter (GUI)
|
||||
# - xml.etree.ElementTree (LSDX-Parsing)
|
||||
# - uuid (UUID-Generierung)
|
||||
# - shutil (Dateioperationen)
|
||||
# - os (Betriebssystemfunktionen)
|
||||
# - datetime (Zeitstempel)
|
||||
# - logging (Protokollierung)
|
||||
Loading…
Reference in New Issue