2011-11-28 66 views
2

我使用matplotlib工作的Python 2.6的代碼,並希望得到一個exe工作出來。我有收到此完成問題:Py2Exe和MatPlotLib:地塊不會出現

起初,我得到了一個錯誤失蹤MSCVP90.dll,但我下載的提取和.dll文件到工作目錄和錯誤走了。

我有關於失蹤tkagg模塊的一些錯誤,但我補充說,例外和編輯matplotlibrc文件默認爲WXAgg代替,並且走了。

的exe正常運行,但在碼的末尾它應該顯示的曲線圖,並且它沒有。情節是這個節目的主要目標,所以有這個很好。

只需運行Python代碼所帶來的陰謀了就好了。

誰能提供任何建議或見解?

這裏是我的setup.py:

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(), 

) 

提前感謝!



好吧,我用pyinstaller和恢復的matplotlibrc文件恢復到原來的狀態,其中TkAgg是默認的,一切都會在我的電腦上,但是當我嘗試到另一臺計算機上運行它的情節仍然沒有出現......

我可以用pyinstaller編譯一個exe出了一個非常簡單的matplotlib的代碼,如:

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

但是,當我採取exe文件到另一個COM電腦,它不起作用。

有沒有其他人有類似的問題?有任何想法嗎? 謝謝

+0

我從來沒有對'py2exe'和'matplotlib'好運。在我看來,'pyinstaller'做的更好,而且使用起來更簡單(特別是對於需要matplotlib的東西)。 http://www.pyinstaller.org/ –

回答

1

如果可執行文件在您的計算機上運行,​​但在另一臺計算機上無法運行,則最可能的問題是缺少一個或多個py2exe不能打包的必需dll,因爲許可證問題。

很多時候這些DLL文件在該exe作品,並將它們複製到故障計算機的計算機

gdiplus.dll 
msvcp90.dll 

尋找他們。 如果exe仍然不起作用,請檢查其他dll的。 Py2exe給出了二進制依賴性列表:

*** 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可執行程序。我只需要在setup.py中添加一個'includes',並在matplotlib.rc中將WXAgg設置爲後端(使用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文件夾。有沒有辦法通過將它包含在library.zip或其他東西中來擺脫它? – Mike

0

今天我失去了一天的工作,所以...

解決方案是包含「FileDialog」模塊顯式,因爲「六」模塊使用它。具體來說,我解決了我的問題,包括six,dateutil,FileDialog,matplotlib,pylab,matplotlib.backends.backend_tkagg等。

祝你好運!

+0

可能有助於說出「他人」是什麼...... –