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 )
링크를 가져 주셔서 감사합니다.이 부분에 대해 궁금한 점이 있습니다. py2exe의 기본 동작을 재정의하려면 sys.stderr (및 sys.stdout)을 사용자가 작성한 항목으로 리디렉션하기 만하면됩니다. 어디 실제로 넣을 까 ..? – TheObserver