Tesseract nicht installiert: MissingDependencyError schlägt erst bei erster Datei fehl, nicht beim Start #1

Closed
opened 2026-04-09 01:41:47 +02:00 by clawdbot_dh · 2 comments
Member

Problem

Wenn tesseract nicht auf dem System installiert ist, startet der Service trotzdem erfolgreich (systemctl start = OK). Der Fehler tritt erst auf wenn die erste PDF-Datei verarbeitet wird.

Beobachtetes Verhalten:

  • Service startet ohne Fehler
  • Erste PDF landet korrekt im error/-Verzeichnis
  • Fehlermeldung im Log: MissingDependencyError: Could not find program 'tesseract' on the PATH
  • Exit-Code des --once-Modus: 0 (kein Fehler signalisiert!)

Auswirkung

Ein Admin könnte den Service für funktionsfähig halten, obwohl keine einzige PDF verarbeitet werden kann. Bei systemd-Monitoring (z.B. per systemctl is-active) sieht alles grün aus.

Reproduktion

# Tesseract deinstallieren / nicht installieren
python -m pdf_ocr_hotfolder --config /etc/pdf-ocr-hotfolder/test.toml --once
# → Exit 0, kein offensichtlicher Fehler

Erwartetes Verhalten

Der Service sollte beim Start prüfen ob tesseract verfügbar ist. Falls nicht:

  • Klare Fehlermeldung beim Start
  • Exit-Code != 0
  • --once-Modus: Exit != 0 wenn Dateien fehlschlagen

Mögliche Lösung

# In __main__.py vor service.run():
from ocrmypdf._exec.tesseract import version as tess_version
try:
    tess_version()
except MissingDependencyError:
    print("FEHLER: tesseract nicht gefunden. sudo apt install tesseract-ocr", file=sys.stderr)
    return 1

Alternativ: Prüfung in HotfolderService.__init__() oder run().

Umgebung

  • ocrmypdf 17.4.1
  • Tesseract: nicht installiert
  • Entdeckt bei: Lokaler Test-Durchlauf 2026-04-08
## Problem Wenn `tesseract` nicht auf dem System installiert ist, startet der Service trotzdem erfolgreich (`systemctl start` = OK). Der Fehler tritt erst auf wenn die erste PDF-Datei verarbeitet wird. **Beobachtetes Verhalten:** - Service startet ohne Fehler - Erste PDF landet korrekt im `error/`-Verzeichnis - Fehlermeldung im Log: `MissingDependencyError: Could not find program 'tesseract' on the PATH` - Exit-Code des `--once`-Modus: `0` (kein Fehler signalisiert!) ## Auswirkung Ein Admin könnte den Service für funktionsfähig halten, obwohl keine einzige PDF verarbeitet werden kann. Bei systemd-Monitoring (z.B. per `systemctl is-active`) sieht alles grün aus. ## Reproduktion ```bash # Tesseract deinstallieren / nicht installieren python -m pdf_ocr_hotfolder --config /etc/pdf-ocr-hotfolder/test.toml --once # → Exit 0, kein offensichtlicher Fehler ``` ## Erwartetes Verhalten Der Service sollte beim Start prüfen ob `tesseract` verfügbar ist. Falls nicht: - Klare Fehlermeldung beim Start - Exit-Code != 0 - `--once`-Modus: Exit != 0 wenn Dateien fehlschlagen ## Mögliche Lösung ```python # In __main__.py vor service.run(): from ocrmypdf._exec.tesseract import version as tess_version try: tess_version() except MissingDependencyError: print("FEHLER: tesseract nicht gefunden. sudo apt install tesseract-ocr", file=sys.stderr) return 1 ``` Alternativ: Prüfung in `HotfolderService.__init__()` oder `run()`. ## Umgebung - ocrmypdf 17.4.1 - Tesseract: nicht installiert - Entdeckt bei: Lokaler Test-Durchlauf 2026-04-08
Author
Member

Testbericht — PDF OCR Hotfolder v0.2.0

Datum: 2026-04-08
Tester: clawdbot
Version: 0.2.0
Testsystem: AMD Ryzen 5 3400GE, Debian 12, Python 3.11
Tesseract: nicht installiert (Testfokus auf Code-Logik + CLI-Verhalten)


Testszenario

Ziel: Funktionstest ohne vollständige Installation — Code-Import, Config-Loading, CLI-Verhalten, Fehlerhandling.

Vorbereitung

git clone https://gitea.sonith.de/sonith_ug/pdf-ocr-hotfolder.git
cd pdf-ocr-hotfolder
python3 -m venv venv && source venv/bin/activate
pip install -r requirements.txt

mkdir -p /tmp/ocr-test/{incoming,working,outgoing,error}

Config /tmp/ocr-test-config.toml:

[paths]
incoming = "/tmp/ocr-test/incoming"
outgoing = "/tmp/ocr-test/outgoing"
working  = "/tmp/ocr-test/working"
error    = "/tmp/ocr-test/error"

[ocr]
languages = "deu+eng"
jobs = 2
skip_text = true
pdfa_level = "2"
deskew = true
max_workers = 2
timeout = 60

[verapdf]
enabled = false

[upload.folder]
enabled = true
target = ""

[upload.nextcloud]
enabled = false

[upload.sftp]
enabled = false

[notify.email]
enabled = false

[logging]
level = "DEBUG"

Test-PDF erstellt mit fpdf2:

from fpdf import FPDF
pdf = FPDF()
pdf.add_page()
pdf.set_font('Helvetica', size=16)
pdf.cell(200, 10, text='Test Rechnung 2026')
# → /tmp/ocr-test/incoming/test-rechnung.pdf (1036 bytes)

Testergebnisse

TC-01: Config-Loading

from pdf_ocr_hotfolder.config import load_config
cfg = load_config('/tmp/ocr-test-config.toml')

Ergebnis: Erfolgreich
Alle Felder korrekt geladen. Config-Dataclass funktioniert wie erwartet.


TC-02: CLI — --version

python3 -m pdf_ocr_hotfolder --version

Ausgabe: pdf-ocr-hotfolder 0.1.0
Ergebnis: OK — gibt korrekte Version aus

⚠️ Hinweis: Version 0.1.0 ausgegeben, obwohl CHANGELOG.md und README.md v0.2.0 zeigen.
Ursache: __init__.py noch nicht auf 0.2.0 aktualisiert.


TC-03: CLI — --help

python3 -m pdf_ocr_hotfolder --help

Ergebnis: Korrekte Usage-Ausgabe mit allen Optionen.


TC-04: Fehlende Config

python3 -m pdf_ocr_hotfolder --config /nonexistent.toml
echo $?  # → 2

Ergebnis: Korrekte Fehlermeldung + Exit-Code 2.


TC-05: --once mit leerem incoming/

python3 -m pdf_ocr_hotfolder --config /tmp/ocr-test-config.toml --once
echo $?  # → 0

Ergebnis: Startet, findet keine PDFs, beendet sauber.


🔴 TC-06: --once mit PDF, Tesseract fehlt

cp test-rechnung.pdf /tmp/ocr-test/incoming/
python3 -m pdf_ocr_hotfolder --config /tmp/ocr-test-config.toml --once
echo $?  # → 0 ← PROBLEM

Beobachtetes Verhalten:

  • test-rechnung.pdf wird korrekt nach working/ verschoben
  • OCR schlägt fehl: MissingDependencyError: Could not find program 'tesseract'
  • Datei wird korrekt nach error/ verschoben
  • Exit-Code: 0 ← obwohl Datei fehlgeschlagen
  • Service startet ohne Vorab-Prüfung ob Tesseract verfügbar

Dateizustand nach Lauf:

incoming/  → leer  (Datei wurde verarbeitet)
working/   → leer  (korrekt aufgeräumt)
outgoing/  → leer  (OCR fehlgeschlagen)
error/     → test-rechnung.pdf  ✅ korrekt

Issues erstellt:

  • Issue #1: Keine Tesseract-Vorab-Prüfung beim Start
  • Issue #2: --once Exit-Code 0 bei Fehlern

Gesamtbewertung

Test Ergebnis
TC-01 Config-Loading
TC-02 --version (⚠️ Versionsnummer falsch)
TC-03 --help
TC-04 Fehlende Config
TC-05 --once leer
TC-06 --once + Tesseract fehlt 🔴 Exit-Code falsch

Positiv:

  • Fehlerhandling solide: fehlgeschlagene PDFs landen in error/, Service läuft weiter
  • Kein Datenverlust: Dateien werden nie gelöscht, immer nur verschoben
  • Code-Struktur sauber, gut lesbar
  • Config-Loading robust

Offen (vor Produktion):

  • Tesseract + Ghostscript Vorab-Check beim Start (Issue #1)
  • --once Exit-Code bei Fehlern (Issue #2)
  • __version__ auf 0.2.0 setzen
  • Vollständiger Test mit Tesseract installiert (OCR-Qualität, PDF/A-Output, Upload-Targets)
  • Test mit echtem Scan-PDF (schräg, niedrige Auflösung)
  • Multi-Instanz-Test (2 Instanzen gleichzeitig)

Nächste Testschritte (mit Tesseract)

# System mit Tesseract:
sudo apt install tesseract-ocr tesseract-ocr-deu ghostscript

# Volltest:
python3 -m pdf_ocr_hotfolder --config /tmp/ocr-test-config.toml --once

# Erwartung:
# outgoing/ → OCR_test-rechnung.pdf (durchsuchbares PDF)
# Datei ist text-durchsuchbar (pdftotext prüfen)
# Testbericht — PDF OCR Hotfolder v0.2.0 **Datum:** 2026-04-08 **Tester:** clawdbot **Version:** 0.2.0 **Testsystem:** AMD Ryzen 5 3400GE, Debian 12, Python 3.11 **Tesseract:** nicht installiert (Testfokus auf Code-Logik + CLI-Verhalten) --- ## Testszenario Ziel: Funktionstest ohne vollständige Installation — Code-Import, Config-Loading, CLI-Verhalten, Fehlerhandling. ### Vorbereitung ```bash git clone https://gitea.sonith.de/sonith_ug/pdf-ocr-hotfolder.git cd pdf-ocr-hotfolder python3 -m venv venv && source venv/bin/activate pip install -r requirements.txt mkdir -p /tmp/ocr-test/{incoming,working,outgoing,error} ``` **Config `/tmp/ocr-test-config.toml`:** ```toml [paths] incoming = "/tmp/ocr-test/incoming" outgoing = "/tmp/ocr-test/outgoing" working = "/tmp/ocr-test/working" error = "/tmp/ocr-test/error" [ocr] languages = "deu+eng" jobs = 2 skip_text = true pdfa_level = "2" deskew = true max_workers = 2 timeout = 60 [verapdf] enabled = false [upload.folder] enabled = true target = "" [upload.nextcloud] enabled = false [upload.sftp] enabled = false [notify.email] enabled = false [logging] level = "DEBUG" ``` **Test-PDF erstellt mit fpdf2:** ```python from fpdf import FPDF pdf = FPDF() pdf.add_page() pdf.set_font('Helvetica', size=16) pdf.cell(200, 10, text='Test Rechnung 2026') # → /tmp/ocr-test/incoming/test-rechnung.pdf (1036 bytes) ``` --- ## Testergebnisse ### ✅ TC-01: Config-Loading ```python from pdf_ocr_hotfolder.config import load_config cfg = load_config('/tmp/ocr-test-config.toml') ``` **Ergebnis:** ✅ Erfolgreich Alle Felder korrekt geladen. Config-Dataclass funktioniert wie erwartet. --- ### ✅ TC-02: CLI — `--version` ```bash python3 -m pdf_ocr_hotfolder --version ``` **Ausgabe:** `pdf-ocr-hotfolder 0.1.0` **Ergebnis:** ✅ OK — gibt korrekte Version aus > ⚠️ **Hinweis:** Version `0.1.0` ausgegeben, obwohl `CHANGELOG.md` und `README.md` v0.2.0 zeigen. > Ursache: `__init__.py` noch nicht auf 0.2.0 aktualisiert. --- ### ✅ TC-03: CLI — `--help` ```bash python3 -m pdf_ocr_hotfolder --help ``` **Ergebnis:** ✅ Korrekte Usage-Ausgabe mit allen Optionen. --- ### ✅ TC-04: Fehlende Config ```bash python3 -m pdf_ocr_hotfolder --config /nonexistent.toml echo $? # → 2 ``` **Ergebnis:** ✅ Korrekte Fehlermeldung + Exit-Code 2. --- ### ✅ TC-05: `--once` mit leerem `incoming/` ```bash python3 -m pdf_ocr_hotfolder --config /tmp/ocr-test-config.toml --once echo $? # → 0 ``` **Ergebnis:** ✅ Startet, findet keine PDFs, beendet sauber. --- ### 🔴 TC-06: `--once` mit PDF, Tesseract fehlt ```bash cp test-rechnung.pdf /tmp/ocr-test/incoming/ python3 -m pdf_ocr_hotfolder --config /tmp/ocr-test-config.toml --once echo $? # → 0 ← PROBLEM ``` **Beobachtetes Verhalten:** - `test-rechnung.pdf` wird korrekt nach `working/` verschoben - OCR schlägt fehl: `MissingDependencyError: Could not find program 'tesseract'` - Datei wird korrekt nach `error/` verschoben ✅ - **Exit-Code: 0** ← obwohl Datei fehlgeschlagen ❌ - Service startet ohne Vorab-Prüfung ob Tesseract verfügbar ❌ **Dateizustand nach Lauf:** ``` incoming/ → leer (Datei wurde verarbeitet) working/ → leer (korrekt aufgeräumt) outgoing/ → leer (OCR fehlgeschlagen) error/ → test-rechnung.pdf ✅ korrekt ``` **Issues erstellt:** - → **Issue #1:** Keine Tesseract-Vorab-Prüfung beim Start - → **Issue #2:** `--once` Exit-Code 0 bei Fehlern --- ## Gesamtbewertung | Test | Ergebnis | |---|---| | TC-01 Config-Loading | ✅ | | TC-02 --version | ✅ (⚠️ Versionsnummer falsch) | | TC-03 --help | ✅ | | TC-04 Fehlende Config | ✅ | | TC-05 --once leer | ✅ | | TC-06 --once + Tesseract fehlt | 🔴 Exit-Code falsch | **Positiv:** - Fehlerhandling solide: fehlgeschlagene PDFs landen in `error/`, Service läuft weiter - Kein Datenverlust: Dateien werden nie gelöscht, immer nur verschoben - Code-Struktur sauber, gut lesbar - Config-Loading robust **Offen (vor Produktion):** - [ ] Tesseract + Ghostscript Vorab-Check beim Start (Issue #1) - [ ] `--once` Exit-Code bei Fehlern (Issue #2) - [ ] `__version__` auf 0.2.0 setzen - [ ] Vollständiger Test mit Tesseract installiert (OCR-Qualität, PDF/A-Output, Upload-Targets) - [ ] Test mit echtem Scan-PDF (schräg, niedrige Auflösung) - [ ] Multi-Instanz-Test (2 Instanzen gleichzeitig) --- ## Nächste Testschritte (mit Tesseract) ```bash # System mit Tesseract: sudo apt install tesseract-ocr tesseract-ocr-deu ghostscript # Volltest: python3 -m pdf_ocr_hotfolder --config /tmp/ocr-test-config.toml --once # Erwartung: # outgoing/ → OCR_test-rechnung.pdf (durchsuchbares PDF) # Datei ist text-durchsuchbar (pdftotext prüfen) ```
Owner

Behoben in v0.2.1 (Commit 6f7cadf). Test-Szenarien sind in tests/test_preflight.py und tests/test_once_exit_code.py abgebildet (11 Tests, alle grün).

Behoben in v0.2.1 (Commit 6f7cadf). Test-Szenarien sind in `tests/test_preflight.py` und `tests/test_once_exit_code.py` abgebildet (11 Tests, alle grün).
Sign in to join this conversation.
No Label
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: sonith_ug/pdf-ocr-hotfolder#1