我想用 pynsist 打包一个 Python3-PyGObject 程序。该存储库有一个 PyGTK 示例,它让我认为更改示例应该不会太难。
该示例可以在这里找到:
在这个文件(https://github.com/takluyver/pynsist/blob/master/examples/pygtk/grab_files.sh)中,我认为只需获取针对 GTK 3 的文件(http://www.gtk.org /下载/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
) 中有一个 -file 与__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
了 pygobject 绑定的文件夹。我创建包的 Linux 是 64 位的,而我运行程序的 Windows 也是 64 位的。
编辑2:
使用 Dependency-Walker 我可以看到缺少 2 个 DLL:GPSVC.DLL
和IESHIMS.DLL
.
编辑3:
我在系统上找到了这 2 个 DLL 并将它们复制到测试程序的不同目录中,但它不起作用。
编辑4:
这可能对导入错误有用: