2010-05-21 2 views
4

Я запускаю Python 3.1 в Windows, и я пытаюсь распространять скрипт Pygame как исполняемый файл через cx_Freeze. Сейчас это, кажется, работает за исключением того, что ех сборка не может загрузить любого из моих изображений:SDL/Pygame не загружает изображения PNG с помощью cx_Freeze

Cannot load image: C:\path\to\build\exe.win32-3.1\resources\image.png 
File is not a Windows BMP file 

Googling показал, что это происходит, когда SDL библиотека изображений не некорректные включена. Тем не менее, SDL_image.dll и libpng12-0.dll оба помещены cx_Freeze в мой каталог сборки, поэтому мне кажется, что все должно быть хорошо. Почему бы не загрузить PNG-изображения?

EDIT: Я решил эту проблему, поместив мой сценарий в Python 2.6 и используя py2exe, так как у него была какая-то функциональность, которая мне нужна.

+0

Это работает до замораживания ?. что произойдет, если вы конвертируете файл в .bmp? – joaquin

+0

Да, он отлично работает перед замораживанием. Если я конвертирую изображения в .bmp, они загружаются нормально, но я бы скорее предпочел использовать .png, если это возможно. – tankadillo

ответ

1

Протестируйте, вставив некоторый код python, чтобы отобразить одно сообщение, указывающее, что библиотеки загружены, и другое сообщение, чтобы указать, что их загрузка привела к ошибке.

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" 
+0

Я больше не использую cx_freeze (см. Выше), но я буду принимать это как ответ. – tankadillo

2

Я столкнулся с той же проблемой много раз, но я узнал, как с этим бороться.

Проблема Кажется, что существует конфликт между двумя возможными зависимостями. Файл jpeg.dll входит в состав JRE (в Windows, что-то вроде C:\Program Files\Java\jre6\bin\), но это неверно. Он должен быть включен в каталог Pygame, расположенный в вашей установке Python, по адресу C:\Python31\lib\site-packages\pygame\. Не знаю, почему cx_Freeze предпочитает один из JRE, хотя ...

Как это исправить? Это довольно просто. Просто скопируйте правильный файл (тот из Pygame) в каталог, в котором вы выполняете скрипт cx_Freeze. Когда вы его запустите, сценарий будет сначала искать в текущем каталоге и найдет правильный jpeg.dll. Ваш исполняемый файл должен иметь возможность импортировать изображения PNG.