1

我一直在搜索这个论坛和许多其他论坛,似乎找不到创建可执行文件的好方法。我尝试了几种不同的方法(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'], 
        }
    }, 

) 

谢谢你的帮助!

4

1 回答 1

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'
        ],
于 2012-06-27T17:41:52.770 回答