SDL/PYGAME无法使用CX_FREEZE加载PNG图像
题
我正在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来“解决”此问题,因为它具有我需要的一些功能。
解决方案
通过插入一些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"
其他提示
我遇到了很多次同样的问题,但是我发现了如何处理它。
问题 似乎两个可能的依赖关系之间存在冲突。文件 jpeg.dll
来自JRE(在Windows上,类似于 C:\Program Files\Java\jre6\bin\
),但这是错误的。它应该从位于Python安装中的Pygame Directory中包括在 C:\Python31\lib\site-packages\pygame\
. 。不知道为什么cx_freeze更喜欢从JRE中使用的……
如何修复?这很容易。只需将正确的文件(从PyGame)复制到执行CX_FREEZE脚本的目录。当您启动它时,脚本将首先在当前目录中查看,并找到正确的 jpeg.dll
. 。您的可执行文件应该能够立即导入PNG图像。
不隶属于 StackOverflow