2013-03-22 1 views
1

enter code here 필자는 pyside (Qt4) GUI에 포함 된 Enthought의 Chaco 플롯을 사용하는 프로그램을 사용했습니다. 또한 numpy를 사용하지만 신경 쓰지 마십시오. 이 프로그램은 파이썬에서 직접 여러 플랫폼에서 잘 실행하지만 py2exe에와는 Win32에 대한 .EXE를 만들 때 나는 한 .exe가 실행되는 오류 얻을 :py2exe python app에서 Chaco를 사용하는 중 오류가 발생했습니다.

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에 상당히 익숙하지만, 내 py2exe 설치 파일에 Enthought의 스위트에서 명시 적으로 포함될 필요가 있다는 느낌을 받는다. 누구도이 경험이 있습니까?

답변

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'], 
    ) 

당신이 유사한 옵션을 사용하여 교체 할 경우 (물론 py2exepy2app 교체, 아마도 PySidePyQt4), 당신을 위해 작동 할 수 있습니다. 다른 가져 오기에 실패하면 포함 목록에 추가하기 만하면됩니다.

이제
+0

QT4 이미지에 대한 새로운 오류가 있지만, Enthought에서 : 역 추적 (마지막으로 가장 최근 통화) : 파일 "plotwidget.pyc"에 파일 "awesome_program.pyw", 19 행, 13 행에서 파일, 라인 17 "\ compiled_path.pyc의 사용"에서 파일, 라인 (21) "\ api.pyc의 사용 ' 파일"\ markers.pyc 활성화 ", 라인 (18), 파일"활성화 \ toolkit.pyc ", 줄 47, 파일"enable \ toolkit.pyc ", 줄 40, _init_toolkit에 ImportError : U qt4 툴킷의 이미지 백엔드를 가져올 수 없습니다 (이유 : [ ' mportError : qt4.image라는 모듈이 없습니다 \ n']). – brews

+1

루트 가져 오기를 추적하여 위의 목록에 포함시켜야합니다. 동적으로로드 된 모듈은 py2exe에서 누락되어 수동으로 추가해야합니다. – tiago

+0

이것이 어떻게 cx_freeze로 변환 될지 궁금하십니까? –

관련 문제