zoukankan      html  css  js  c++  java
  • 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.打包完成后会出现图示字样:

    20130205205133

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

    20130205205205

    20130205205217

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

    20130205205115只需把这两个文件,复制进来即可。根据我的经验很少有电脑中带有“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

  • 相关阅读:
    031-进阶(日志)
    Django 路由系统
    C++ 面向对象(接口-抽象类)
    C++ 面向对象(多态)
    C++ 面向对象(数据抽象)
    三十、首页列表显示全部问答,完成问答详情页布局
    二十九、制作首页的显示列表
    二十八、发布功能完成
    二十七、登录之后更新导航
    二十六、完成登录功能,用session记住用户名
  • 原文地址:https://www.cnblogs.com/sunwufan/p/2893340.html
Copyright © 2011-2022 走看看