Py2exe 打包 Python项目(traits、traitsui、matplotlib)

这段时间做了用Python做了一个科学计算的项目,项目中用到了很多的第三方Python库,包括PyQt、traits、traitsui、matplotlib、pyface、table、numpy、tvtk等等。Python打包traits和traitsui很麻烦,选用了py2exe、bbfreeze等打包工具,最后在google的帮助下使用了py2exe解决了问题。

其主要难点是要知道你的项目中使用到的python库,然后在includes列表中添加这些Python库,以便能正确打包项目。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from distutils.core import setup
import py2exe
import os
import glob

includes = []
includes.append("sip")
includes.append('numpy')
includes.append('numpy.core')

includes.append('pygments')
includes.append('pygments.*')
includes.append('pygments.filters')
includes.append('pygments.filters.*')
includes.append('pygments.formatters')
includes.append('pygments.formatters.*')
includes.append('pygments.lexers')
includes.append('pygments.lexers.*')
includes.append('pygments.styles')
includes.append('pygments.styles.*')

includes.append('scipy')
includes.append('xml')

includes.append('lxml')
includes.append('lxml.*')

includes.append('wx')
includes.append('wx.*')

includes.append('traits')
includes.append('traits.etsconfig.api.*')
includes.append('traits.etsconfig')
includes.append('traits.etsconfig.*')

includes.append('traitsui')
includes.append('traitsui.*')

includes.append('traitsui.qt4')
includes.append('traitsui.qt4.*')
includes.append('traitsui.qt4.extra')
includes.append('traitsui.qt4.extra.*')
includes.append('traitsui.editors')
includes.append('traitsui.editors.*')
includes.append('traitsui.extras')
includes.append('traitsui.extras.*')
includes.append('traitsui.menu')
includes.append('traitsui.menu.*')

includes.append('pyface')
includes.append('pyface.*')
includes.append('pyface.qt')
includes.append('pyface.qt.*')

includes.append('pyface.ui.qt4')
includes.append('pyface.ui.qt4.init')
includes.append('pyface.ui.qt4.*')
includes.append('pyface.ui.qt4.code_editor.*')
includes.append('pyface.ui.qt4.console.*')
includes.append('pyface.ui.qt4.tasks.*')
includes.append('pyface.ui.qt4.action.*')
includes.append('pyface.ui.qt4.timer.*')
includes.append('pyface.ui.qt4.wizard.*')
includes.append('pyface.ui.qt4.workbench.*')

includes.append('wx')
includes.append('wx.*')

includes.append('PyQt4')
includes.append('PyQt4.*')

includes.append('enable')
includes.append('enable.drawing')
includes.append('enable.tools')
includes.append('enable.wx')
includes.append('enable.wx.*')
includes.append('enable.qt4')
includes.append('enable.qt4.*')

includes.append('enable.savage')
includes.append('enable.savage.*')
includes.append('enable.savage.svg')
includes.append('enable.savage.svg.*')
includes.append('enable.savage.svg.backends')
includes.append('enable.savage.svg.backends.wx')
includes.append('enable.savage.svg.backends.wx.*')
includes.append('enable.savage.svg.css')
includes.append('enable.savage.compliance')
includes.append('enable.savage.trait_defs')
includes.append('enable.savage.trait_defs.*')
includes.append('enable.savage.trait_defs.ui')
includes.append('enable.savage.trait_defs.ui.*')
includes.append('enable.savage.trait_defs.ui.qt4')
includes.append('enable.savage.trait_defs.ui.qt4.*')

includes.append('tvtk')
includes.append('tvtk.*')

includes.append('tvtk.custom')
includes.append('tvtk.custom.*')
includes.append('tvtk.pipeline')
includes.append('tvtk.pipeline.*')
includes.append('tvtk.plugins')
includes.append('tvtk.plugins.*')
includes.append('tvtk.pyface')
includes.append('tvtk.pyface.*')
includes.append('tvtk.pyface.ui')
includes.append('tvtk.pyface.ui.*')
includes.append('tvtk.pyface.ui.qt4')
includes.append('tvtk.pyface.ui.qt4.*')
includes.append('tvtk.tools')
includes.append('tvtk.tools.*')
includes.append('tvtk.util')
includes.append('tvtk.util.*')
includes.append('tvtk.view')
includes.append('tvtk.view.*')

includes.append('matplotlib.backends')
includes.append('matplotlib.backends.backend_qt4agg')
includes.append('matplotlib.figure')

includes.append('tables')
includes.append('tables.*')

includes.append('apptools.preferences')
includes.append('apptools.preferences.*')
includes.append('apptools.preferences.ui')
includes.append('apptools.preferences.ui.*')

packages = []

data_folders = []

# Traited apps:
ETS_folder = r'C:\Python27\Lib\site-packages'

data_folders.append( ( os.path.join(ETS_folder,r'enable\images'), r'enable\images') )
data_folders.append( ( os.path.join(ETS_folder,r'traitsui\qt4\images'), r'traitsui\qt4\images') )
data_folders.append( ( os.path.join(ETS_folder,r'tvtk\pyface\images\16x16'), r'tvtk\pyface\images\16x16') )
data_folders.append( ( os.path.join(ETS_folder,r'pyface\images'), r'pyface\images') )
data_folders.append( ( os.path.join(ETS_folder,r'pyface\ui\qt4\images'), r'pyface\ui\qt4\images') )
data_folders.append( ( os.path.join(ETS_folder,r'pyface\ui\qt4\workbench\images'), r'pyface\ui\qt4\workbench\images') )

data_folders.append( ( os.path.join(ETS_folder,r'tvtk'), r'tvtk') )
data_folders.append( ( os.path.join(ETS_folder,r'tvtk\plugins\scene'), r'tvtk\plugins\scene') )

data_folders.append( ( os.path.join(ETS_folder,r'mayavi\preferences'), r'mayavi\preferences') )
data_folders.append( ( os.path.join(ETS_folder,r'mayavi\core\lut'), r'mayavi\core\lut') )
data_folders.append( ( os.path.join(ETS_folder,r'mayavi\core\images'), r'mayavi\core\images') )
data_folders.append( ( os.path.join(ETS_folder,r'mayavi\core\ui\images'), r'mayavi\core\ui\images') )

data_folders.append( ( os.path.join(ETS_folder,r'traitsui\image\library'), r'traitsui\image\library') )

data_folders.append( ( os.path.join(ETS_folder,r'PyQt4\plugins\imageformats'), r'imageformats'))

data_folders.append( ( os.path.join(ETS_folder,r'matplotlib\mpl-data\images'), r'\matplotlib\mpl-data\images') )

rotor_resources_folder = 'C:\Users\cloud\workspace\Rotor3\src'
data_folders.append( ( os.path.join(rotor_resources_folder,r'resources'), r'resources') )
data_folders.append( ( os.path.join(rotor_resources_folder,r'resources\file'), r'resources\file') )
data_folders.append( ( os.path.join(rotor_resources_folder,r'resources\folder'), r'resources\folder') )
data_folders.append( ( os.path.join(rotor_resources_folder,r'resources\toolbar'), r'resources\toolbar') )
data_folders.append( ( os.path.join(rotor_resources_folder,r'resources\workspace'), r'resources\workspace') )

# Matplotlib
import matplotlib as mpl
data_files = mpl.get_py2exe_datafiles()

# Parsing folders and building the data_files table
for folder, relative_path in data_folders:
    for file in os.listdir(folder):
        f1 = os.path.join(folder,file)
        if os.path.isfile(f1): # skip directories
            f2 = relative_path, [f1]
            data_files.append(f2)

setup(windows=[{"script":'run2.py',"icon_resources":[(1,"xxx.ico")]}],
    author="Hangzhou Dianzi University",
    version = "1.0",
    description = "DPT For Hangzhou Dianzi University",
    name = "Hangzhou Dianzi University",
    options = {"py2exe": {    "optimize": 0,
                              "packages": packages,
                              "includes": includes,
                              "dll_excludes": ["MSVCP90.dll", "w9xpopen.exe"],
                              "dist_dir": 'dist',
                              "bundle_files":2,
                              "xref": False,
                              "skip_archive": True,
                              "ascii": False,
                              "custom_boot_script": '',
                              "compressed":False,
                             },},
    data_files=data_files)
时间: 2024-10-26 22:13:32

Py2exe 打包 Python项目(traits、traitsui、matplotlib)的相关文章

利用pyinstaller打包Python项目包含多个文件夹

最近用Python给媳妇写了两个小项目,给解决了她的每天重复的一些人工操作.媳妇很开心,但是问题来了,她是个Python小白,对她来说,需要安装配置Python环境和一大堆第三方模块是个麻烦事儿.而且后续把这些工作交接给别人的话,一是又需要重新安装Python环境,二是我辛苦给她写的源码就这样暴露了. 为了解决这个问题,于是就开始百度.果然Python还是有好多中加密源码的方法,并且可能打包成exe的可执行文件.这样不仅保护了源码的安全,还免去了安装Python环境的繁琐. 最开始试了是py2e

py2exe打包整个项目

这段时间做了用Python做了一个科学计算的项目,项目中用到了很多的第三方Python库,包括PyQt.traits.traitsui.matplotlib.pyface.table.numpy.tvtk等等.Python打包traits和traitsui很麻烦,选用了py2exe.bbfreeze等打包工具,最后在google的帮助下使用了py2exe解决了问题.其主要难点是要知道你的项目中使用到的python库,然后在includes列表中添加这些Python库,以便能正确打包项目.#!/u

【Python】使用 py2exe打包Python程序为.exe文件

Step 1: 编写mysetup.py import py2exe #mysetup.py from distutils.core import setup import py2exe setup(console=['Hello.py']) 其中Hello.py就是想打包的Python脚本 Step 2: 将该mysetup.py和Hello.py放在同一个目录下 Step 3: 打开cmd,cd进入Step 2中的路径,运行python mysetup.py py2exe 大功告成,你会发现

py2exe打包python脚本

在工作中遇到将python脚本转换成exe可执行程序的需求,通过查询可以使用py2exe来构建满足要求的程序,这里简要说明一下使用步骤. 一.py2exe是一个将python脚本转换成windows上的可独立执行的可执行程序(*.exe)的工具,这样,你就可以不用装python而在windows系统上运行这个可执行程序.py2exe已经被用于创建wxPython,Tkinter,Pmw,PyGTK,pygame,win32com client和server,和其它的独立程序. 二.可以从http

用py2exe打包python脚本程序

python版本2.7 windows 7 32bit py2exe版本0.6.10 依赖pywin32这个包,建议安装. 首先安装py2exe,使用easy_install安装.在cmd中输入:easy_install py2exe.(至于easy_install怎么安装可以谷歌下) 安装完成之后,首先把写好的python脚本都放在一个文件夹中例如:C:/test/ 然后,在这个文件夹中新建一个setup.py文件,内容如下: #coding=utf-8'''@author: Administ

创建成功的Python项目

创建成功的Python项目 前端开发工具技巧介绍—Sublime篇 SEO在网页制作中的应用 观察者模式 使用D3制作图表 英文原文:Create successful Python projects,编译:Elaine.Ye 创建一个成功的开源Python项目所涉及的并不仅仅是编写有用的代码,与其相关的还有社区的参与.越来越多的合作机会.技艺以及支持等.探索最佳的做法有助于你创建出自己的成功项目. 开源Python项目的生态系统丰富多样,这使得您能够站在巨人的肩膀上来开发下一个开源项目.此外,

py2exe打包遇到的问题

py2exe打包python成.exe文件 打包过程和结果 1.创建setup脚本打包文件,其中设置打包的属性和方法.注意:尽量将被打包文件和此打包脚本放在同目录下(因为在尝试非同目录下时,出现了非可再现性的寻找被打包文件失败) 2.在cmd命令行,进入setup打包脚本所在命令行,执行此脚本文件(python setup.py py2exe) 3.默认出现built和dist两个文件.dist文件中的内容即为打包程序的内容,也即可发布的内容. 打包过程遇到的问题: 1.Win10系统文件缺失,

python3 使用py2exe打包exe

py2exe在sourceforge 的下载只支持到2.7. 针对python3.0+的版本,需要自己编译. 1.下载源码 svn checkout svn://svn.code.sf.net/p/py2exe/svn/trunk py2exe-svn 2.编译环境 这里使用的是vs2014. 3.安装 进入py2exe-3 python setup.py install 这里会进行编译.安装. 此外,python默认使用的是vs9,针对vs2014,需要改下文件: Lib\distutils\

打包python到exe

#!/usr/bin/python # -*- coding:utf-8 -*- import distutils import py2exe from distutils.core import setup options = { # "py2exe": {"packages": ['wx.lib.pubsub'], "includes": ["sip"]} # "py2exe": {"incl