Python 在py2exe'中显示图像;d-PyGTK程序
我已经使用PyGTK在Python中编写了一个GUI应用程序,并希望将其作为可执行文件分发,为此我使用py2exe。当我运行我的程序时,我得到以下警告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,我的图像也不会显示 如何将我的程序
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
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'}
}
)
注意zipfile和dest_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应用程序的要求,但我仍然存在该结构的问题。