Python 在py2exe'中显示图像;d-PyGTK程序

Python 在py2exe'中显示图像;d-PyGTK程序,python,gtk,pygtk,py2exe,pixbuf,Python,Gtk,Pygtk,Py2exe,Pixbuf,我已经使用PyGTK在Python中编写了一个GUI应用程序,并希望将其作为可执行文件分发,为此我使用py2exe。当我运行我的程序时,我得到以下警告 GdkPixbuf-WARNING **: Cannot open pixbuf loader module file 'gtk-2.0\gdk-pixbuf.loaders': No such file or directory 即使存在dist\etc\gtk-2.0\gdk pixbuf.loaders,我的图像也不会显示 如何将我的程序

我已经使用PyGTK在Python中编写了一个GUI应用程序,并希望将其作为可执行文件分发,为此我使用py2exe。当我运行我的程序时,我得到以下警告

GdkPixbuf-WARNING **: Cannot open pixbuf loader module file 'gtk-2.0\gdk-pixbuf.loaders': No such file or directory
即使存在
dist\etc\gtk-2.0\gdk pixbuf.loaders
,我的图像也不会显示


如何将我的程序打包为Windows exe并使用这些想象?

如果您使用的是py2exe,则必须将gtk+(etc,shared,lib)打包到与exe相同级别的项目中:

目录结构示例:

PROGRAM.exe
LOT_OF_PYD_AND_LIB_FILES...
etc
etc\fonts
etc\gtk-2.0
etc\pango
lib
lib\gtk-2.0
share
share\aclocal
share\glib-2.0
share\locale
share\themes

你有那种目录结构吗?

将GTK+的bin等、share和lib目录复制到 项目的dist目录是正确的(但我看到有人破坏了[1]和 bin在列表中缺失),毕竟:

  • PyGTK不过是一层薄薄的胶水,使GTK+可供Python使用
  • PyGObject不过是一层薄薄的胶水,用来制作GObject,GIO。。。可供Python使用
  • PyCairo不过是一层薄薄的胶水,使Python可以使用Cairo
至少,您需要所有3个绑定包,并且由于它们的 如果基础平台不可用(.dll文件, 配置文件,简而言之:整个shebang)。这就是为什么GTK+是 bin等、share和lib需要复制到项目的dist目录中

然而,几年前我在[1]上发布的setup.py片段非常微妙 不完整。正确的版本应该是:

from distutils.core import setup
import py2exe

setup(
    name = 'handytool',
    description = 'Some handy tool',
    version = '2.0',
    zipfile = 'bin/library.zip',
    windows = [{'script': 'handytool.py',
                'dest_base': 'bin/handytool'}
              ],

    options = {'py2exe': {'packages':'encodings',
                          'includes': 'glib, gio, gobject, cairo, atk, pango, pangocairo, gtk'}
              }
)
注意zipfiledest_base的值。使用这些选项 您的.exe、一堆.pyd文件和library.zip都是在中创建的 py2exe的dist/bin目录。然后,当您将GTK+的目录复制到py2exe的目录时 dist目录您的可执行文件位于libgtk-win32-2.0.0.dll等的旁边 应该如此。如果不执行上述操作,则会导致路径环境配置错误 变量可能会干扰您的.dll文件(有时不兼容) py2exe的可执行文件加载

因此,对于上面的setup.py文件,应该使用dist的正确目录结构 像这样:

bin/handytool.exe
bin/library.zip
bin/*.pyd (all .pyd files py2exe deemed needed)
bin/* (complete copy of GTK+ runtime bin dir)
etc/* (complete copy of GTK+ runtime etc dir)
share/* (complete copy of GTK+ runtime share dir)
lib/* (complete copy of GTK+ runtime lib dir)
当您正确执行上述操作时,您会发现加载图像 只要有效,你就可以开始考虑省略部分内容 分享/(比如你不想要/不需要的翻译文件)等

mvg, 迪特尔

[1]

编辑2011/07/05:修复了PyGObject 2.28/PyGTK 2.24的包含选项。 如果您只使用PyGObject 2.28,则包含选项 要包含“油嘴滑舌、gio、gobject”。如果您使用的是PyGTK,那么它需要:
“glib、gio、gobject、cairo、atk、pango、pangocairo、gtk”。

我不确定,但我怀疑您需要在系统上安装gtk-2.0@Aaron,gtk-2.0安装在系统上。我不认为这是大多数py2exe应用程序的要求,但我仍然存在该结构的问题。