py2exe 打包 MatPlotLib Python

在Python下使用Matpotlib绘图,感觉很吊。和Matlab风格很像。但是Python2.6使用时会有一个问题,所以把所有的都卸了,重新装了python2.7及插件。

装2.7的原因是因为它是很多插件目前支持的最新版本。

python插件汇总:http://www.lfd.uci.edu/~gohlke/pythonlibs/

------------------------------------------------------------------------------------------------------------------------------

再用py2exe打包带有MatPlotlib的python时比较复杂,官方给出了解决方法。

官方参考文件:http://www.py2exe.org/index.cgi/MatPlotLib

文件个数相同,只是setup文件的内容进行改动。

我的setup.py:

#Used successfully in Python2.5 with matplotlib 0.91.2 and PyQt4 (andQt 4.3.3)
from distutils.core import setup
import py2exe

#We need to import the glob module to search for all files.
import glob

#We need to exclude matplotlib backends not being used by thisexecutable. You may find
#that you need different excludes to create a working executable withyour chosen backend.
#We also need to include include various numerix libraries that theother functions call.

opts= {
'py2exe':{ "includes" : [ "matplotlib.backends",
"matplotlib.figure","pylab","numpy",
"matplotlib.backends.backend_tkagg"],
'excludes':['_gtkagg', '_tkagg', '_agg2', '_cairo', '_cocoaagg',
'_fltkagg','_gtk', '_gtkcairo', ],
'dll_excludes':['libgdk-win32-2.0-0.dll',
'libgobject-2.0-0.dll']
}
}

#Save matplotlib-data to mpl-data ( It is located in thematplotlib\mpl-data
#folder and the compiled programs will look for it in \mpl-data
#note: using matplotlib.get_mpldata_info
data_files= [(r'mpl-data',glob.glob(r'C:\DevelopTools\Python\python27\Lib\site-packages\matplotlib\mpl-data\*.*')),
#Because matplotlibrc does not have an extension, glob does not findit (at least I think that's why)
#So add it manually here:
(r'mpl-data',[r'C:\DevelopTools\Python\python27\Lib\site-packages\matplotlib\mpl-data\matplotlibrc']),
(r'mpl-data\images',glob.glob(r'C:\DevelopTools\Python\python27\Lib\site-packages\matplotlib\mpl-data\images\*.*')),
(r'mpl-data\fonts',glob.glob(r'C:\DevelopTools\Python\python27\Lib\site-packages\matplotlib\mpl-data\fonts\*.*'))]

#for console program use 'console = [{"script" :"scriptname.py"}]
setup(windows=[{"script": "XXX.py"}], options=opts, data_files=data_files)

1.其中最后一行,XXX.py为主程序名。

2.将“C:\DevelopTools\Python\python27”换成本机的python安装目录。

之后操作相同,将setup.py放入程序相同文件夹下。

cmd跳转到该目录(windows下可拖进cmd中)。

编译命令:

Python setup.py py2exe

等待n多命令行出现后,即可完成。

---------------------------------------------------------------------------------------

常见问题:

1.打包完成后会出现图示字样:

py2exe 打包 MatPlotLib Python_第1张图片

提示所要运行的计算机里必须有如下支持文件。从图中文件目录可以发现

20130205205205

20130205205217

这两个应该导入,但没有导进去。根据自动生成的命令行

py2exe 打包 MatPlotLib Python_第2张图片只需把这两个文件,复制进来即可。根据我的经验很少有电脑中带有“msvcp90.dll”。所以方便起见,可以也进行导入。

其他解决办法:

      一些应用程序在运行时需要额外的文件,诸如配置文件、字体、位图。如果在安装脚本中用data_files可选项指定了那些额外的文件,那么py2exe能将这些文件拷贝到dist子目录中。data_files应包含一个元组(target-dir, files)列表,其中的files是这些额外的文件的列表。
示例如下:

# mysetup.py
from distutils.core import setup
import glob
import py2exe

setup(console=["helloworld.py"],
      data_files=[("bitmaps",
                   ["bm/large.gif", "bm/small.gif"]),
                  ("fonts",
                   glob.glob("fonts\\*.fnt"))],
)

说明:data_files选项将创建一个子目录dist\bitmaps,其中包含两个.gif文件;一个子目录dist\fonts,其中包含了所有的.fnt文件。

2.在没有安装运行环境的XP下运行,出现如下问题:

Traceback (most recent call last):
  File "testFrame.py", line 13, in <module>
  File "seeHistoryScore.pyc", line 3, in <module>
  File "pylab.pyc", line 1, in <module>
  File "matplotlib\pylab.pyc", line 222, in <module>
  File "matplotlib\mpl.pyc", line 2, in <module>
  File "matplotlib\axis.pyc", line 10, in <module>
  File "matplotlib\font_manager.pyc", line 1325, in <module>
  File "matplotlib\font_manager.pyc", line 1312, in _rebuild
  File "matplotlib\font_manager.pyc", line 994, in __init__
IndexError: list index out of range

貌似就是“程序要用的字体没找到”之类的,然后保存字体的数组调用时就越界了。

解决办法:把它注释掉,暂时可以正常运行。。。。。

3.创建图形化界面程序
     上面的mysetup.py创建了一个控制台的helloword.exe程序,如果你要创建一个图形用户界的程序,那么你只需要将mysetup.py中的console=["helloworld.py"]替换为windows=["myscript.py"]既可。

备注:此方法还未进行测试。但console也可生成图形化界面应用程序(但同时会生成控制台界面)。
      py2exe一次能够创建多个exe文件,你需要将这些脚本文件的列表传递给console或windows的关键字参数。如果你有几个相关联的脚本,那么这是很有用的。
运行下面个命令,将显示py2exe命令的所有命令行标记。
python mysetup.py py2exe --help

你可能感兴趣的:(py2exe 打包 MatPlotLib Python)