2008-10-20 8 views
5

py2exe 용 setup.py 스크립트를 작성하고 python GUI 응용 프로그램 용 실행 파일을 생성했으며 dist 디렉토리에 app, w9xopen.exe 및 MSVCR71 파일을 포함합니다. dll. 응용 프로그램을 실행하려고하면 "자세한 내용은 로그 파일을 봅니다"라는 오류 메시지가 나타납니다. 유일한 문제는 로그 파일이 비어 있다는 것입니다.문제 해결 py2exe 패키징 문제

내가 본 가장 가까운 오류는 "다음 모듈이 누락 된 것 같습니다."그러나 내가 아는 한이 모듈을 사용하지 않고 있습니다. 특히 데이터베이스를 사용하지 않는 것 같습니다.) 그러나 Google에서 파헤 치는 것은 이들이 비교적 양심적 인 경고라고 제안합니다.

저는 py2exe가있는 wxpython 패키지 응용 프로그램과 콘솔 응용 프로그램을 작성하고 패키지화했으며 두 응용 프로그램 모두 컴파일되고 성공적으로 실행되었습니다. dabo라는 새로운 파이썬 툴킷을 사용하고 있습니다.이 툴킷은 wxpython 모듈을 사용하기 때문에 내가 잘못하고있는 것을 파악할 수 없습니다. 로그 파일이 너무 유용하지 않으므로 어디에서 문제를 조사하기 시작합니까?

편집 1 : 파이썬 버전은 2.5입니다. py2exe는 0.6.8입니다. 중요한 빌드 오류는 없었습니다. 단 하나의 패키지는 "다음 모듈이 누락 된 것 같습니다 ..."라는 오류가있었습니다. 나열된 패키지는 확실히 사용하지 않았기 때문에 중요하지 않은 오류 였고 앱 실행을 중단해서는 안됩니다. 실행 파일을 실행하면 완전히 비어있는 로그 파일이 생성되었습니다. 이전에는 고정 된 이후의 로케일에 대해서는 오류가 있었지만 실행 파일이 실행되지 않았으므로 분명히 잘못된 것이 있습니다. setup.py 파일은 "app wizard"를 실행하고 Ed Leafe와 다른 사람들이 게시 한 예제를보고 생성 된 원래의 setup.py에 상당히 의존합니다. 예, 로그 파일이 있는데 사용하기에 아무 것도 인쇄하지 않습니다. 따라서 내가 뭘 놓치고 있는지 다른 문제 해결 방법이 있는지 물어 보는 이유가 무엇인지 알아내는 데 도움이 될 것입니다.

일부 기본 메뉴 옵션이있는 빈 프레임 인 베어 본 (bare bones) 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

1

wxPyton의 App 클래스 초기화 프로그램의 경우 http://www.wxpython.org/docs/api/wx.App-class.html을 참조하십시오. 콘솔에서 응용 프로그램을 실행하고 거기에 stderr를 인쇄하려면 redirect 인수에 False을 입력하십시오.그렇지 않은 경우 창을 팝업으로 표시하려면 redirectTruefilename에서 None으로 설정하십시오.