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  __getattr__与__setattr__使用方法
Sep 06 Python
Python深入学习之内存管理
Aug 31 Python
跟老齐学Python之玩转字符串(2)更新篇
Sep 28 Python
python使用urllib2提交http post请求的方法
May 26 Python
python字典基本操作实例分析
Jul 11 Python
Python下载指定页面上图片的方法
May 12 Python
Python中你应该知道的一些内置函数
Mar 31 Python
Python模块结构与布局操作方法实例分析
Jul 24 Python
Django web框架使用url path name详解
Apr 29 Python
Python 窗体(tkinter)按钮 位置实例
Jun 13 Python
OpenCV4.1.0+VS2017环境配置的方法步骤
Jul 09 Python
python 发送get请求接口详解
Nov 17 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
oracle资料库函式库
2006/10/09 PHP
查找mysql字段中固定字符串并替换的几个方法
2012/09/23 PHP
php防止sql注入示例分析和几种常见攻击正则表达式
2014/01/12 PHP
php实现的SESSION类
2014/12/02 PHP
PHP中imagick函数的中文解释
2015/01/21 PHP
PHP实现的mysql主从数据库状态检测功能示例
2017/07/20 PHP
javascript 有用的脚本函数
2009/05/07 Javascript
写出更好的JavaScript程序之undefined篇(中)
2009/11/23 Javascript
JavaScript 原型继承之构造函数继承
2011/08/26 Javascript
js jquery获取随机生成id的服务器控件的三种方法
2013/07/11 Javascript
js获取控件位置以及不同浏览器中的差别介绍
2013/08/08 Javascript
js实现按钮控制图片360度翻转特效的方法
2015/02/17 Javascript
jquery实现未经美化的简洁TAB菜单效果
2015/08/28 Javascript
原生JS实现旋转木马式图片轮播插件
2016/04/25 Javascript
JS中Json数据的处理和解析JSON数据的方法详解
2016/06/29 Javascript
js实现精确到毫秒的倒计时效果
2016/08/05 Javascript
Three.js利用顶点绘制立方体的方法详解
2017/09/27 Javascript
Vue组件通信之Bus的具体使用
2017/12/28 Javascript
关于node-bindings无法在Electron中使用的解决办法
2018/12/18 Javascript
使用gulp构建前端自动化的方法示例
2018/12/25 Javascript
vue $set 给数据赋值的实例
2019/11/09 Javascript
[02:11]2016国际邀请赛中国区预选赛最美TA采访现场玩家
2016/06/28 DOTA
Python基于pygame实现的弹力球效果(附源码)
2015/11/11 Python
利用python解决mysql视图导入导出依赖的问题
2017/12/17 Python
详解python--模拟轮盘抽奖游戏
2019/04/12 Python
java中的控制结构(if,循环)详解
2019/06/26 Python
Python使用pyautocad+openpyxl处理cad文件示例
2019/07/11 Python
python实现梯度下降法
2020/03/24 Python
一家专门做特卖的网站:唯品会
2016/10/09 全球购物
家长给孩子的表扬信
2014/01/17 职场文书
教职工代表大会主持词
2014/04/01 职场文书
大学新生军训方案
2014/05/03 职场文书
大学生个人先进事迹材料范文
2014/05/03 职场文书
派出所班子党的群众路线对照检查材料思想汇报
2014/10/01 职场文书
农民工工资保障承诺书
2015/05/04 职场文书
python实现简易名片管理系统
2021/04/11 Python