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通过字典dict判断指定键值是否存在的方法
Mar 21 Python
Python3中的真除和Floor除法用法分析
Mar 16 Python
Python类的动态修改的实例方法
Mar 24 Python
Python3之简单搭建自带服务器的实例讲解
Jun 04 Python
使用python绘制3维正态分布图的方法
Dec 29 Python
关于tf.nn.dynamic_rnn返回值详解
Jan 20 Python
python中使用paramiko模块并实现远程连接服务器执行上传下载功能
Feb 29 Python
在python3.64中安装pyinstaller库的方法步骤
Jun 02 Python
keras自动编码器实现系列之卷积自动编码器操作
Jul 03 Python
python爬虫中url管理器去重操作实例
Nov 30 Python
python asyncio 协程库的使用
Jan 21 Python
Python实现钉钉/企业微信自动打卡的示例代码
Feb 02 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 上传文件大小限制
2009/07/05 PHP
PHP CURL模拟GET及POST函数代码
2010/04/25 PHP
PHP实现异步调用方法研究与分享
2011/10/27 PHP
编写PHP脚本来实现WordPress中评论分页的功能
2015/12/10 PHP
PHP常用字符串函数用法实例总结
2020/06/04 PHP
PHP isset empty函数相关面试题及解析
2020/12/11 PHP
JTrackBar水平拖动效果
2007/07/15 Javascript
使用新的消息弹出框blackbirdjs
2008/10/16 Javascript
extjs fckeditor集成代码
2009/05/10 Javascript
js setattribute批量设置css样式
2009/11/26 Javascript
js或css文件后面跟参数的原因说明
2010/01/09 Javascript
javascript中方便增删改cookie的一个类
2012/10/11 Javascript
jQuery javaScript捕获回车事件(示例代码)
2013/11/07 Javascript
Javascript 学习笔记之 对象篇(二) : 原型对象
2014/06/24 Javascript
浅谈JSON中stringify 函数、toJosn函数和parse函数
2015/01/26 Javascript
js智能获取浏览器版本UA信息的方法
2016/08/08 Javascript
jQuery删除当前节点元素
2016/12/07 Javascript
JS实现全屏的四种写法
2016/12/30 Javascript
微信小程序 生命周期和页面的生命周期详细介绍
2017/01/19 Javascript
Vue.js中组件中的slot实例详解
2017/07/17 Javascript
vue 解决无法对未定义的值,空值或基元值设置反应属性报错问题
2020/07/31 Javascript
python动态加载变量示例分享
2014/02/17 Python
python django 增删改查操作 数据库Mysql
2017/07/27 Python
python 自动重连wifi windows的方法
2018/12/18 Python
python多线程实现TCP服务端
2019/09/03 Python
Django app配置多个数据库代码实例
2019/12/17 Python
PyTorch 对应点相乘、矩阵相乘实例
2019/12/27 Python
Python能做什么
2020/06/02 Python
全球摩托车装备领导者:RevZilla
2017/09/04 全球购物
英国最大的美妆产品在线零售商之一:Beauty Bay
2017/09/29 全球购物
英国领先的露营和露营车品牌之一:OLPRO
2019/08/06 全球购物
C++面试题:关于链表和指针
2013/06/05 面试题
放飞梦想演讲稿
2014/05/05 职场文书
学习计划书怎么写
2014/09/15 职场文书
英国数字版游戏销量周榜公布 《小缇娜的奇幻之地》登顶
2022/04/03 其他游戏
JAVA长虹键法之建造者Builder模式实现
2022/04/10 Java/Android