解决py2exe打包问题

时间:2008-10-20 06:46:22

标签: python user-interface py2exe

我为py2exe编写了一个setup.py脚本,为我的python GUI应用程序生成了一个可执行文件,我在dist目录中有一大堆文件,包括app,w9xopen.exe和MSVCR71.dll。当我尝试运行应用程序时,我收到一条错误消息,只是说“请参阅日志文件了解详细信息”。唯一的问题是,日志文件为空。

我见过的最接近的错误是“以下模块似乎缺失”但据我所知,我没有使用任何这些模块(特别是因为它们似乎是我不使用的数据库)但是挖掘谷歌表明这些是相对良性的警告。

我编写并打包了一个控制台应用程序以及一个带py2exe的wxpython应用程序,这两个应用程序都已编译并成功运行。我正在使用一个名为dabo的新python工具包,它反过来使用wxpython模块,所以我无法弄清楚我做错了什么。我从哪里开始调查问题,因为显然日志文件不是太有用了?

编辑1: python版本是2.5。 py2exe是0.6.8。没有明显的构建错误。唯一的一个是关于“以下模块似乎缺失...”这一点是非关键错误,因为列出的包是我绝对不使用的,也不应该停止应用程序的执行。运行可执行文件会生成一个完全为空的日志文件。以前它有一个关于locales的错误,我已经修复了,但显然有些错误,因为可执行文件没有运行。 setup.py文件非常依赖于通过运行“app wizard”生成的原始setup.py,并查看Ed Leafe和其他一些人发布的示例。是的,我有一个日志文件,并没有打印任何东西供我使用,这就是为什么我问是否有任何其他故障排除途径我错过了哪些将帮助我找出正在发生的事情。

我甚至编写了一个裸骨测试应用程序,它只生成一个简单的骨骼GUI - 一个带有一些默认菜单选项的空框架。编写的代码只有3行,其余的是第3方工具包。再次,编译成一个exe(就像我原来的应用程序一样),但根本没有运行。运行时日志文件中也没有错误输出。

编辑2: 事实证明,从“windows”切换到“console”以进行初始调试是非常有见地的。我现在有一个基本的运行测试应用程序,并编译真正的应用程序!

测试应用程序:

import dabo
app = dabo.dApp()
app.start()

测试应用的setup.py:

import os
import sys
import glob
from distutils.core import setup
import py2exe
import dabo.icons
daboDir = os.path.split(dabo.__file__)[0]

# Find the location of the dabo icons:
iconDir = os.path.split(dabo.icons.__file__)[0]
iconSubDirs = []
def getIconSubDir(arg, dirname, fnames):
    if ".svn" not in dirname and dirname[-1] != "\\":
        icons = glob.glob(os.path.join(dirname, "*.png"))
        if icons:
            subdir = (os.path.join("resources", dirname[len(arg)+1:]), icons)
            iconSubDirs.append(subdir)
os.path.walk(iconDir, getIconSubDir, iconDir)

# locales:
localeDir = "%s%slocale" % (daboDir, os.sep)
locales = []
def getLocales(arg, dirname, fnames):
  if ".svn" not in dirname and dirname[-1] != "\\":
    mo_files = tuple(glob.glob(os.path.join(dirname, "*.mo")))
    if mo_files:
      subdir = os.path.join("dabo.locale", dirname[len(arg)+1:])
      locales.append((subdir, mo_files))
os.path.walk(localeDir, getLocales, localeDir)

data_files=[("resources", glob.glob(os.path.join(iconDir, "*.ico"))),
        ("resources", glob.glob("resources/*"))]
data_files.extend(iconSubDirs)
data_files.extend(locales)

setup(name="basicApp",
        version='0.01',
        description="Test Dabo Application",
        options={"py2exe": {
                "compressed": 1, "optimize": 2, "bundle_files": 1,
                "excludes": ["Tkconstants","Tkinter","tcl", 
                "_imagingtk", "PIL._imagingtk",
                "ImageTk", "PIL.ImageTk", "FixTk", "kinterbasdb", 
                "MySQLdb", 'Numeric', 'OpenGL.GL', 'OpenGL.GLUT',
                'dbGadfly', 'email.Generator', 
                'email.Iterators', 'email.Utils', 'kinterbasdb', 
                'numarray', 'pymssql', 'pysqlite2', 'wx.BitmapFromImage'], 
                "includes": ["encodings", "locale", "wx.gizmos","wx.lib.calendar"]}},
        zipfile=None,
        windows=[{'script':'basicApp.py'}], 
        data_files=data_files
)

2 个答案:

答案 0 :(得分:1)

您可能需要先修复日志处理,this网址可​​能有所帮助。

稍后您可以寻找答案here

我的回答非常一般,因为您没有提供任何更具体的信息(如py2exe / python版本,py2exe日志,其他使用过的第三方库)。

答案 1 :(得分:1)

有关wxPyton的App类初始值设定项,请参阅http://www.wxpython.org/docs/api/wx.App-class.html。如果要从控制台运行应用程序并将stderr打印到那里,请为False参数提供redirect。否则,如果您只想弹出一个窗口,请将redirect设置为True,将filename设置为None