проблема в исполняемом файле, созданном с py2exe - PullRequest
0 голосов
/ 11 апреля 2011

У меня есть приложение, написанное на python, которое использует pygtk для построения GUI, также включены некоторые файлы glade для построения окон.

Моя проблема в том, что мое приложение работает нормально, когда я запускаю его из cmd, но когда я создаю exe с py2exe, приложение не запускается, но создает пустой файл журнала, который я пишу в приложении для журналов..

мой setup.py выглядит так:

from distutils.core import setup
import os
import pygtk
import py2exe

setup(
name = 'ABC',
description = 'blah blah blah',
author = 'XYZ',
version = '0.1',

windows = [
              {
                  'script': 'filename.py',
                  'icon_resources': [(1, "logo.ico")],
              }
          ],


options = {
              'py2exe': {
                  'packages':'encodings',
                  'includes': 'cairo, pango, pangocairo, atk, gobject,gio',
              }
          },
data_files=[
               'logo.png', 'bg.png', 'completed.png', 'down.png','up.png',
               'processing.gif', 'cygcrypto-0.9.8.dll', 'cyggcc_s-1.dll', 
               'cygiconv-2.dll', 'cygpopt-0.dll', 'cygssp-0.dll', 'cygwin1.dll',
               'cygz.dll', 'prog.exe','prog2.exe', 'prog3.exe',
               'Login.glade', 'settings_lib.glade', 
               'Microsoft.VC90.CRT.manifest', 'msvcm90.dll','etc.zip',
               'lib.zip', 'msvcp90.dll', 'msvcr90.dll', 'share.zip'
           ])  

В чем может быть проблема?

1 Ответ

1 голос
/ 11 апреля 2011

У меня тоже были такие проблемы несколько раз при использовании таких инструментов, как py2exe и py2app.

IIRC, во многих случаях это было вызвано тем, что рабочий каталог процесса Python сильно отличался при двойном щелчке на .exe. Возможно, вы захотите добавить некоторый код для запуска вашей программы Python, который регистрирует значение os.getcwd()

Другая хитрость заключается в том, что вы должны убедиться, что py2exe входит во все модули Python, которые использует ваша программа. При запуске из командной строки вы используете Python со всеми этими модулями. При двойном щелчке на .exe вы используете Python, который встроен в исполняемый файл вместе с модулями, которые вы явно перечислили в setup.py - очень легко пропустить один. Чтобы найти это, вы можете поместить в свой импорт предложения try / exception, а затем записать ImportError исключения в файл.

...