py2exe: сгенерированный EXE не загружается - PullRequest
1 голос
/ 27 октября 2011

Двоичный файл 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']
  }
  }
)

1 Ответ

1 голос
/ 27 октября 2011

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

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

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

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

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

...