SDL / Pygame无法使用cx_Freeze加载PNG图像

时间:2010-05-21 15:06:09

标签: python sdl pygame cx-freeze

我在Windows上运行Python 3.1,并且我试图通过cx_Freeze将我的Pygame脚本分发为可执行文件。现在它似乎工作,除了exe版本无法加载我的任何图像:

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

谷歌搜索显示,当SDL成像库未正确包含时会发生这种情况。但是,SDL_image.dlllibpng12-0.dll都被cx_Freeze放入我的构建目录中,因此在我看来,一切都应该没问题。为什么它不能加载PNG图像?

编辑:我通过将我的脚本移植到Python 2.6并使用py2exe来“解决”了这个问题,因为它有一些我需要的功能。

2 个答案:

答案 0 :(得分: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图像。

答案 1 :(得分: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"