Проблемы с компиляцией python3 и pyqt4 с помощью cx_freeze
-
13-12-2019 - |
Вопрос
Я пытаюсь скомпилировать простой сценарий, который я написал с использованием Python3 и PyQt4, используя cx_Freeze, но у меня есть три проблемы, которые я просто не могу решить.
Не могу заставить значки появиться.Я использую для этого скомпилированный файл ресурсов, т.е.импортируя .py, содержащий ресурсы, и я попытался последовать совету здесь, копирую папку imageformats в папку моего проекта, но, похоже, ничего не работает.
Я не использую несколько модулей Python, включая tcl и ttk, поэтому добавил их в
excludes
вариант.Тем не менее, они, кажется, все еще добавляются.Когда я пытаюсь скомпилировать с
base='Win32GUI'
запуск созданного exe вызывает исключение:'NoneType' has no attribute 'encoding'
Я почти уверен, что с моим сценарием установки что-то не так, поскольку документация cx_Freeze не очень подробная, поэтому надеюсь, что кто-нибудь сможет указать на проблему.Вот скрипт установки.Я не буду публиковать компилируемый скрипт, потому что он довольно длинный, но если понадобится, я постараюсь создать краткую версию для тестирования.
from cx_Freeze import setup, Executable
exe = Executable(
script='cconvert.py',
base='Win32GUI'
)
options = dict(
excludes=['curses', 'email', 'tcl', 'ttk']
)
setup(
name="Coord Convertor",
version="0.1",
description="A Coordinate converter from DMS to DD",
requires=['pyqt4 (>=4.8)', 'dtlibs (>=0.4.1)'],
data_files=['imageformats'],
executables=[exe],
options={'build-exe': options}
)
Решение
(Обратите внимание на пункт 1.)
2:В options={'build-exe'... я думаю, это должно быть build_exe (подчеркивание вместо тире).
3:Вы пытаетесь получить доступ к чему-то вроде sys.stdout.encoding
в любом месте? sys.stdout
будет None, если вы используете базу Win32GUI.Даже print()
звонок может спровоцировать это.
Другие советы
Решено.В дополнение к указателям Томаса мне нужно было, чтобы в параметрах «форматы изображений» находились в разделе «включаемые файлы», а не в разделе «data_files».Мой окончательный сценарий выглядит так:
from cx_Freeze import setup, Executable
exe = Executable(
script='cconvert.pyw',
base='Win32GUI'
)
options = dict(
excludes=['curses', 'email', 'tcl', 'ttk', 'tkinter'],
include_files=['imageformats']
)
setup(
name="Coord Convertor",
version="0.1",
description="A Coordinate converter from DMS to DD",
requires=['pyqt4 (>=4.8)', 'dtlibs (>=0.4.1)'],
executables=[exe],
options={'build_exe': options}
)