2014-01-08 9 views
5

платформой является Windows 7 64bit с помощью Python 2.7 и GTK3 + устанавливаются с http://sourceforge.net/projects/pygobjectwin32/files/?source=navbarПакетирование GTK3 + с py2exe

ех компилируется, но не запускается из-за этот

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

Как я могу правильно включать эти файлы ?

импорт в моем .py файле

from gi.repository import Gtk, Gdk 

моего файл установка

#!/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 
) 

Исполняемых ошибки при гласил:

ImportError: MemoryLoadLibrary failed loading gi\_gi.pyd 

Благодарность

ответ

2

Я не проверял он на 64-битной, но это tup.py Я использовал для сборки с помощью cx_freeze, похоже, что py2exe не поддерживается в течение длительного времени.

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 
) 

В зависимости от библиотек, которые вы использовали, возможно, придется добавить недостающую библиотеку DLL, смотрите на выходе cx_freeze.

Я отправил то же самое некоторое время назад на вики гнома: https://wiki.gnome.org/Projects/PyGObject#Building_on_Win32_with_cx_freeze

+0

Я играл с этим, чтобы связать мое приложение pyGObject для окон, я заметил, что весь рабочий каталог вырос с 50meg до 180meg (PyGTK -> pygobject). – Naib

+0

Вы можете уменьшить это. Я получил это около 56meg – Naib

+0

Рекомендация другого инструмента не отвечает на вопрос. py2exe действительно активно поддерживается, и у меня гораздо больше проблем с cx_freeze. – CodeMouse92

4

Вам нужно добавить «Г» в «пакетах».

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