SDL / Pygame не удалось загрузить изображения PNG с помощью cx_Freeze - PullRequest
4 голосов
/ 21 мая 2010

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

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

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

РЕДАКТИРОВАТЬ: я "решил" эту проблему, портировав свой скрипт на Python 2.6 и используя вместо этого py2exe, поскольку он в любом случае имел некоторую функциональность, которая мне была нужна.

Ответы [ 2 ]

2 голосов
/ 02 января 2012

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

Проблема Кажется, что существует конфликт между двумя возможными зависимостями. Файл 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.

1 голос
/ 25 мая 2010

Проверьте, вставив код 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"
...