Python脚本文件打包成可执行文件的方法


Posted in Python onJune 02, 2015

将Python脚本文件包装成可执行文件,其目的有二:

一则: 不需要依赖Python编译器就可以运行软件
二则: 不想让自己的源码公布出去

常用的工具有: py2exe、cx_freeze等

【工具:py2exe】

安装py2exe
安装该工具很简单:
只需要从官方网站:http://www.py2exe.org/下载与版本对应的安装程序,点击下一步即可完成安装。
安装后,执行import py2exe,不报错则表示安装成功!

>>> import py2exe  

>>> 

NOTE: 目前该工具只支持到Python2.7, 对于Python3而言,必须借助另外一个工具:cx_freeze

使用py2exe

第一步: 准备源代码,假如名为:Hello.py

Python脚本文件打包成可执行文件的方法

第二步: 准备编译脚本,假如名为:setup.py

from distutils.core import setup  

import py2exe  

  

setup(windows=['Hello.py']) 

第三步: 运行命令: setup.py py2exe

D:\temp>setup.py py2exe

Python脚本文件打包成可执行文件的方法

运行之后,会在我当前运行的目录下(D:\temp)默认生成dict目录,里面的文件如下:

默认情况下,py2exe在目录dist下创建以下这些必须的文件: 
1、一个或多个exe文件。如本例为: Hello.exe 
2、python##.dll。 如本例中: Python27.dll 
3、.pyd文件,它们是已编译的扩展名,它们是exe文件所需要的;加上其它的.dll文件,这些.dll是.pyd所需要的。 
4、一个library.zip文件,它包含了已编译的纯的python模块如.pyc或.pyo 

第四步: 双击Hello.exe可执行文件,跟源代码运行后同样的结果:

Python脚本文件打包成可执行文件的方法

其他

1: 执行setup.py --help获取帮助信息

Global options:  

  --verbose (-v)  run verbosely (default)  

  --quiet (-q)    run quietly (turns verbosity off)  

  --dry-run (-n)  don't actually do anything  

  --help (-h)     show detailed help message  

  --no-user-cfg   ignore pydistutils.cfg in your home directory  

  

Options for 'py2exe' command:  

  --optimize (-O)       optimization level: -O1 for "python -O", -O2 for  

                        "python -OO", and -O0 to disable [default: -O0]  

  --dist-dir (-d)       directory to put final built distributions in (default  

                        is dist)  

  --excludes (-e)       comma-separated list of modules to exclude  

  --dll-excludes        comma-separated list of DLLs to exclude  

  --ignores             comma-separated list of modules to ignore if they are  

                        not found  

  --includes (-i)       comma-separated list of modules to include  

  --packages (-p)       comma-separated list of packages to include  

  --compressed (-c)     create a compressed zipfile  

  --xref (-x)           create and show a module cross reference  

  --bundle-files (-b)   bundle dlls in the zipfile or the exe. Valid levels  

                        are 1, 2, or 3 (default)  

  --skip-archive        do not place Python bytecode files in an archive, put  

                        them directly in the file system  

  --ascii (-a)          do not automatically include encodings and codecs  

  --custom-boot-script  Python file that will be run when setting up the  

                        runtime environment  

  

usage: setup.py [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...]  

   or: setup.py --help [cmd1 cmd2 ...]  

   or: setup.py --help-commands  

   or: setup.py cmd --help 

2: 一个详细的编译脚本

# -*- coding: cp936 -*-  

from distutils.core import setup  

import py2exe  

  

includes = ["encodings", "encodings.*"]  

  

options = {"py2exe":    

            {"compressed": 1,      # 压缩    

             "optimize": 2,        # 优化级别  

             "ascii": 1,           #   

             "includes":includes,  # 编码方式  

             "bundle_files": 1     # 所有文件打包成一个zipfile或exe文件,有效级别1,2,3  

            }}  

setup(  

    options=options,               # 是否需要可选项,默认为None  

    zipfile=None,                  # 是否需要压缩像,默认为None  

    console=[{"script": "HelloCmd.py", "icon_resources": [(1, "pc.ico")]}], # 针对CMD控制端口   

    windows=[{"script": "HelloWin.py", "icon_resources": [(1, "pc.ico")]}], # 针对GUI图形窗口  

    data_files=[("magic",["App_x86.exe",]),],  

    version = "v1.01",             # 版本信息  

    description = "py2exe testing",# 描述信息   

    name = "Hello, Py2exe",        # 名字信息  

) 
Python 相关文章推荐
python错误:AttributeError: 'module' object has no attribute 'setdefaultencoding'问题的解决方法
Aug 22 Python
在Linux系统上安装Python的Scrapy框架的教程
Jun 11 Python
Python实现爬取逐浪小说的方法
Jul 07 Python
Python 数据结构之队列的实现
Jan 22 Python
python实战教程之自动扫雷
Jul 13 Python
pandas.cut具体使用总结
Jun 24 Python
Python转换时间的图文方法
Jul 01 Python
Python 实现将数组/矩阵转换成Image类
Jan 09 Python
python实现xlwt xlrd 指定条件给excel行添加颜色
Jul 14 Python
浅谈对python中if、elif、else的误解
Aug 20 Python
python rsa-oaep加密的示例代码
Sep 23 Python
PO模式在selenium自动化测试框架的优势
Mar 20 Python
python统计cpu利用率的方法
Jun 02 #Python
Python2.x中文乱码问题解决方法
Jun 02 #Python
python实现的守护进程(Daemon)用法实例
Jun 02 #Python
Python中使用ElementTree解析XML示例
Jun 02 #Python
Python文档生成工具pydoc使用介绍
Jun 02 #Python
自己使用总结Python程序代码片段
Jun 02 #Python
python执行子进程实现进程间通信的方法
Jun 02 #Python
You might like
傻瓜化配置PHP环境――Appserv
2006/12/13 PHP
腾讯QQ php程序员面试题目整理
2010/06/08 PHP
PHP面向对象分析设计的61条军规小结
2010/07/17 PHP
php学习笔记之面向对象编程
2012/12/29 PHP
Zend Framework教程之前端控制器Zend_Controller_Front用法详解
2016/03/07 PHP
PHP高并发和大流量解决方案整理
2019/12/24 PHP
JavaScript自定义DateDiff函数(兼容所有浏览器)
2012/03/01 Javascript
js取消单选按钮选中并判断对象是否为空
2013/11/14 Javascript
jquery分割字符串的方法
2015/06/24 Javascript
JS中创建函数的三种方式及区别
2016/03/13 Javascript
值得分享的bootstrap table实例
2016/09/22 Javascript
js面向对象实现canvas制作彩虹球喷枪效果
2016/09/24 Javascript
vue.js绑定class和style样式(6)
2016/12/09 Javascript
Require.js的基本用法详解
2017/07/03 Javascript
React从react-router路由上做登陆验证控制的方法
2018/05/10 Javascript
解决layui上传文件提示上传异常,实际文件已经上传成功的问题
2018/08/19 Javascript
手把手带你封装一个vue component第三方库
2019/02/14 Javascript
浅谈js闭包理解
2019/04/01 Javascript
使用VueCli3+TypeScript+Vuex一步步构建todoList的方法
2019/07/25 Javascript
5个你不知道的JavaScript字符串处理库(小结)
2020/06/01 Javascript
python机器学习理论与实战(四)逻辑回归
2018/01/19 Python
从请求到响应过程中django都做了哪些处理
2018/08/01 Python
Python实现的读取/更改/写入xml文件操作示例
2018/08/30 Python
程序员的七夕用30行代码让Python化身表白神器
2019/08/07 Python
tensorflow实现打印ckpt模型保存下的变量名称及变量值
2020/01/04 Python
python3 sorted 如何实现自定义排序标准
2020/03/12 Python
python pandas.DataFrame.loc函数使用详解
2020/03/26 Python
python中str内置函数用法总结
2020/12/27 Python
Python爬虫设置Cookie解决网站拦截并爬取蚂蚁短租的问题
2021/02/22 Python
Booking.com荷兰:全球酒店网上预订
2017/08/22 全球购物
eBay德国站:eBay.de
2017/09/14 全球购物
在印度上传处方,在线订购药品:Medlife
2019/03/28 全球购物
店长助理岗位职责
2013/12/13 职场文书
幼儿园教育教学反思
2014/01/31 职场文书
高三语文复习计划
2015/01/19 职场文书
2016年妇联“6﹒26国际禁毒日”宣传活动总结
2016/04/05 职场文书