SDL / Pygame Неспособность загружать изображения PNG с CX_FREEZE
Вопрос
Я бегаю Python 3.1 на окнах, и я пытаюсь распространить свой сценарий 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
Googling показал, что это происходит, когда библиотека визуализации SDL не будет включена правильно. Однако, SDL_image.dll
а также libpng12-0.dll
Оба поставляются CX_FREEZE в мой каталог сборки, поэтому мне кажется, что все должно быть в порядке. Почему бы он не сможет загрузить PNG изображения?
Редактировать: Я «решил» эту проблему, портив мой скрипт в Python 2.6 и вместо этого использую Py2exe, поскольку в любом случае у него есть некоторые функциональные возможности.
Решение
Испытайте, вставляя несколько Python Code для отображения одного сообщения, указывающего, что библиотеки загружаются и другое сообщение, чтобы указать, что их нагрузка привела к ошибке.
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"
Другие советы
Я столкнулся с той же проблемой много раз, но я узнал, как с этим разобраться.
Эта проблема Кажется, что существует конфликт между двумя возможными зависимостями. Файл 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 сейчас.