python - py2exe打包问题排查

标签 python user-interface py2exe

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

我见过的最接近的错误是“以下模块似乎丢失了”,但据我所知我没有使用这些模块中的任何一个(特别是因为它们似乎是我没有使用的数据库)但在 Google 上进行挖掘表明这些是相对良性的警告。

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

编辑 1: python版本是2.5。 py2exe 是 0.6.8。没有重大的构建错误。唯一的一点是关于“以下模块似乎丢失了......”,这是非严重错误,因为列出的包是我绝对没有使用的包,也不应该停止应用程序的执行。运行可执行文件产生了一个完全空的日志文件。以前它有一个关于语言环境的错误,我已经修复了但显然有问题,因为可执行文件没有运行。 setup.py 文件很大程度上基于通过运行他们的“应用程序向导”并查看 Ed Leafe 和其他一些人发布的示例生成的原始 setup.py。是的,我有一个日志文件,但它没有打印任何内容供我使用,这就是为什么我想问是否还有其他我错过的故障排除途径,这将帮助我找出发生了什么。

我什至编写了一个基本的测试应用程序,它只生成一个基本的 GUI - 一个带有一些默认菜单选项的空框架。自己写的代码只有 3 行,其余的在 3rd 方工具包中。同样,它编译成一个 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
)

最佳答案

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

稍后您可能会寻找答案here .

我的回答很笼统,因为你没有提供任何更具体的信息(比如 py2exe/python 版本、py2exe 日志、其他使用的第 3 方库)。

关于python - py2exe打包问题排查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/217666/

相关文章:

python - 我无法导入 pymc3

python - Python的短路有什么值(value)?

python - scikit-learn:如何使用管道组合 LabelEncoder 和 OneHotEncoder?

java - 在 TextArea JavaFX 中插入一些彩色线条

python - 导入错误: No module named pywinauto

python - 在虚拟环境中使用 py2exe

python - 使用 plotly.express 折线图,线条以奇怪的顺序连接?怎么修?

c# - 从多个工作线程 (.NET) 更新 UI

c++ - 当调用来自相同的非 const 版本重载成员函数时,是否可以删除 const 限定符?

python - 如何将 cx_freeze 或 py2exe 与 xlwings、numpy 一起使用