Пакет PyGObject Python 3 с программой pynsist?
Я хотел бы упаковать программу Python3-PyGObject с помощью pynsist. В репозитории есть пример для PyGTK, и это заставило меня подумать, что не должно быть слишком сложно изменить пример.
Пример можно найти здесь:
https://github.com/takluyver/pynsist/tree/master/examples/pygtkВ этом файле (https://github.com/takluyver/pynsist/blob/master/examples/pygtk/grab_files.shЯ думаю, что нужно просто взять файлы, предназначенные для GTK 3 (http://www.gtk.org/download/win32.php):
wget -O gtkbundle.zip http://win32builder.gnome.org/gtk+-bundle_3.6.4-20130921_win32.zip
wget -O pygobject.exe http://sourceforge.net/projects/pygobjectwin32/files/pygi-aio-3.14.0_rev12-setup.exe/download
wget -O pycairo.zip http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/cairo_1.10.2-2_win32.zip
Я не уверен, что делать с четвертой строкой, потому что, насколько я понимаю, эти привязки уже должны быть внутри пакета gtk или pygobject:
wget -O pygtk.exe http://ftp.gnome.org/pub/GNOME/binaries/win32/pygtk/2.24/pygtk-2.24.0.win32-py2.7.exe
Затем я попытался настроить этот файл (https://github.com/takluyver/pynsist/blob/master/examples/pygtk/installer.cfg) включить (использоватьgi
вместоgi.repository
):
[Include]
packages=gi
Это приводит к ошибке:
raise ExtensionModuleMismatch(extensionmod_errmsg % ('Windows', path)) nsist.copymodules.ExtensionModuleMismatch: Found an extension module that will not be usable on Windows: /usr/lib/python3/dist-packages/gi/_gi.cpython-34m-x86_64-linux-gnu.so Put Windows packages in pynsist_pkgs/ to avoid this.
Кто-нибудь знает, каков правильный подход к программе (например, один из них:https://python-gtk-3-tutorial.readthedocs.org) было бы?
Редактировать 1После упаковки и установки программы в Windows запуск тестовой программы приводит к следующей трассировке:
Traceback (most recent call last):
File "C:\Program Files (x86)\hellogtk\hellogtk.launch.pyw", line 31, in <module>
from gtk_test import main
File "C:\Program Files (x86)\hellogtk\pkgs\gtk_test.py", line 3, in <module>
from gi.repository import Gtk
File "C:\Program Files (x86)\hellogtk\pkgs\gi\__init__.py", line 42, in <module>
from . import _gi
ImportError: DLL load failed: The specified module could not be found.
Странно, что это ImportError происходит, потому что есть_gi.pyd
-файл в том же каталоге (gi
) как__init__.py
Это текущий макет:
- directory
|- pynsist_pkgs
|-- cairo
|--- _cairo.pyd
|--- __init__.py
|-- gi
|--- _gobject
|--- overrides
|--- repository
|--- __init__.py
|--- _gi.pyd
|--- ...
|-- gtk
|--- bin
|--- etc
|--- lib
|--- manifest
|--- share
|-- dbus
|--- __init__.py
|--- ...
|-- gnome
|--- ...
|-- pygtkcompat
|--- ...
|-- _dbus_bindings.pyd
|-- _dbus_glib_bindings.pyd
|-- ...
|- gtk_test.py
|- grab_files.sh
|- installer.cfg
|- gtk_preamble.py
И я использовалpy-3.4-64
папка привязок пигобъекта. Linux, на котором я создаю пакет, является 64-битным, и Windows, на которой я запускаю программу, также является 64-битной.
Используя Dependency-Walker, я вижу, что отсутствуют 2 DLL:GPSVC.DLL
а такжеIESHIMS.DLL
.
Я нашел эти 2 DLL в системе и скопировал их в разные каталоги тестовой программы, но это не сработало.
Изменить 4:Это может быть полезно для ошибки импорта:
import gtk / glib выдает ImportError: сбой загрузки DLL