2011-11-28 3 views
2

matplotlib를 사용하여 작동하는 파이썬 2.6 코드가 있으며 작동중인 exe를 얻고 싶습니다. 이 문제를 해결하는 데 문제가 있습니다.Py2Exe 및 MatPlotLib : 플롯이 표시되지 않습니다

처음에는 MSCVP90.dll 누락 오류가 발생했지만 다운로드하여 .dll을 작업 디렉토리에 추출하면 오류가 사라졌습니다.

tkagg 모듈 누락과 관련하여 몇 가지 오류가 있었지만 예외에 추가하고 matplotlibrc 파일을 WXAgg를 기본값으로 편집하여 삭제했습니다.

exe는 정상적으로 실행되지만 코드 끝에서 플롯을 표시해야하며 그렇지 않습니다. 줄거리가이 프로그램의 주된 목표이기 때문에 이것을 가지고 있으면 좋을 것입니다.

그냥 파이썬 코드를 실행하면 음모가 잘 보입니다.

의견이나 통찰력을 제공할만한 사람이 있습니까? 사전에

from distutils.core import setup 
import py2exe 
import matplotlib 
matplotlib.use('wxagg') # overrule configuration 
import pylab 


setup(
    console=['test1.py'], 
    options={ 
      'py2exe': { 
         'excludes': ['_gtkagg', '_tkagg', 'backend_tkagg'], 
         } 
      }, 
    data_files=matplotlib.get_py2exe_datafiles(), 

) 

감사 :

여기 내 setup.py입니다!



좋아, 내가 pyInstaller 중에를 사용 TkAgg 기본 어디에 다시 원래 상태로 matplotlibrc 파일을 되돌아 모든 것이 내 컴퓨터에서 작동,하지만 난 음모 또 다른 컴퓨터에서 실행하려고 할 때 내가 좋아하는, 아주 간단한하기 matplotlib 코드 중 EXE 파일을 컴파일 pyInstaller 중에 사용할 수 있습니다

... 나타나지 않습니다

from pylab import * 
t = arange(0.0, 2.0, 0.01) 
s = sin(2*pi*t) 
plot(t, s, linewidth=1.0) 
show() 

하지만 다른 COM 해당 EXE를 취할 때 퍼터, 작동하지 않아.

누구도 비슷한 문제가 있습니까? 어떤 아이디어? 감사합니다

+0

필자는'py2exe'와'matplotlib'에 대해 한번도 행운을 보지 못했습니다. 필자의 의견으로는,'pyinstaller'는 더 나은 작업을 수행 할 수 있으며 (특히 matplotlib을 필요로하는 것들을 위해) 다소 사용하기 쉽습니다. http://www.pyinstaller.org/ –

답변

1

실행 파일이 컴퓨터에서 실행되지만 다른 컴퓨터에서 작동하지 않는 경우 가장 큰 문제는 라이센스 문제로 인해 py2exe가 압축하지 않는 필수 dll 중 하나 이상이 부족하다는 것입니다.

는 매우 자주 이러한 DLL은 EXE 작품과는 실패한 컴퓨터에 복사 컴퓨터에서 그들을 위해

gdiplus.dll 
msvcp90.dll 

봐입니다. exe가 여전히 작동하지 않으면 다른 dll이 있는지 확인하십시오.

*** binary dependencies *** 
Your executable(s) also depend on these dlls which are not included, 
you may or may not need to distribute them. 

Make sure you have the license if you distribute any of them, and 
make sure you don't distribute files belonging to the operating system. 

    OLEAUT32.dll - C:\Windows\system32\OLEAUT32.dll 
    USER32.dll - C:\Windows\system32\USER32.dll 
    gdiplus.dll - gdiplus.dll 
    SHELL32.dll - C:\Windows\system32\SHELL32.dll 
    ole32.dll - C:\Windows\system32\ole32.dll 
    RPCRT4.dll - C:\Windows\system32\RPCRT4.dll 
    WSOCK32.dll - C:\Windows\system32\WSOCK32.dll 
    WINMM.dll - C:\Windows\system32\WINMM.dll 
    ADVAPI32.dll - C:\Windows\system32\ADVAPI32.dll 
    msvcrt.dll - C:\Windows\system32\msvcrt.dll 
    WS2_32.dll - C:\Windows\system32\WS2_32.dll 
    WINSPOOL.DRV - C:\Windows\system32\WINSPOOL.DRV 
    GDI32.dll - C:\Windows\system32\GDI32.dll 
    IMM32.dll - C:\Windows\system32\IMM32.dll 
    MSVCP90.dll - C:\Python26\programas\test\MSVCP90.dll 
    KERNEL32.dll - C:\Windows\system32\KERNEL32.dll 
    ntdll.dll - C:\Windows\system32\ntdll.dll 
    COMCTL32.dll - C:\Windows\system32\COMCTL32.dll 
    COMDLG32.dll - C:\Windows\system32\COMDLG32.dll 
    VERSION.dll - C:\Windows\system32\VERSION.dll 

C:\Python26\programas\test> 

마지막으로, 나는 성공적으로 py2exe에있는 기능하기 matplotlib 프로그램 실행 파일을 가지고 : py2exe에 이진 종속성 목록을 제공합니다. 난 단지 'includes'을 setup.py에 추가하고 WXAgg를 matplotlib.rc의 백엔드로 설정할 필요가 있었다. (Tk에서는 당신이 설명한 것과 같은 문제가있다.). 작동하려면 원래 matplotlib.rc (matplotlib/mpl-data 폴더에 있음)에 WXAgg를 설정해야했습니다. 이것은 py2exe가 가져 오는 파일입니다 (사용자의 matplotlib 구성 디렉토리에있는 파일이 아닙니다). dist 폴더에있는 .rc 파일을 확인하십시오.

from distutils.core import setup 
import py2exe 
import matplotlib 

setup(
    console=['test1.py'], 
    options={ 
      'py2exe': { 
         'excludes': ['Tkconstants','Tkinter', 'tcl'], 
         'includes': ['matplotlib.backends.backend_wxagg'], 
         } 
      }, 
    data_files=matplotlib.get_py2exe_datafiles(), 

) 
+0

감사합니다. matplotlib.rc에서 WXAgg에 백엔드를 설정하고 setup.py 코드를 사용하면 작동합니다. 감사합니다. – Mike

+0

@ user1070048 대답이 유용하면 최대 답변을 upvote/선택해야합니다 – joaquin

+0

좋아, 그 일하고, 나는 하나의 exe지만, 'bundle_files'를 사용하여 모든 것을 컴파일하고 싶습니다 : 1 및 zipfile = None 여전히 dist 폴더에 mpl-data 폴더를 elave합니다. 이것을 라이브러리에 포함 시켜서 없애 버릴 수있는 방법이 있습니까? – Mike

0

오늘 나는이 일의 하루를 잃었습니다.

해결 방법은 "6 개의"모듈에서 사용하기 때문에 "FileDialog"모듈의 명백 함을 포함하는 것입니다. 특히 six, dateutil, FileDialog, matplotlib, pylab, matplotlib.backends.backend_tkagg 등을 포함하여 문제를 해결했습니다.

행운을 빌어 요!

+0

"다른 사람"이 무엇인지 말하는 데 도움이 될 수 있습니다 ... –

관련 문제