Bundling GTK3 + con py2exe

La plataforma es Windows 7 64bit usando python 2.7 y GTK3 + instalado desde http://sourceforge.net/projects/pygobjectwin32/files/?source=navbar

El exe está comstackdo pero no se ejecuta, debido a esto

The following modules appear to be missing ['gi.repository.Gdk', 'gi.repository.Gtk', 'overrides.registry'] 

¿Cómo puedo incluir correctamente estos archivos?

importa en mi archivo .py

 from gi.repository import Gtk, Gdk 

mi archivo de configuración

 #!/usr/bin/env python from distutils.core import setup import py2exe, sys sys.path.append("C:\Python27\Lib\site-packages\gnome") sys.path.append("C:\Python27\Lib\site-packages\repository")#tried including these extra dirs sys.path.append("C:\Python27\Lib\site-packages\override")#tried including these extra dirs sys.path.append("C:\Python27\Lib\site-packages\gi") #tried including these extra dirs setup( options = { 'py2exe': { 'bundle_files': 1, #this does not work 'includes': ['Gtk'] } }, console=["gui.py"], zipfile=None ) 

El error ejecutable cuando se ejecuta:

 ImportError: MemoryLoadLibrary failed loading gi\_gi.pyd 

Gracias

Necesitas agregar “gi” a “paquetes”.

 'options': { 'py2exe': { 'packages': 'gi', } } 

No lo he probado en 64 bits, pero este es el setup.py que he usado para comstackr con cx_freeze, el py2exe parece que no se mantiene por mucho tiempo.

 from cx_Freeze import setup, Executable import os, site, sys ## Get the site-package folder, not everybody will install ## Python into C:\PythonXX site_dir = site.getsitepackages()[1] include_dll_path = os.path.join(site_dir, "gtk") ## Collect the list of missing dll when cx_freeze builds the app missing_dll = ['libgtk-3-0.dll', 'libgdk-3-0.dll', 'libatk-1.0-0.dll', 'libcairo-gobject-2.dll', 'libgdk_pixbuf-2.0-0.dll', 'libjpeg-8.dll', 'libpango-1.0-0.dll', 'libpangocairo-1.0-0.dll', 'libpangoft2-1.0-0.dll', 'libpangowin32-1.0-0.dll', 'libgnutls-26.dll', 'libgcrypt-11.dll', 'libp11-kit-0.dll' ] ## We also need to add the glade folder, cx_freeze will walk ## into it and copy all the necessary files glade_folder = 'glade' ## We need to add all the libraries too (for themes, etc..) gtk_libs = ['etc', 'lib', 'share'] ## Create the list of includes as cx_freeze likes include_files = [] for dll in missing_dll: include_files.append((os.path.join(include_dll_path, dll), dll)) ## Let's add glade folder and files include_files.append((glade_folder, glade_folder)) ## Let's add gtk libraries folders and files for lib in gtk_libs: include_files.append((os.path.join(include_dll_path, lib), lib)) base = None ## Lets not open the console while running the app if sys.platform == "win32": base = "Win32GUI" executables = [ Executable("main.py", base=base ) ] buildOptions = dict( compressed = False, includes = ["gi"], packages = ["gi"], include_files = include_files ) setup( name = "test_gtk3_app", author = "Gian Mario Tagliaretti", version = "1.0", description = "GTK 3 test", options = dict(build_exe = buildOptions), executables = executables ) 

Dependiendo de las bibliotecas que haya usado, puede que tenga que agregar algunos dll faltantes, mire la salida de cx_freeze.

He publicado lo mismo hace algún tiempo en la wiki de gnome: https://wiki.gnome.org/Projects/PyGObject#Building_on_Win32_with_cx_freeze