Проблемы компиляции python3 и pyqt4 с помощью cx_freeze - PullRequest
3 голосов
/ 13 марта 2012

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

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

  2. Я не использую модули severl 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}
)

Ответы [ 2 ]

6 голосов
/ 13 марта 2012

решаемая. В дополнение к указателям Томаса, мне нужно, чтобы «форматы изображений» находились в опциях «include-files», а не «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}
)
3 голосов
/ 13 марта 2012

(Обратите внимание, примерно на 1.)

2: В options = {'build-exe' ..., я думаю, что это должен быть build_exe (подчеркивание вместо черты).

3: Вы пытаетесь получить доступ к чему-то вроде sys.stdout.encoding где-нибудь?sys.stdout будет None при использовании базы Win32GUI.Даже вызов print() может вызвать это.

...