2012-06-27 36 views
1

我一直在搜索此論壇和其他許多人,似乎無法獲得創建可執行文件的好方法。我已經嘗試了幾種不同的方法(py2exe,pyinstaller和cx_freeze),都似乎給我一些錯誤。使用Py2exe和matplotlib錯誤創建可執行文件

當我嘗試pyinstaller,我收到錯誤,「沒有_imaging C模塊安裝」。我搜索的所有東西都說它與PIL有關,但是我的代碼沒有使用PIL。

當我試圖py2exe,我不斷收到以下錯誤:

File "Scout_Tool.py", line 18, in <module> 
File "matplotlib\pyplot.pyc", line 95, in <module> 
File "matplotlib\backends\__init__.pyc", line 25, in pylab_setup 
ImportError: No module named backend_qt4agg 

我在做什麼損失。我的代碼包含以下進口:

import os 
import csv 
import wx 
import time 
import math 

from matplotlib.backends.backend_wx import FigureCanvasWx as FigureCanvas 
from matplotlib.backends.backend_wx import NavigationToolbar2Wx 
from matplotlib.pyplot import figure,show 
from mpl_toolkits.basemap import Basemap 
from matplotlib.figure import Figure 
import matplotlib.pyplot as plt 
from numpy.random import rand 
from datetime import datetime 
import wx.calendar as cal 
import numpy as npy 
from pylab import * 
import numpy as np 
import matplotlib 
import adodbapi 
import sqlparse 
import pylab 
import annote_new 
import cPickle as pickle 

有沒有人有關於如何使用py2exe構建可執行文件的建議?我已經嘗試過...

from distutils.core import setup 
import py2exe 
import matplotlib 

setup( 
    windows=[{'script': r'Scout_Tool.py'}], 

    data_files=matplotlib.get_py2exe_datafiles(), 

    options={ 
     r'py2exe': { 
      r'includes': r'ElementConfig', 
      r'includes': r'ColorConv', 
      r'includes': r'Tkinter', 
      r'includes': r're', 
      r'includes': r'math', 
      r'includes': r'sys', 
      r'includes': r'matplotlib', 
      r'includes': r'mpl_toolkits', 
      r'includes': r'matplotlib.backends.backend_wx', 
      r'dll_excludes': [r'MSVCP90.dll'], 
     } 
    }, 

) 

感謝您的幫助!

+0

PIL是最有可能matplotlib內使用。它可能無法找到你的庫的依賴關係。你有沒有嘗試明確地將它抱怨的模塊添加到你的包含列表中? – jdi

+0

你有一個例子嗎?基於我上面的錯誤,我添加了「r'includes」:r'matplotlib.backends.backend_qt4agg',「我的包含列表,但它似乎沒有做任何事情 – mcfly

+0

當然。看到我的回答 – jdi

回答

3

我不完全確定這會解決您的問題,但您應該先糾正錯誤的options字典條目。在python中,當你用相同的鍵一遍又一遍地定義字典時,你只會得到最後一個值。一個密鑰只能存在一次:

options={ 
    r'py2exe': { 
     r'includes': r'ElementConfig', 
     ... 
     r'includes': r'mpl_toolkits', 
     r'includes': r'matplotlib.backends.backend_wx', 
     ... 
    } 
} 

print options 
#{'py2exe': {'includes': 'matplotlib.backends.backend_wx'}} 

我懷疑這種用法的結果是py2exe沒有真正找到你想要的任何內容。 includes應該是一個列表:

options={ 
    'py2exe':{ 
     'includes': [ 
      'ElementConfig', 
      'ColorConv', 
      'Tkinter', 
      're', 
      'math', 
      'sys', 
      'matplotlib', 
      'mpl_toolkits', 
      'matplotlib.backends.backend_wx' 
     ], 
     'dll_excludes': ['MSVCP90.dll'], 
    } 
}, 

如果在此之後,它仍然抱怨後端丟失,您可以添加其他明確的條目:

 'includes': [ 
      ... 
      'matplotlib.backends.backend_qt4agg' 
     ], 
+0

好吧,我得到了後端錯誤。但現在我得到這樣的:回溯(最近最後一次通話): 文件 「Scout_Tool.py」 19行,在 文件 「mpl_toolkits \底圖\ __ __初始化PYC。」 30行,在 文件「mpl_toolkits \ basemap \ pyproj.pyc「,第63行,在 IOError:找不到proj數據目錄。期望它在:C:\ Python27 \ dist \ library.zip \ mpl_toolkits \ basemap \ data – mcfly

+0

這部分可能與matplot特定的'get_py2exe_datafiles'有關。我沒有任何捆綁matplot的經驗,所以我不太確定。你有沒有嘗試過這裏的大量例子:http://www.py2exe.org/index.cgi/MatPlotLib? – jdi

+0

我已經嘗試了其中很多,似乎無法得到它的工作 – mcfly

相關問題