SDL / Pygame Fehler PNG-Bilder mit cx_Freeze laden
Frage
Ich bin Python 3.1 auf Windows läuft und ich versuche mein Pygame Skript als eine ausführbare Datei über cx_Freeze zu verteilen. Im Augenblick scheint es, außer zu arbeiten, dass die exe Build kann nicht irgendwelche meiner Bilder laden:
Cannot load image: C:\path\to\build\exe.win32-3.1\resources\image.png
File is not a Windows BMP file
Googeln hat ergeben, dass dies geschieht, wenn die SDL Imaging-Bibliothek nicht richtig aufgenommen bekommen. Allerdings SDL_image.dll
und libpng12-0.dll
sind beide Put von cx_Freeze in meinem Build-Verzeichnis, so dass es wie alles, was mir scheint, sollte in Ordnung sein. Warum sollte es nicht möglich sein, PNG-Bilder zu laden?
EDIT: Ich „gelöst“ dieses Problem durch meinen Skript zu Python 2.6 zu portieren und mit py2exe statt, da es einige Funktionen hatte sowieso, dass ich brauchte
.Lösung
Test durch einige Python-Code Einfügen einer Nachricht anzuzeigen, die angibt, dass die Bibliotheken geladen haben und eine andere Nachricht, um anzuzeigen, dass ihre Belastung zu einem Fehler geführt hat.
try:
import SDL_image
print "Loaded SDL_image"
except:
print "Failed to import SDL_image"
try:
import libpng
print "Loaded libpng"
except:
print "Failed to import libpng"
Andere Tipps
Ich traf das gleiche Problem oft, aber ich fand heraus, wie man damit umgehen.
Das Problem
Es scheint, dass es einen Konflikt zwischen zwei möglichen Abhängigkeiten ist. Die Datei jpeg.dll
wird von der JRE (unter Windows, so etwas wie C:\Program Files\Java\jre6\bin\
) enthalten, aber es ist die falsche. Es sollte aus dem Pygame Verzeichnis, die sich innerhalb Ihrer Python-Installation, bei C:\Python31\lib\site-packages\pygame\
enthalten sein. Sie wissen nicht, warum cx_Freeze das eine vom JRE vorzieht, obwohl ...
Wie es zu beheben?
Es ist ganz einfach. Kopieren Sie einfach die richtige Datei (die von Pygame) in das Verzeichnis, in dem Sie das cx_Freeze Skript auszuführen. Wenn Sie es starten, wird das Skript zunächst im aktuellen Verzeichnis suchen, und den korrekten jpeg.dll
finden. Ausführbare Datei sollte nun PNG-Bilder importieren Lage sein.