py2exe: сгенерированный EXE не загружается

Двоичный файл py2exe моего приложения PyQt4 на короткое время мигает на экране, а затем исчезает. Понятия не имею, почему, но вот что произошло раньше:

Мое приложение не отображало изображения SVG при загрузке (из Exe), поэтому я немного покопался и увидел, что мне пришлось изменить свой setup.py, чтобы включить qt.conf и некоторые библиотеки DLL.

Затем двоичный файл просто перестал загружаться после включения qt.conf.

Я играл с qt.conf и обнаружил, что мой Exe не загружается , если я не удалю qt.conf, поэтому я думаю, что он искажен.

Вот мой qt.conf:

[Paths]
Plugins = plugins

Я пробовал использовать абсолютные пути, косую черту, обратную косую черту и т. Д. Я даже скопировал всю папку PyQt4 с этим файлом и все равно не повезло.

Если актуально, вот мой setup.py:

import os, sys, glob

from distutils.core import setup
from py2exe.build_exe import py2exe

def find_data_files(source,target,patterns):
  if glob.has_magic(source) or glob.has_magic(target):
    raise ValueError("Magic not allowed in src, target")

  ret = {}

  for pattern in patterns:
    pattern = os.path.join(source,pattern)

    for filename in glob.glob(pattern):
      if os.path.isfile(filename):
        targetpath = os.path.join(target,os.path.relpath(filename,source))
        path = os.path.dirname(targetpath)
        ret.setdefault(path,[]).append(filename)
  return sorted(ret.items())

setup(
#  zipfile = None,
  data_files = find_data_files('', '', ['bin/*', 'plugins/iconengines/*', 'qt.conf']),
  windows = [{'script': 'main.py'}],
#  cmdclass = {'py2exe': Py2exe},
  options = {
  'py2exe': {
    'bundle_files': 1,
    'includes': ['sip'],
    'dll_excludes': ['MSVCP90.dll']#, 'qsvgicon4.dll']
  }
  }
)

person Blender    schedule 26.10.2011    source источник


Ответы (1)


Если я правильно помню, Py2exe больше не поддерживается, поэтому использовать его действительно небезопасно.

Я использую cx_Freeze, который ни разу не подводил меня в работе. Это может вам тоже помочь.

Также помните, что пути в замороженном состоянии отличаются от сценария. Как правило, вам нужно os.path.dirname(sys.executable) для замораживания (которое вы можете протестировать с помощью hasattr(sys, 'frozen')), в отличие от обычного os.path.dirname(__file__).

Также убедитесь, что вы копируете каталог imageformats qt plugin. Раньше это доставляло людям проблемы. В папке imageformats находится и плагин svg. Вам также необходимо скопировать PyQt4.QtXml и PyQt4.QtSvg dll / so (требуется плагином svg).

В моем проекте есть файл build_binary.py для cx_Freeze, который автоматически определяет каталог плагина и копирует требуемый материал. Может вам помочь взглянуть на него .

person John Doe    schedule 26.10.2011
comment
py2exe казался немного неуклюжим, а cx_freeze у меня хорошо работал в Linux, поэтому я попробую еще раз. Я обязательно посмотрю на ваш код, и, поскольку ваш проект использует SVG и работает при компиляции в двоичный файл, я думаю, ваш код работает! Спасибо. - person Blender; 27.10.2011