Стандартный ответ о копировании каталога GTK + bin, etc, share и lib в
каталог dist проекта правильный (но я вижу, что кто-то вандализировал [1] и
bin отсутствует в списке), в конце концов:
- PyGTK - не более чем тонкий слой клея, делающий GTK + доступным для Python
- PyGObject - это не что иное, как тонкий слой клея, делающий GObject, GIO, ... доступным для Python
- PyCairo - не что иное, как тонкий слой клея, делающий Cairo доступным для Python
Как минимум, вам нужны все 3 из этих пакетов привязок и из-за их
природа они бесполезны, если базовая платформа недоступна (файлы .dll,
файлы конфигурации, короче говоря: весь шебанг). Вот почему GTK +
bin, etc, share и lib необходимо скопировать в каталог dist вашего проекта.
Фрагмент setup.py, который я опубликовал пару лет назад в [1], очень тонок
неполный. Правильная версия должна была быть:
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 все созданы в
Папка dist / bin для py2exe. Затем, когда вы копируете каталоги 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 '.