2008-10-20 124 views
5

我已經爲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 
) 

回答

1

您可能需要修復登錄第一處理,this URL可能會有幫助。

稍後,您可能會尋找答案here

我的答案很一般,因爲你沒有給出任何更具體的信息(如py2exe/python版本,py2exe日誌,其他使用的第三方庫)。

+0

感謝您的鏈接...只是想知道這個部分:爲了覆蓋py2exe的默認行爲,您需要做的就是將sys.stderr(也可能是sys.stdout)重定向到您的設置。 我在哪裏可以放這個..? – TheObserver 2008-10-21 01:01:32

1

請參閱http://www.wxpython.org/docs/api/wx.App-class.html for wxPyton的App類初始值設定項。如果您想從控制檯運行應用程序,並將其打印到那裏,請爲redirect參數提供False。否則,如果您只想彈出一個窗口,請將redirect設置爲TruefilenameNone