Seite 1 von 2

lcms in Python einbinden

Verfasst: Donnerstag 14. Januar 2010, 23:03
von kweenelizabeth
Hallo, ich bin neu hier (und auch unerfahren im erweitern von Python) und wollte fragen ob ihr mir bei folgendem Problem weiterhelfen könnt:
um swatchbooker (selapa.net/swatchbooker) lauffähig zu bekommen, werden die lcms python bindings benötigt. ich habe also unter littlecms.com die "precompiled binaries" für Windows runtergeladen, daraus die lcms.py und _lcms.pyd nach "Python26/Lib/site-packages" kopiert. Ich bekomme, wenn ich die lcms.py in der Idle starten möchte die Fehlermeldung: "File "C:\Python26\lib\site-packages\lcms.py", line 8, in <module> import _lcms ImportError: DLL load failed: Das angegebene Modul wurde nicht gefunden."

Ich habe nun versucht, die auch im lcms-Binary enthaltenen dll/exe/pyd Dateien an diversen mir sinnvoll erscheinenden Orten zu verteilen (system32, %PYTHONPATH%, Python26/DLLs/), allerdings änderte dies nichts an daran, das _lcms nicht gefunden wird. Wo muss denn diese Datei hin, damit Python sie findet?

Danke für eure Hilfe,
kweenelizabeth

Verfasst: Freitag 15. Januar 2010, 07:47
von Leonidas
Hallo kweenelizabeth, willkommen im Forum,

Für welche Python-Version sind denn die Binaries? Bist du dir sicher dass sie mit Python 2.6 kompiliert worden sind?

Verfasst: Freitag 15. Januar 2010, 10:17
von BlackJack
Auf der offiziellen Seite scheint es die Python-Bindings für Windows vorkompiliert nur für Python 2.2 zu geben. :shock: http://www.littlecms.com/newutils.htm#python

Verfasst: Freitag 15. Januar 2010, 15:06
von kweenelizabeth
Hi Leonidas,
womit die binaries kompiliert wurden, kann ich ihnen nicht entnehmen. Das Release meiner Binaries ist 272 Tage also 9 Monate her. Ich habe Version 1.18a heruntergeladen, die enthält neben den Python-Bindings auch einige DLLs und EXE-Dateien.
Nach dem Inhalt der lcms.py vermute ich, dass mindestens Python 2.2 benötigt wird, als "except" steht z.B. in Zeile 13 "Python < 2.2 doesn't have 'property'".

Verfasst: Freitag 15. Januar 2010, 16:26
von Leonidas
Naja, dann wirst du es selbt kompilieren müssen, denn so wie es scheint sind die für Python 2.2 und funktionieren somit schon längst nicht mehr.

Verfasst: Freitag 15. Januar 2010, 20:33
von kweenelizabeth
Gut, hab ich zwar noch nie gemacht, deshalb folgende Frage: In einem anderen Post hast du auf: http://sebsauvage.net/python/mingw.html verwiesen, ich bin dieser Anleitung bis zu dem Schritt wo man die setup.py erzeugen soll gefolgt... Jetzt weiß ich aber genau was ich da alles reinschreiben soll.
Ich habe http://www.littlecms.com/lcms-1.19.zip heruntergeladen.
Das Archiv enthält verschiedene Dateien und Ordner, unter anderem einen Unterordner Python mit folgenden Dateien:

lcms.i
lcms.py
lcms_wrap.cxx
Makefile.am
Makefile.in
swig_lcms

Ich würde jetzt so was wie """
setup(name = "lcms Setup",
version = "1.19",
ext_modules = [Extension("lcms", ["lcms.i" ...

""" schreiben? Wie muss dieses Skript genau aussehen und welche Dateien gehören dazu?
Danke für eure Tips soweit.

Verfasst: Freitag 15. Januar 2010, 20:45
von Leonidas
Nein, lcms nutzt keine Distutils, da müsste man das Makefile nutzen. Führe doch mal in der Shell ``./configure --with-python`` aus und sag bescheid was dann passiert ist. Am besten du pastest die Ausgabe ins Pastebin.

Verfasst: Freitag 15. Januar 2010, 21:05
von kweenelizabeth
Ich kann mit dieser Anweisung leider nicht allzuviel anfangen, vielleicht könntest du das nochmal etwas ausführlicher darlegen?
Soll ich das in die Windows-Shell eingeben? Von welchem Ordner aus? Ist "configure" ein Befehl eine eigene Anwendung oder Bestandteil einer anderen?

Verfasst: Freitag 15. Januar 2010, 21:08
von Leonidas
kweenelizabeth hat geschrieben:Ich kann mit dieser Anweisung leider nicht allzuviel anfangen, vielleicht könntest du das nochmal etwas ausführlicher darlegen?
Also du brauchst die Bash (AFAIR Teil von MSYS) um das Konfigurationsskript laufen zu lassen.
kweenelizabeth hat geschrieben:Soll ich das in die Windows-Shell eingeben? Von welchem Ordner aus?
Von dem Ordner in dem der restliche lcms-Kram entpackt wurde.
kweenelizabeth hat geschrieben:Ist "configure" ein Befehl eine eigene Anwendung oder Bestandteil einer anderen?
``configure`` ist Teil des ZIP-Archives, es erstellt alle Dateien die notwendig sind um lcms zu kompilieren.

Verfasst: Freitag 15. Januar 2010, 22:35
von kweenelizabeth
OK, Danke, ich habe mir Bash installiert und "./configure --with-python" ausgeführt. Ich weiß grad nicht genau was das Pastebin ist...

[Edit (Leonidas): Paste ausgelagert.]

Verfasst: Samstag 16. Januar 2010, 00:26
von Leonidas
Ok, was man in Zeile 37 sieht ist, dass ``./configure`` kein Python findet - ist bei dir Python im ``%PATH%``? Wenn nicht, füge es hinzu und führe ``./configure --with-python`` nochmal aus und schau nach ob es diesmal gefunden wurde.

Verfasst: Samstag 16. Januar 2010, 00:44
von kweenelizabeth
OK, ich habs in die Umgebungsvariable eingehangen und neu "configured": http://paste.pocoo.org/show/165901/

Verfasst: Samstag 16. Januar 2010, 10:04
von Leonidas
kweenelizabeth hat geschrieben:OK, ich habs in die Umgebungsvariable eingehangen und neu "configured": http://paste.pocoo.org/show/165901/
Oh, das sieht schon sehr gut aus. Dann musst du mit den gleichen Umgebungsvariablen nun ``make`` ausführen, damit der lcms-Code mitsamt der Python-Erweiterung kompiliert wird. Danach solltest du vermutlich im python/-Ordner die passende lcms.pyd finden können.

Verfasst: Samstag 16. Januar 2010, 12:13
von kweenelizabeth
Bei ''make'' kommt es nun zu folgenden Fehlermeldungen:
http://paste.pocoo.org/show/165984/

Verfasst: Samstag 16. Januar 2010, 12:26
von Leonidas
kweenelizabeth hat geschrieben:Bei ''make'' kommt es nun zu folgenden Fehlermeldungen:
http://paste.pocoo.org/show/165984/
Das sind aber nicht alle Fehlermeldungen, oder? Das "on" oben impliziert dass da mindestens ein "cannot be used as a function"-Fehler ist. Und vermutlich auch noch eine Reihe weiterer Fehler die genau die sind, die interessieren.

Verfasst: Samstag 16. Januar 2010, 16:00
von kweenelizabeth
OK, ich bin halt noch sehr unerfahren Umgang mit den ganzen tools... Ich habe den Output von make mit > in eine Datei umgeleitet, die enthielt folgendes: http://paste.pocoo.org/show/166039/ Allerdings entspricht das ja nicht den letzten Bildschirmausgaben aus dem vorherigen Post. Wie kann ich die denn einfangen?

Verfasst: Samstag 16. Januar 2010, 19:11
von Leonidas

Code: Alles auswählen

make &> dein_dateiname
(und ja, ich vergesse die Umleitungssyntax ganz oft und muss immer nachschauen)

Verfasst: Samstag 16. Januar 2010, 21:00
von kweenelizabeth
gut Danke, hier also nun die vollständige Ausgabe: http://paste.pocoo.org/show/166136/

Verfasst: Samstag 16. Januar 2010, 21:24
von Leonidas
OK, offensichtlich findet er die ``Python.h`` nicht (Zeile 109), du musst wohl den Pfad zu deiner ``Python.h`` manuell angeben:

Code: Alles auswählen

$ CPPFLAGS="-I<Pfad zur Python.h>" ./configure --with-python
make

Verfasst: Sonntag 17. Januar 2010, 00:21
von kweenelizabeth

Code: Alles auswählen

CPPFLAGS="-I c:\python26\include" ./configure --with-python
make 
Ändert leider nichts am Ergebnis, die Python.h wird immer noch nicht gefunden.