Dokumentation · v0.2.1 - alpha
searchex – Dokumentation
Version: 0.2.0
Plattform: Windows 10/11 (64‑bit)
Technik: PySide6 (Qt) UI, C++ Extension via pybind11, scikit‑build‑core, CMake
Inhalt
- 1. Überblick
- 2. Voraussetzungen
- 3. Verzeichnisstruktur
- 4. Build & Installation (Wheel)
- 5. Starten
- 6. Bedienung
- 7. Suchoptionen
- 8. Leistung & Responsivität
- 9. Logging & Fehlermeldungen
- 10. Binärdateien & Vorschau
- 11. Packen zu .exe (PyInstaller)
- 12. Troubleshooting
- 13. FAQ
- 14. Lizenz
1. Überblick
searchex ist ein schneller, multithreaded Datei‑Scanner mit moderner Qt‑Oberfläche (PySide6).
Rechenintensive Arbeit (Datei lesen, Muster finden) passiert in einem C++‑Modul (searchex_native
) via pybind11.
Das Programm durchsucht rekursiv Dateien und kann sowohl Text‑ als auch Binärdateien prüfen. Funde werden pro Datei als Kacheln
angezeigt – inklusive Zeilennummern, Dateigröße, Vorschau und Direkt‑Sprung zur ersten Fundstelle.
2. Voraussetzungen
- Windows 10/11, 64‑bit
- Python 3.13 (64‑bit)
- Visual Studio 2022 Community mit „Desktopentwicklung mit C++“
- Build‑Tools: CMake ≥ 3.27, Ninja, pybind11[global], scikit‑build‑core
python -m pip install -U pip build scikit-build-core pybind11[global] cmake ninja
3. Verzeichnisstruktur
searchex/
├─ pyproject.toml
├─ CMakeLists.txt
├─ README.md
├─ app.py
├─ resources/
│ ├─ logo.png
│ └─ logo.ico (optional für EXE)
├─ src/
│ ├─ cpp/
│ │ └─ cpp.cpp (C++ Quelle für pybind11)
│ └─ searchex/
│ └─ __init__.py (lädt searchex_native)
└─ logs/ (wird zur Laufzeit angelegt)
4. Build & Installation (Wheel)
Das native Modul wird mit scikit‑build‑core und CMake gebaut.
# 1) Wheel bauen
python -m build --wheel .
# 2) Wheel installieren (überschreiben, keine Deps)
pip install --force-reinstall --no-deps dist\searchex-0.2.0-*.whl
Wichtig: CMakeLists.txt
muss im Projekt‑Root liegen und eine install(TARGETS ...)
‑Regel besitzen,
damit die erzeugte .pyd
im Wheel landet.
5. Starten
python app.py
Optional kannst du das Fenster‑Icon setzen (bereits vorbereitet):
app.setWindowIcon(QIcon("resources/logo.png"))
6. Bedienung
- Pfad wählen: Ordner oder Datei per Dialog wählen oder per Drag & Drop in das Pfadfeld ziehen.
- Suchmuster: Im Feld „Search patterns“ pro Zeile ein Muster eintragen (Plaintext oder Regex).
- Optionen: Case‑sensitive, Regex, Whole word, Name‑Matching, Hidden Files, Max. Dateigröße, Threads.
- Start: „Start“ klicken. Fortschritt und Anzahl verarbeiteter Dateien siehst du in der Statusleiste.
- Ergebnisse: Kacheln zeigen Dateiname, Pfad, Größe, „Text/Binary“, Trefferzahl und Zeilennummern.
- Aktionen pro Kachel: Open, Reveal in Explorer, Jump to first hit.
- Fehler: „Errors / skipped files“ ist einklappbar und listet Probleme (z. B. Zugriffsfehler).
7. Suchoptionen
- Case sensitive: ASCII‑Groß/Klein beachten.
- Regex: Muster als ECMAScript‑Regex interpretieren.
- Whole word: Treffer nur an Wortgrenzen (Substring‑Modus).
- Match file/folder names: Muster gegen Dateinamen/Ordnernamen prüfen (schnell, ohne Dateiinhalt zu öffnen).
- Include hidden: Versteckte Dateien/Ordner einschließen.
- Max MB: 0 = unbegrenzt; sonst werden größere Dateien übersprungen.
- Threads: Maximale Parallelität (Task‑Threads für Dateien).
8. Leistung & Responsivität
- Das C++‑Modul gibt während Datei‑I/O und Matching den Python‑GIL frei, damit die Qt‑Events weiterlaufen.
- Ergebnis‑Rendering erfolgt in kleinen Batches über einen Timer; das UI bleibt flüssig.
- Für sehr große Dateien empfiehlt sich ein Limit über „Max MB“.
9. Logging & Fehlermeldungen
Logs werden in logs/app.log
geschrieben (Rolling‑File, UTF‑8).
Bei Problemen erscheinen Einträge auch in der Liste „Errors / skipped files“.
10. Binärdateien & Vorschau
- Binärdateien werden anhand einer Heuristik erkannt (z. B. Nullbytes, Steuerzeichenanteil).
- Textvorschau zeigt Kontext um den ersten Treffer; bei Binärdateien erscheint ein Hex‑Snippet.
11. Packen zu .exe (PyInstaller)
- Icon konvertieren:
resources\logo.ico
(PNG bleibt für das Fenster‑Icon). - Wheel lokal installieren, damit
searchex_native
verfügbar ist.
python -m build --wheel .
pip install --force-reinstall --no-deps dist\searchex-*.whl
pyinstaller app.py ^
--name searchex ^
--onedir ^
--noconsole ^
--icon resources\logo.ico ^
--add-data "resources\logo.png;resources" ^
--collect-all PySide6 ^
--collect-binaries searchex
Ergebnis: dist\searchex\searchex.exe
(ganzen Ordner verteilen).
Für One‑file ersetze --onedir
durch --onefile
.
12. Troubleshooting
- Mini‑Wheel (~1 KB): In
CMakeLists.txt
fehlt dieinstall(TARGETS ...)
‑Regel. - Backend‑Pfad falsch:
build-backend = "scikit_build_core.build"
(mit Unterstrichen). - README fehlt:
readme = "README.md"
erfordert eine Datei im Root. - CMakeLists nicht im Root: scikit‑build‑core erwartet sie im Projekt‑Root.
- Interpreter‑Mismatch: Wheel immer mit genau dem Python bauen/verwenden (z. B.
cp313 win_amd64
). - pybind11 nicht gefunden:
pip install pybind11[global]
. - Qt‑Plugins fehlen in EXE: PyInstaller mit
--collect-all PySide6
bauen. - Button‑Callback gibt bool statt Pfad: beim
clicked.connect
ein Dummy‑Argument verwenden, z. B.:
lambda checked=False, p=path, pos=first_pos, b=is_bin: self.open_preview(p, pos, b)
13. FAQ
Warum ist ein Treffer in Binärdateien manchmal schwer zu interpretieren?
Weil die Daten nicht textuell sind; nutze die Hex‑Vorschau oder grenze mit Dateifiltern ein.
Kann ich nur bestimmte Dateitypen durchsuchen?
Ja – Erweiterungsidee: einfache Pattern‑Filter (z. B. *.cpp;*.h
) lassen sich leicht ergänzen.
Speichert searchex Einstellungen?
Aktuell nicht dauerhaft; QSettings ließe sich einfach hinzufügen.
14. Lizenz
MIT‑Lizenz (Projektinhaber eintragen).