1

enter code herepyside (Qt4) GUI に埋め込まれた Enthought の Chaco プロットを使用するプログラムを作成しました。numpy も使用しますが、気にしないでください。プログラムは複数のプラットフォームで Python から直接正常に実行されますが、py2exe を使用して win32 用の .exe を作成すると、.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='dude@email.com',
      console=[{"script": "awesome_program.pyw"}])

私はChacoとpy2exeにかなり慣れていませんが、py2exeセットアップファイルにEnthoughtのスイートから何かを明示的に含める必要があると感じていますか? 誰もこれを経験していますか?

4

1 に答える 1

3

私は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 を使用して置き換える場合 (もちろん、 に置き換えpy2apppy2exeおそらくPyQt4に置き換えPySideます)、うまくいく可能性があります。別のインポートで失敗した場合は、それをインクルード リストに追加してください。

于 2013-03-22T10:39:09.350 に答える