我已經爲py2exe編寫了一個setup.py腳本,爲我的python GUI應用程序生成了一個可執行文件,並且在dist目錄中有一大堆文件,其中包括應用程序w9xopen.exe和MSVCR71。 DLL。當我嘗試運行該應用程序時,出現一條錯誤消息,上面寫着「查看日誌文件的詳細信息」。唯一的問題是,日誌文件是空的。疑難解答py2exe包裝問題
我看到的最接近的錯誤是「以下模塊似乎丟失了」,但我沒有使用任何這些模塊據我所知(特別是因爲它們似乎是我沒有使用的數據庫)但在Google上挖掘表明這些是相對溫和的警告。
我已經編寫並打包了一個控制檯應用程序以及一個包含py2exe的wxpython應用程序,並且這兩個應用程序都已編譯併成功運行。我正在使用一個名爲dabo的新的Python工具包,它反過來使用了wxpython模塊,所以我無法弄清楚我做錯了什麼。我從哪裏開始調查問題,因爲顯然日誌文件沒有太大的用處?
編輯1: python版本是2.5。 py2exe是0.6.8。沒有重大的構建錯誤。唯一的一點是關於「下列模塊似乎丟失......」這是非嚴重錯誤,因爲列出的軟件包是我絕對沒有使用過的軟件,也不應該停止應用程序的執行。運行可執行文件產生一個完全空的日誌文件。以前它有一個關於locales的錯誤,我已經修復了,但是由於可執行文件沒有運行,所以顯然有些問題。 setup.py文件很大程度上依賴於通過運行「應用程序嚮導」生成的原始setup.py,並查看Ed Leafe和其他人發佈的示例。是的,我有一個日誌文件,它不打印任何東西供我使用,這就是爲什麼我問是否有任何其他故障排除途徑我錯過了,這將幫助我瞭解發生了什麼。
我甚至寫了一個簡單的骨骼測試應用程序,它只是簡單地生成一個純粹的骨骼GUI - 一個帶有一些默認菜單選項的空框架。自己寫的代碼只有3行,其餘的都在第三方工具包中。再次,編譯成一個exe文件(就像我原來的應用程序),但只是沒有運行。運行時日誌文件中也沒有錯誤輸出。
編輯2: 事實證明,從初始調試目的切換到「控制檯」是非常有見識的。我現在有一個基本的運行測試應用程序,並編譯真正的應用程序!
測試程序:
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 )
感謝您的鏈接...只是想知道這個部分:爲了覆蓋py2exe的默認行爲,您需要做的就是將sys.stderr(也可能是sys.stdout)重定向到您的設置。 我在哪裏可以放這個..? – TheObserver 2008-10-21 01:01:32