SDL / Pygame ne pas charger des images PNG avec cx_Freeze
Question
Je suis en cours d'exécution Python 3.1 sous Windows et je suis en train de distribuer mon script Pygame comme un exécutable via cx_Freeze. À l'heure actuelle, il semble fonctionner, sauf que la construction exe ne peut pas charger une de mes images:
Cannot load image: C:\path\to\build\exe.win32-3.1\resources\image.png
File is not a Windows BMP file
recherche sur Google a révélé que cela se produit lorsque la bibliothèque d'imagerie SDL ne soit pas inclus correctement. Cependant, SDL_image.dll
et libpng12-0.dll
sont tous les deux mis en cx_Freeze dans mon répertoire de construction, il me semble que tout devrait bien. Pourquoi ne serait-il être en mesure de charger des images PNG?
EDIT: Je « résolu » ce problème en transférant mon script Python 2.6 et d'utiliser à la place py2exe car il avait certaines fonctionnalités de toute façon que je avais besoin
.La solution
test par l'insertion du code de python pour afficher un message indiquant que les bibliothèques ont chargé et un autre message indiquant que leur chargement a entraîné une erreur.
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"
Autres conseils
j'ai rencontré la même question à plusieurs reprises, mais je l'ai trouvé comment y faire face.
Le problème
Il semble qu'il y ait un conflit entre deux sortes de dépendances. Le fichier jpeg.dll
est inclus dans le JRE (sous Windows, quelque chose comme C:\Program Files\Java\jre6\bin\
), mais il est le mauvais. Il devrait être inclus dans le répertoire Pygame, situé à l'intérieur de votre installation Python, à C:\Python31\lib\site-packages\pygame\
. Je ne sais pas pourquoi cx_Freeze préfère celle de JRE, mais ...
Comment résoudre ce problème?
Il est assez facile. Il suffit de copier le fichier correct (celui de Pygame) dans le répertoire dans lequel vous exécutez le script cx_Freeze. Lorsque vous lancer, le script regardera dans le répertoire courant d'abord, et trouvera la jpeg.dll
correcte. Votre exécutable devrait être en mesure d'importer des images PNG maintenant.