Python3-PyGObject プログラムを pynsist でパッケージ化したいと考えています。リポジトリには 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 バンドル内にある必要があるというのが私の現在の理解であるため、4 行目で何をすべきかわかりません。
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 にインストールした後、test-program を開始すると、次のトレースバックが生成されます。
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.
_gi.pyd
と同じディレクトリ ( gi
) に-fileがあるために、この ImportError が発生するのは奇妙です。__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:
これは import-error に役立つかもしれません: