我在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.dll
和libpng12-0.dll
都被cx_Freeze放入我的构建目录中,因此在我看来,一切都应该没问题。为什么它不能加载PNG图像?
编辑:我通过将我的脚本移植到Python 2.6并使用py2exe来“解决”了这个问题,因为它有一些我需要的功能。
答案 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"