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.打包完成后会出现图示字样:
提示所要运行的计算机里必须有如下支持文件。从图中文件目录可以发现
这两个应该导入,但没有导进去。根据自动生成的命令行
只需把这两个文件,复制进来即可。根据我的经验很少有电脑中带有“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