不能在py2exe中包含gi.repository.Gtk

时间:2014-11-12 05:50:26

标签: python python-3.x py2exe pygobject

我有一个Python 3.4和GTK + 3的项目。我在Windows XP SP3 32位(VirtualBox)上。

我需要使用py2exe编译成可执行文件。 (不要建议使用cx_freeze。这个项目的问题比py2exe高十倍。)

我的setup.py如下。

#!/usr/bin/python

from setuptools import setup
import py2exe

setup(name="Redstring",
    version="2.0",
    description="REDundant STRING generator",
    author="MousePaw Labs",
    url="http://www.mousepawgames.com/",
    maintainer_email="info@mousepawgames.com",
    data_files=[("", ["redstring.png", "redstring_interface.glade"])],
    py_modules=["redstring"],
    windows=[{'script':'redstring.py'}],
    options={"py2exe":{
        "unbuffered": True,
        "compressed":True,
        "bundle_files": 1,
        'packages':['gi.repository'],
        }},
    zipfile=None
    )

当我通过C:\Documents and Settings\Jason\Desktop\redstring2>python setup.py py2exe运行时,我得到以下输出(完整)。

running py2exe
running build_py

  1 missing Modules
  ------------------
? gi.repository.Gtk                   imported from __SCRIPT__
Building 'dist\redstring.exe'.

C:\Documents and Settings\Jason\Desktop\redstring2>

实际脚本redstring.py在我的Windows环境中顺利运行。在那里,我有以下(工作)代码行:from gi.repository import Gtk这就是我从整个项目中的gi.repository导入的所有内容。

如果我将setup.py中的行交换为'packages':['gi'],,则错误输出会切换到大约24个奇数缺失的模块,所有这些模块都属于gi.repository。如果我尝试导入" Gtk"或" gi.repository.Gtk"在'packages':'includes':中,我收到的错误是找不到要导入的文件。

我今天在#python(IRC频道)上花了八个小时,没人能解决这个问题。本周我需要打包到Windows二进制文件。

注意:This question不重复;虽然这是一个类似的问题,但它是a)不一样的错误信息,b)两个答案都没有以任何方式解决问题。

1 个答案:

答案 0 :(得分:1)

首先,我解决了这个问题,降级到Python 2.7。 (GTK + 3.8仍然没问题。)py2exe显然已经知道了Python 3的问题。

其次,我换了......

options={"py2exe": {
    "bundle_files": 1, 
}

options={"py2exe": {
    "bundle_files": 3, 
}

出于某种原因,当'bundle_files'设置为12时,py2exe无法包含运行gi库所需的某些文件。

可以在GitHub找到适用于我的项目的py2exe的完整setup.py。我使用python setup.py py2exe在cmd上运行它。