#python #pyqt4 #py2exe
#python #pyqt4 #py2exe
Вопрос:
Двоичный файл py2exe моего приложения PyQt4 ненадолго появляется на экране, а затем исчезает. Я понятия не имею, почему, но вот что произошло раньше:
Мое приложение не отображало SVG-изображения при загрузке (из Exe), поэтому я немного покопался и увидел, что мне пришлось изменить свой setup.py
, чтобы включить a 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:
Если я правильно помню, Py2exe прекращен, поэтому его использование действительно небезопасно.
Я использую cx_Freeze, который ни разу не подвел меня в работе. Это тоже может вам помочь.
Кроме того, помните, что пути различаются при зависании в скрипте. Как правило, вам нужен os.path.dirname(sys.executable)
замороженный (который вы можете протестировать на использование hasattr(sys, 'frozen')
), а не обычный os.path.dirname(__file__)
.
Кроме того, убедитесь, что вы копируете imageformats
каталог плагинов qt. Раньше это вызывало проблемы у людей. В папке imageformats также находится плагин svg. Вам также потребуется скопировать PyQt4.QtXml
и PyQt4.QtSvg
dll / so также (требуется плагином svg).
В моем проекте есть build_binary.py файл для cx_Freeze, который автоматически определяет каталог плагина и копирует необходимые данные. Это может помочь вам взглянуть на него.
Комментарии:
1. py2exe казался немного неуклюжим, а cx_freeze хорошо работал для меня в Linux, поэтому я попробую еще раз. Я обязательно посмотрю на ваш код, и поскольку ваш проект использует SVGS и работает при компиляции в двоичный файл, я думаю, ваш код работает! Спасибо.