2010-05-21 90 views
4

我在Windows上运行Python 3.1,我试图通过cx_Freeze将我的Pygame脚本作为可执行文件分发。现在看来只是EXE构建不能加载任何图像进行工作:SDL/Pygame无法使用cx_Freeze加载PNG图像

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放到我的build目录中,所以在我看来,一切都应该没问题。为什么它不能加载PNG图像?

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

+0

冻结之前它可以工作吗?如果将文件转换为.bmp,会发生什么情况? – joaquin 2010-05-21 15:12:11

+0

是的,冻结前它工作得很好。如果我将图像转换为.bmp,它们会加载正常,但我宁愿有可能使用.png的选项。 – tankadillo 2010-05-21 15:18:48

回答

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 2010-05-28 15:41:40

2

我多次遇到同样的问题,但我发现如何处理它。

问题 似乎两个可能的依赖关系之间存在冲突。文件jpeg.dll包含在JRE中(在Windows上,类似C:\Program Files\Java\jre6\bin\),但它是错误的。它应该包含在您的Python安装中的Pygame目录中,位于C:\Python31\lib\site-packages\pygame\。不知道为什么cx_Freeze更喜欢JRE的那个,但...

如何解决它? 这很容易。只需将正确的文件(Pygame中的文件)复制到您执行cx_Freeze脚本的目录。当您启动它时,脚本将首先查看当前目录,并将找到正确的jpeg.dll。您的可执行文件现在应该能够导入PNG图像。