Вопрос

Я пытаюсь скомпилировать простой сценарий, который я написал с использованием Python3 и PyQt4, используя cx_Freeze, но у меня есть три проблемы, которые я просто не могу решить.

  1. Не могу заставить значки появиться.Я использую для этого скомпилированный файл ресурсов, т.е.импортируя .py, содержащий ресурсы, и я попытался последовать совету здесь, копирую папку imageformats в папку моего проекта, но, похоже, ничего не работает.

  2. Я не использую несколько модулей Python, включая tcl и ttk, поэтому добавил их в excludes вариант.Тем не менее, они, кажется, все еще добавляются.

  3. Когда я пытаюсь скомпилировать с 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}
)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top