我使用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并使用这些想法?
答案 0 :(得分:0)
如果您使用的是py2exe,则必须在您的项目中以与exe相同的级别打包gtk +(etc,shared,lib):
示例目录结构:
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
你有那个目录结构吗?
答案 1 :(得分:0)
将GTK +的 bin等,共享和lib 目录复制到 project的dist目录是正确的(但我看到有人破坏了[1]和 毕竟, bin 在列表中缺失了):
至少,您需要所有这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'}
}
)
记下 zipfile 和 dest_base 的值。有了这些选择 你的.exe,一堆.pyd文件和library.zip都是在 py2exe的dist / bin目录。然后当你将GTK +的目录复制到py2exe的时候 dist目录你的可执行文件就在libgtk-win32-2.0.0.dll等旁边 应该如此。如果您不执行上述操作,则配置错误的PATH环境 变量可能会干扰你的.dll文件(有时是不兼容的) py2exe'd可执行加载。
因此对于上面的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] http://www.py2exe.org/index.cgi/Py2exeAndPyGTK
编辑2011/07/05:修复了PyGObject 2.28 / PyGTK 2.24的包含选项。 如果您只使用PyGObject 2.28,则包含选项 包含'glib,gio,gobject'。如果您正在使用PyGTK,那么它需要: 'glib,gio,gobject,cairo,atk,pango,pangocairo,gtk'。