用py2exe捆绑GTK3 +

use*_*043 5 python gtk py2exe pygobject

平台是Windows 7 64位使用python 2.7和GTK3 +从http://sourceforge.net/projects/pygobjectwin32/files/?source=navbar安装

由于这个原因,exe被编译但无法运行

The following modules appear to be missing
['gi.repository.Gdk', 'gi.repository.Gtk', 'overrides.registry']
Run Code Online (Sandbox Code Playgroud)

我怎样才能正确包含这些文件?

在我的.py文件中导入

from gi.repository import Gtk, Gdk
Run Code Online (Sandbox Code Playgroud)

我的安装文件

#!/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
)
Run Code Online (Sandbox Code Playgroud)

运行时的可执行错误:

ImportError: MemoryLoadLibrary failed loading gi\_gi.pyd
Run Code Online (Sandbox Code Playgroud)

谢谢

gia*_*nmt 2

我还没有在 64 位上测试过它,但这是我用来使用 cx_freeze 构建的 setup.py,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
)
Run Code Online (Sandbox Code Playgroud)

根据您使用的库,您可能需要添加一些缺少的 dll,请查看 cx_freeze 的输出。

我前段时间在 gnome 的 wiki 上发布了同样的内容: https: //wiki.gnome.org/Projects/PyGObject#Building_on_Win32_with_cx_freeze