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

有帮助吗?

解决方案

通过插入一些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图像。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top