Ошибка cx_Freeze: объект 'str' не имеет атрибута '__cause__'

Я пытаюсь заморозить свой проект Python3.2 и после запуска полученного исполняемого файла получаю следующую ошибку:

Исключение возникает при вызове format_exception. Объект 'str' не имеет атрибута '__cause__'. Исходное исключение: невозможно импортировать формат имени.

В проекте есть три внутренних пакета / модуля с файлами __init__.py. Он использует внешние пакеты: sqlite3, PyQt4, matplotlib, numpy, scipy.

Вот мой setup.py:

from cx_Freeze import setup, Executable

includes = ['re', 'PyQt4', 'os', 'scipy', 'csv', 'sqlite3', 'itertools', 'numpy', 'sys', 'matplotlib']
excludes = []
packages = []
path = []

GUI2Exe_Target = Executable(
    # what to build
    script = "xshape_report.py",
    #initScript = None,
    base = 'Win32GUI',
    #targetDir = r"dist",
    #targetName = "xshape_report.exe",
    #compress = True,
    #copyDependentFiles = True,
    #appendScriptToExe = False,
    #appendScriptToLibrary = False,
    icon = None
    )

setup(

    version = "0.1",
    description = "Reporting system",
    author = "Katya",
    name = "Xshape report",

    options = {"build_exe": {"includes": includes,
                             "excludes": excludes,
                             "packages": packages,
                             "path": path
                             }
               },

    executables = [GUI2Exe_Target]
    )

Та же ошибка, если я оставлю, включает пустое. Что может быть причиной?


person Ekaterina Mishina    schedule 03.04.2012    source источник
comment
Ваш код также вызывает исключение в Python или только когда вы его замораживаете? Это странное исключение, потому что format - это функция, а не модуль, поэтому я не уверен, почему он пытается импортировать формат.   -  person aquavitae    schedule 03.04.2012
comment
Только при заморозке. В списке рассылки cx_freeze я получил следующий ответ: Бит «Невозможно импортировать формат имени» - проблема с вашим приложением. Возможно, есть какой-то модуль, который он не обнаружил, и его нужно скопировать. Он должен показать более подробную информацию о том, где возникает ошибка, но в cx_Freeze есть ошибка, из-за которой объект 'str' не имеет атрибута сообщение 'причина'. Если вы хотите протестировать разрабатываемую версию cx_Freeze, это следует исправить, чтобы вы получили надлежащую трассировку.   -  person Ekaterina Mishina    schedule 03.04.2012
comment
Можете выложить ссылку на полный код?   -  person aquavitae    schedule 04.04.2012


Ответы (1)


Копирование моего ответа из списка рассылки, чтобы помочь другим людям, которые ищут это:

Бит «Невозможно импортировать формат имени» - проблема с вашим приложением. Возможно, есть какой-то модуль, который он не обнаружил, и его нужно скопировать.

Он должен показать более подробную информацию о том, где возникает ошибка, но в cx_Freeze есть ошибка, которая приводит к сообщению 'str' object has no attribute '__cause__'. Это исправлено в версии для разработки, поэтому при ее использовании вы получите надлежащие обратные ссылки. Надеюсь, скоро у нас будет новый релиз.

Для людей в будущем: эта проблема существует с cx_Freeze 4.2.3, и я предполагаю, что выпуск с исправлением будет 4.3.0. Если вы столкнетесь с этим (no attribute '__cause__') в более поздней версии, убедитесь, что для этого есть ошибка.

person Thomas K    schedule 03.04.2012
comment
Спасибо! Проблема решена, последняя разрабатываемая версия дала значимую трассировку, и я мог адаптировать свой setup.py таким образом, чтобы все необходимые модули были скопированы в сборку - это не всегда выполняется автоматически. - person Ekaterina Mishina; 12.04.2012