Ошибка в приложении python py2exe с использованием Chaco в pyside

enter code here У меня есть программа, которая использует графики Enthought Chaco, встроенные в графический интерфейс pyside (Qt4). Он также использует numpy, но это не важно. Программа отлично работает на нескольких платформах непосредственно из Python, но когда я создаю .exe для win32 с помощью py2exe, я получаю сообщение об ошибке при запуске .exe:

Traceback (most recent call last):
  File "awesome_program.pyw", line 19, in <module>
  File "plotwidget.pyc", line 13, in <module>
  File "enable\api.pyc", line 8, in <module>
  File "enable\base.pyc", line 35, in <module>
  File "enable\colors.pyc", line 246, in <module>
  File "traitsui\qt4\color_editor.pyc", line 21, in <module>
  File "traitsui\editors\__init__.pyc", line 22, in <module>
  File "traitsui\editors\api.pyc", line 29, in <module>
  File "traitsui\editors\list_str_editor.pyc", line 33, in <module>
  File "pyface\image_resource.pyc", line 18, in <module>
  File "pyface\toolkit.pyc", line 73, in <module>
  File "pyface\toolkit.pyc", line 38, in _init_toolkit
  File "pyface\toolkit.pyc", line 31, in import_toolkit
ImportError: No module named init

Файл setup.py:

#! /usr/bin/env python
# setup_win32.py

# Create an .exe for win32 systems.
# Run this with:
#   python setup_win32.py py2exe

import sys
from distutils.core import setup
import py2exe
# from cx_Freeze import setup, Executable

includes = []
includes.append("PySide.QtUiTools")
includes.append("PySide.QtXml")

base = None
if sys.platform == "win32":
    base = "Win32GUI"

setup(options = {"py2exe": {"dll_excludes":["MSVCP90.dll"],
                            "includes": includes}},
      name='awesomeprogram',
      version='0.01',
      description='A program to visualize stuff.',
      author='John Doe',
      author_email='[email protected]',
      console=[{"script": "awesome_program.pyw"}])

Я новичок в Chaco и py2exe, но у меня такое чувство, что что-то нужно явно включить из пакета Enthought в мой установочный файл py2exe? У кого-нибудь есть опыт с этим?


person brews    schedule 22.03.2013    source источник


Ответы (1)


Я не использовал py2exe, но у меня есть некоторый опыт работы с py2app (который, как мне кажется, похож). Он не может включать многие пакеты Enthought / chaco, поэтому вам нужно включить их вручную в setup.py. Вот что я сделал:

OPTIONS = dict(
           includes = [
                       # The backends are dynamically imported and thus we need to
                       # tell py2app about them.
                       'kiva.*',
                       'enable.*',
                       'enable.qt4.*',
                       'pyface.*',
                       'pyface.ui.qt4.*',
                       'pyface.ui.qt4.action.*',
                       'pyface.ui.qt4.timer.*',
                       'pyface.ui.qt4.wizard.*',
                       'pyface.ui.qt4.workbench.*',
                       'traitsui.qt4.*',
                       'traitsui.qt4.extra.*',
                       'PyQt4.pyqtconfig',
                       'glob.*'],
           argv_emulation = True)

setup(
      app=APP,
      options={'py2app': OPTIONS},
      setup_requires=['py2app'],
      )

Если вы замените использование аналогичных OPTIONS (конечно, заменив py2app на py2exe и, вероятно, PyQt4 на PySide), это может сработать для вас. Если это не удается с другим импортом, просто добавьте его в список включения.

person tiago    schedule 22.03.2013
comment
Теперь новая ошибка об изображениях Qt4, но из Enthought: Traceback (последний вызов последним): файл awesome_program.pyw, строка 19, в ‹module›, файле plotwidget.pyc, строка 13, в ‹module› файле enable \ api.pyc , строка 21, в ‹module› Файл enable \ markers.pyc, строка 18, в ‹module› Файл enable \ compiled_path.pyc, строка 17, в ‹module› Файл enable \ toolkit.pyc, строка 47, в ‹module› Файл enable \ toolkit.pyc, строка 40, в _init_toolkit ImportError: Невозможно импортировать серверную часть изображения для инструментария qt4 (причина: ['I mportError: Нет модуля с именем qt4.image \ n']). - person brews; 22.03.2013
comment
Вам нужно отследить корневой импорт и включить его в список выше. Модули, которые загружаются динамически, пропускаются py2exe и должны добавляться вручную. - person tiago; 22.03.2013
comment
Есть идеи, как это перевести в cx_freeze? - person Adam Hughes; 23.01.2015
comment
@AdamHughes, извините, никогда не использовал cx_freeze. - person tiago; 23.01.2015
comment
py2app IIUC создает только двоичные файлы Mac OSX. Я действительно пытаюсь не зависеть от платформы. cx_freeze ребята уже довольно далеко продвинули меня в процессе, так что я думаю, что это будет возможно. А пока я попробую py2app, спасибо. - person Adam Hughes; 23.01.2015