4

我在 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 “解决”了这个问题,因为它有一些我需要的功能。

4

2 回答 2

2

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

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

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

于 2012-01-01T23:50:55.100 回答
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"
于 2010-05-25T17:04:50.667 回答