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二分法实现实例
Nov 21 Python
Python SQLite3数据库操作类分享
Jun 10 Python
python实现图片变亮或者变暗的方法
Jun 01 Python
基于Python Shell获取hostname和fqdn释疑
Jan 25 Python
python斐波那契数列的计算方法
Sep 27 Python
python面向对象入门教程之从代码复用开始(一)
Dec 11 Python
python实时检测键盘输入函数的示例
Jul 17 Python
Python2和3字符编码的区别知识点整理
Aug 08 Python
python实现按关键字筛选日志文件
Dec 24 Python
Tensorflow 1.0之后模型文件、权重数值的读取方式
Feb 12 Python
Python3实现飞机大战游戏
Apr 24 Python
OpenCV中resize函数插值算法的实现过程(五种)
Jun 05 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中var_dump,var_export,print_r三个函数的区别
2013/06/21 PHP
Ajax请求PHP后台接口返回信息的实例代码
2018/08/21 PHP
Laravel 前端资源配置教程
2019/10/18 PHP
Thinkphp 框架配置操作之配置加载与读取配置实例分析
2020/05/15 PHP
Extjs中TabPane如何嵌套在其他网页中实现思路及代码
2013/01/27 Javascript
js控制再次点击按钮之间的间隔时间可防止重复提交
2014/08/01 Javascript
javascript封装的sqlite操作类实例
2015/07/17 Javascript
javascript基本数据类型及类型检测常用方法小结
2016/12/14 Javascript
HTML页面定时跳转方法解析(2种任选)
2016/12/22 Javascript
Node.js利用Net模块实现多人命令行聊天室的方法
2016/12/23 Javascript
vue 打包后的文件部署到express服务器上的方法
2017/08/09 Javascript
使用vue实现简单键盘的示例(支持移动端和pc端)
2017/12/25 Javascript
vue watch深度监听对象实现数据联动效果
2018/08/16 Javascript
JavaScript实现预览本地上传图片功能完整示例
2019/03/08 Javascript
VUEX 数据持久化,刷新后重新获取的例子
2019/11/12 Javascript
Python中除法使用的注意事项
2014/08/21 Python
wxPython窗口的继承机制实例分析
2014/09/28 Python
详解Python中break语句的用法
2015/05/14 Python
使用FastCGI部署Python的Django应用的教程
2015/07/22 Python
Python中asyncore异步模块的用法及实现httpclient的实例
2016/06/28 Python
Python实现的排列组合计算操作示例
2017/10/13 Python
python实现redis三种cas事务操作
2017/12/19 Python
python中强大的format函数实例详解
2018/12/05 Python
python多任务及返回值的处理方法
2019/01/22 Python
Django ORM 自定义 char 类型字段解析
2019/08/09 Python
flask 实现上传图片并缩放作为头像的例子
2020/01/09 Python
Django模板获取field的verbose_name实例
2020/05/19 Python
详解html5 canvas 微信海报分享(个人爬坑)
2018/01/12 HTML / CSS
日本最大的购物网站乐天市场国际版:Rakuten Global Market(支持中文)
2020/02/03 全球购物
Java基础面试题
2012/11/02 面试题
护理自荐信
2013/10/22 职场文书
毕业证丢失证明范本
2014/09/20 职场文书
护理医院见习报告
2014/11/03 职场文书
考试没考好检讨书(精选篇)
2014/11/16 职场文书
导游词之重庆钓鱼城
2019/09/19 职场文书
Django 如何实现文件上传下载
2021/04/08 Python