使用Py2exe和matplotlib错误创建可执行文件

时间:2012-06-27 17:09:34

标签: matplotlib python-2.7 executable py2exe pyinstaller

我一直在搜索这个论坛和许多其他人,似乎无法获得创建可执行文件的好方法。我尝试了几种不同的方法(py2exe,pyinstaller和cx_freeze),似乎都给了我一些错误。

当我尝试使用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'], 
        }
    }, 

) 

感谢您的帮助!

1 个答案:

答案 0 :(得分: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'
        ],