OCRmyPDF API läuft auf Ubuntu aber nicht auf Raspberry Pi

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Benutzeravatar
sparrow
User
Beiträge: 4195
Registriert: Freitag 17. April 2009, 10:28

Nächster Schritt:

Code: Alles auswählen

import sys
print(f"Sys Version: {sys.version}")
import ocrmypdf
print("after import")
print(f"Path: {ocrmypdf.__path__}")
print(ocrmypdf)
print(f"Version: {ocrmypdf.__version__}")
print(f"Function: {ocrmypdf.ocr})")
print("done")
HerrYves
User
Beiträge: 18
Registriert: Mittwoch 25. September 2019, 19:33

@sparrow:
Ich danke Dir für Deine Beharrlichkeit.
Hier die Ausgabe:

Code: Alles auswählen

Sys Version: 3.7.3 (default, Jul 25 2020, 13:03:44) 
[GCC 8.3.0]
after import
Path: ['/usr/lib/python3/dist-packages/ocrmypdf']
<module 'ocrmypdf' from '/usr/lib/python3/dist-packages/ocrmypdf/__init__.py'>
Version: 8.0.1+dfsg
Traceback (most recent call last):
  File "Forum_test.py", line 17, in <module>
    print(f"Function: {ocrmypdf.ocr})")
AttributeError: module 'ocrmypdf' has no attribute 'ocr'
Könntest Du mir als Padawan kurz erklären was Du darin siehst?!
Danke
Benutzeravatar
sparrow
User
Beiträge: 4195
Registriert: Freitag 17. April 2009, 10:28

Irgend etwas musst du anders gemacht haben. Denn nun funktioniert der Import grundsätzlich.
Das vorherige Verhalten konnte ich nur dadurch nachstellen, dass ich ein leeres Verzeichnis im Suchpfad ablege, das "ocrmypdf" heißt. Dann findet er das leere Verzeichnis statt eines Moduls. Kein schönes Verhalten, wie ich gerade lerne.

So, das ist jetzt ja nicht mehr das Problem. Aber: Das ist eine uralte ocrmypdf-Version. Ich denke nicht, dass die mit pip installiert wurde. Aktuell ist die Version 11.5.0. Und ich nehme an, die API hat sich seitdem verändert.
HerrYves
User
Beiträge: 18
Registriert: Mittwoch 25. September 2019, 19:33

OK, das habe ich verstanden.
Im Moment kann ich (mit meinem Wissensstand) nur per apt oder pip3 installieren.
Das habe ich gemacht.
Habe ich eine andere Möglichkeit die aktuelle Version zu installieren?

Anders gemacht habe ich, dass ich die Installation wie schon geschrieben rückgängig gemacht habe und per PIP3 das Modul neu installiert.
Benutzeravatar
sparrow
User
Beiträge: 4195
Registriert: Freitag 17. April 2009, 10:28

Ja, du kannst die aktuelle Version mit pip installieren. Das hast du möglicherweise gemacht.
Du hast aber auch mit apt installiert. Und damit kam eine uralte Version. Willkommen bei Debian.

Ich bin nicht mehr tief genug drin in Debian, aber ein beherztes "sudo apt-get purge ocrmypdf" sollte die Version aus dem Debian-Paketquellen von der Platte entfernen und ein anschließendes "pip install ocrmypdf" hoffentlich die aktuelle Version über die Python-Bordmittel installieren.
HerrYves
User
Beiträge: 18
Registriert: Mittwoch 25. September 2019, 19:33

So, habe ich gemacht.
Lief jetzt eine Weile und hat zwischen durch diese Fehlermeldung gebracht:

Code: Alles auswählen

Failed building wheel for pikepdf
  Running setup.py clean for pikepdf
Failed to build pikepdf
Installing collected packages: pikepdf, ocrmypdf
  Running setup.py install for pikepdf ... error
    Complete output from command /usr/bin/python3 -u -c "import setuptools, tokenize;__file__='/tmp/pip-install-ku884k3z/pikepdf/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-record-u5wpkfk6/install-record.txt --single-version-externally-managed --compile --user --prefix=:
    /usr/lib/python3.7/distutils/dist.py:274: UserWarning: Unknown distribution option: 'cmd_class'
      warnings.warn(msg)
    running install
    running build
    running build_py
    creating build
    creating build/lib.linux-armv6l-3.7
    creating build/lib.linux-armv6l-3.7/pikepdf
    copying src/pikepdf/objects.py -> build/lib.linux-armv6l-3.7/pikepdf
    copying src/pikepdf/jbig2.py -> build/lib.linux-armv6l-3.7/pikepdf
    copying src/pikepdf/_methods.py -> build/lib.linux-armv6l-3.7/pikepdf
    copying src/pikepdf/codec.py -> build/lib.linux-armv6l-3.7/pikepdf
    copying src/pikepdf/_version.py -> build/lib.linux-armv6l-3.7/pikepdf
    copying src/pikepdf/_cpphelpers.py -> build/lib.linux-armv6l-3.7/pikepdf
    copying src/pikepdf/__init__.py -> build/lib.linux-armv6l-3.7/pikepdf
    creating build/lib.linux-armv6l-3.7/pikepdf/models
    copying src/pikepdf/models/outlines.py -> build/lib.linux-armv6l-3.7/pikepdf/models
    copying src/pikepdf/models/matrix.py -> build/lib.linux-armv6l-3.7/pikepdf/models
    copying src/pikepdf/models/metadata.py -> build/lib.linux-armv6l-3.7/pikepdf/models
    copying src/pikepdf/models/image.py -> build/lib.linux-armv6l-3.7/pikepdf/models
    copying src/pikepdf/models/encryption.py -> build/lib.linux-armv6l-3.7/pikepdf/models
    copying src/pikepdf/models/__init__.py -> build/lib.linux-armv6l-3.7/pikepdf/models
    copying src/pikepdf/py.typed -> build/lib.linux-armv6l-3.7/pikepdf
    running build_ext
    building 'pikepdf._qpdf' extension
    creating build/temp.linux-armv6l-3.7
    creating build/temp.linux-armv6l-3.7/src
    creating build/temp.linux-armv6l-3.7/src/qpdf
    arm-linux-gnueabihf-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/tmp/pip-build-env-41n2d4lp/lib/python3.7/site-packages/pybind11/include -I/usr/include/python3.7m -c src/qpdf/annotation.cpp -o build/temp.linux-armv6l-3.7/src/qpdf/annotation.o -std=c++14 -fvisibility=hidden -g0
    src/qpdf/annotation.cpp:11:10: fatal error: qpdf/Constants.h: Datei oder Verzeichnis nicht gefunden
     #include <qpdf/Constants.h>
              ^~~~~~~~~~~~~~~~~~
    compilation terminated.
    error: command 'arm-linux-gnueabihf-gcc' failed with exit status 1
    
    ----------------------------------------
Command "/usr/bin/python3 -u -c "import setuptools, tokenize;__file__='/tmp/pip-install-ku884k3z/pikepdf/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record /tmp/pip-record-u5wpkfk6/install-record.txt --single-version-externally-managed --compile --user --prefix=" failed with error code 1 in /tmp/pip-install-ku884k3z/pikepdf/
Kann ich das separat nachinstallieren?
Ansonsten kommt jetzt folgende Fehlermeldung:

Code: Alles auswählen

Traceback (most recent call last):
  File "OCR-Final1.py", line 4, in <module>
    import ocrmypdf
ModuleNotFoundError: No module named 'ocrmypdf'
und die Ausgabe aus der Versionskontrolle:

Code: Alles auswählen

Sys Version: 3.7.3 (default, Jul 25 2020, 13:03:44) 
[GCC 8.3.0]
Traceback (most recent call last):
  File "Forum_test.py", line 12, in <module>
    import ocrmypdf
ModuleNotFoundError: No module named 'ocrmypdf'
:?:
HerrYves
User
Beiträge: 18
Registriert: Mittwoch 25. September 2019, 19:33

:shock: Ich finde jetzt keine Ordner OCRmyPDF im /usr/lib/python3/dist-packages.
Benutzeravatar
sparrow
User
Beiträge: 4195
Registriert: Freitag 17. April 2009, 10:28

Offensichtlich hängt ocrmypdf von pikepdf ab, was für das System erst übersetzt werden müsste.
Ich habe aber seit Jahren kein Linux mehr, deshalb weiß ich nicht, wie nun das weitere Vorgehen wäre.

Auch um das nochmal zu sagen: Ich weiß nicht, ob es tatsächlich an der veralteten Version liegt - finde das aber naheliegend.
HerrYves
User
Beiträge: 18
Registriert: Mittwoch 25. September 2019, 19:33

@sparrow:
Ich danke Dir auf alle Fälle recht herzlich.
Du hast mich, auch was Fehlersuche angeht wirklich weiter gebracht.
Dir eine gute Zeit.
Benutzeravatar
__blackjack__
User
Beiträge: 13111
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Ich denke das Problem ist ein `ocrmypdf`-Verzeichnis. Das muss ja nicht leer sein. Wenn da keine `__init__.py` drin ist, dann wird das von aktuellen Python-Versionen als Namespace-Package angesehen. Also wenn Du das Problem hast, ist dann zufällig ein `ocrmypdf`-Verzeichnis im Suchpfad?

Ich stelle gerade fest, dass das ein totales Kack-„Feature“ ist, dass keine `__init__.py` mehr da sein muss. Man kann sich Skripte damit unbrauchbar machen in dem einfach zufällig (oder auch nicht) ein Verzeichnis mit dem Namen eines benötigten Moduls im Modulsuchpfad steht, der ja üblicherweise auch das Verzeichnis in dem das Skript liegt mit enthält. Wenn man also beispielsweise ein Skript im Heimatverzeichnis oder auf dem Desktop ablegt das CSV-Daten mit dem `csv`-Modul verarbeitet, darf man im Heimatverzeichnis oder auf dem Desktop kein Verzeichnis mit dem Namen `csv` anlegen, denn dann geht das Skript ”kaputt”. 🤦
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Benutzeravatar
sparrow
User
Beiträge: 4195
Registriert: Freitag 17. April 2009, 10:28

@__blackjack__: Ich hab das Feauture gerade erst gefunden und bin regelrecht schockiert. Aber schau mal, um 14:51 war das Modul in Ordnung, die gewünschte Funktion aber trotzdem nicht vorhanden. Deshalb denke ich, dass es da an der alten Version lag.
HerrYves
User
Beiträge: 18
Registriert: Mittwoch 25. September 2019, 19:33

@__blackjack__:
Ich verstehe die Frage nach dem Suchpfad nicht ganz.
Du hast dahin gehend recht, dass das Problem der OCRmyPDF Ordner ist. Nach meinem Aufräumen des OCRmyPDF kann ich es nicht mehr installieren und der Ordner ist auch nicht mehr da.
HerrYves
User
Beiträge: 18
Registriert: Mittwoch 25. September 2019, 19:33

@__blackjack__ @sparrow:
Ist das ev. auch der Grund warum es auf Ubuntu läuft und auf dem RasPi nicht?
Weil die Installation auf unterschiedliche Versionen zugreift?
HerrYves
User
Beiträge: 18
Registriert: Mittwoch 25. September 2019, 19:33

@sparrow:
Ich habe jetzt die "alte" Version wieder per apt installiert und es kommt wieder der Fehler von 14:51.
Ich gehe mal davon aus, dass es für den RasPi keine Version gibt. Oder?
Antworten