Я написал скрипт setup.py для py2exe, сгенерировал исполняемый файл для моего приложения с графическим интерфейсом python, и у меня есть целая куча файлов в каталоге dist, включая приложение, w9xopen.exe и MSVCR71.dll. Когда я пытаюсь запустить приложение, я получаю сообщение об ошибке, которое просто говорит «смотрите файл журнала для деталей». Единственная проблема в том, что файл журнала пуст.
Самая близкая ошибка, которую я видел, это «Следующие модули, по-видимому, отсутствуют», но я не использую ни один из этих модулей, насколько я знаю (особенно, поскольку они, похоже, относятся к базам данных, которые я не использую) но поиск в Google позволяет предположить, что это относительно мягкие предупреждения.
Я написал и упаковал консольное приложение, а также приложение wxpython с py2exe, и оба приложения скомпилированы и успешно работают. Я использую новый набор инструментов python под названием dabo, который, в свою очередь, использует модули wxpython, поэтому я не могу понять, что я делаю неправильно. С чего мне начать исследовать проблему, поскольку файл журнала не слишком полезен?
Редактировать 1:
Версия Python 2.5. py2exe составляет 0.6.8. Существенных ошибок сборки не было. Единственное, что было сказано: «Следующие модули, по-видимому, отсутствуют ...», которые не были критическими ошибками, так как в списке были пакеты, которые я определенно не использовал и не должен останавливать выполнение приложения. Запуск исполняемого файла привел к созданию файла журнала, который был полностью пустым. Ранее у него была ошибка с локалями, которую я с тех пор исправил, но явно что-то не так, поскольку исполняемый файл не работал. Файл setup.py в значительной степени основан на оригинальном файле setup.py, сгенерированном путем запуска их «мастера приложений» и просмотра примера, который опубликовали Эд Лиф и некоторые другие. Да, у меня есть файл журнала, и он не печатает ничего для меня, поэтому я спрашиваю, есть ли другой способ устранения неполадок, который я пропустил, который поможет мне выяснить, что происходит.
Я даже написал тестовое приложение «голые кости», которое просто создает графический интерфейс «голые кости» - пустой фрейм с некоторыми опциями меню по умолчанию. Сам написанный код состоит всего из 3 строк, а остальная часть находится в стороннем инструментарии. Опять же, это скомпилировано в исполняемый файл (как и мое оригинальное приложение), но просто не запустился. В файле журнала времени выполнения ошибок не было.
Редактировать 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
)