Устранение проблемы с упаковкой py2exe - PullRequest
5 голосов
/ 20 октября 2008

Я написал скрипт 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
)

Ответы [ 2 ]

1 голос
/ 20 октября 2008

См. http://www.wxpython.org/docs/api/wx.App-class.html для инициализатора класса wxPyton App. Если вы хотите запустить приложение из консоли и получить там печать stderr, укажите False для аргумента redirect. В противном случае, если вы просто хотите, чтобы окно всплыло, установите redirect на True и filename на None.

1 голос
/ 20 октября 2008

Сначала вам может потребоваться исправить обработку журнала, этот URL может помочь.

Позже вы можете искать ответ здесь .

Мой ответ очень общий, потому что вы не дали более конкретной информации (например, py2exe / версия python, журнал py2exe, другие используемые сторонние библиотеки).

...