2010-12-10 4 views
-1

Я написал графическое приложение на Python с использованием PyGTK и хочу распространять его как исполняемый файл, для которого я использую py2exe. Когда я запускаю свою программу, я получаю следующее предупреждениеОтображение изображений в программе Py2exe'd PyGTK

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 и использовать эти идеи?

+0

Я не уверен, но я подозреваю, что вам нужно будет установить gtk-2.0 в систему. http://www.gtk.org/download-windows.html –

+0

@Aaron, gtk-2.0 установлен в системе. –

ответ

0

Если вы используете py2exe, вы должны упаковать GTK + (и т.д., общий, 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 

У вас есть эта структура каталогов?

+0

Я не верю, что это требование для большинства приложений py2exe, но у меня по-прежнему возникает проблема с этой структурой. –

0

Стандартный ответ копирования GTK + 's бен, и т.д., доля и каталог Lib в DIST каталог проекта является правильным (но я вижу, кто-то варварски [1] и бин отсутствует в списке), после того, как все:

  • PyGTK не более чем тонкий слой клея делает GTK + доступен на Python
  • PyGObject не более чем тонкий слой клея делает GObject, ПИБ, ... доступно для Python
  • PyCairo не более чем тонкий слой клея делает Каир доступны для Python

Как минимум, вам нужно все три из этих привязок пакетов и из-за их природе они бесполезны, если базовая платформа не является доступные (.dll файлы, конфигурационные файлы, словом: весь shebang). Вот почему 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 + в каталог dist2exe , ваш исполняемый файл живет рядом с libgtk-win32-2.0.0.dll и другими , как и должно быть. Если вы не сделаете это выше, неправильно сконфигурированная переменная PATH может помешать работе с (иногда несовместимыми) DLL-файлами ваших загрузочных нагрузок py2exe'd .

Итак, для вышеуказанной настройки.пй файл, правильная структура каталогов дист должна выглядеть следующим образом:

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, Dieter

[1] http://www.py2exe.org/index.cgi/Py2exeAndPyGTK

Редактировать 2011/07/05: исправлена ​​опция включения для PyGObject 2.28/PyGTK 2.24. Если вы используете только PyGObject 2.28, опция includes имеет , чтобы содержать «glib, gio, gobject». Если вы используете PyGTK, тогда ему нужны: 'glib, gio, gobject, cairo, atk, pango, pangocairo, gtk'.

 Смежные вопросы

  • Нет связанных вопросов^_^