将Python脚本打包成可执行文件

转载 2015年11月17日 17:38:00

Python是一个脚本语言,被解释器解释执行。它的发布方式:

.py文件:

对于开源项目或者源码没那么重要的,直接提供源码,需要使用者自行安装Python并且安装依赖的各种库。(Python官方的各种安装包就是这样做的)

.pyc文件:

有些公司或个人因为机密或者各种原因,不愿意源码被运行者看到,可以使用pyc文件发布,pyc文件是Python解释器可以识别的二进制码,故发布后也是跨平台的,需要使用者安装相应版本的Python和依赖库。

可执行文件:

对于非码农用户或者一些小白用户,你让他装个Python同时还要折腾一堆依赖库,那简直是个灾难。对于此类用户,最简单的方式就是提供一个可执行文件,只需要把用法告诉Ta即可。比较麻烦的是需要针对不同平台需要打包不同的可执行文件(Windows,Linux,Mac,…)。

本文主要就是介绍最后一种方式,.py和.pyc都比较简单,Python本身就可以搞定。将Python脚本打包成可执行文件有多种方式,本文重点介绍PyInstaller,其它仅作比较和参考。

Freezing Your Code

各种打包工具的对比如下(来自文章Freezing Your Code):

Solution Windows Linux OSX Python3 License One-file mode Zipfile import Eggs pkg_resources support
bbFreeze yes yes yes no MIT no yes yes yes
py2exe yes no no yes MIT yes yes no no
pyInstaller yes yes yes no GPL yes no yes no
cx_Freeze yes yes yes yes PSF no yes yes no
py2app no no yes yes MIT no yes yes yes

PS.其中pyInstaller和cx_Freeze都是不错的,stackoverflow上也有人建议用cx_Freeze,说是更便捷些。pkg_resources新版的pyInstaller貌似是支持的。

安装PyInstaller

对于那些网络比较稳定,能够流畅使用pip源地址的用户,直接下面的命令就可以搞定:

pip install pyinstaller 

通常我们会下载源码包,然后进入包目录,执行下面的命令(需要安装setuptools):

python setup.py install 

安装完后,检查安装成功与否:

pyinstaller --version 

安装成功后,就可以使用下面的命令了:

pyinstaller : 打包可执行文件的主要命令,详细用法下面会介绍。
pyi-archive_viewer : 查看可执行包里面的文件列表。
pyi-bindepend : 查看可执行文件依赖的动态库(.so或.dll文件)
pyi-... : 等等。

使用PyInstaller

pyinstaller的语法:

pyinstaller [options] script [script ...] | specfile 

最简单的用法,在和myscript.py同目录下执行命令:

pyinstaller mycript.py 

然后会看到新增加了两个目录build和dist,dist下面的文件就是可以发布的可执行文件,对于上面的命令你会发现dist目录下面有一堆文件,各种都动态库文件和myscrip可执行文件。有时这样感觉比较麻烦,需要打包dist下面的所有东西才能发布,万一丢掉一个动态库就无法运行了,好在pyInstaller支持单文件模式,只需要执行:

pyinstaller -F mycript.py 

你会发现dist下面只有一个可执行文件,这个单文件就可以发布了,可以运行在你正在使用的操作系统类似的系统的下面。

当然,pyinstaller还有各种选项,有通用选项,如-d选项用于debug,了解pyInstaller执行的过程;还有一些针对不同平台的选项,具体用法可以访问PyInstaller官方WIKI。

在执行pyInstaller命令的时候,会在和脚本相同目录下,生成一个.spec文件,该文件会告诉pyinstaller如何处理你的所有脚本,同时包含了命令选项。一般我们不用去理会这个文件,若需要打包数据文件,或者给打包的二进制增加一些Python的运行时选项时…一些高级打包选项时,需要手动编辑.spec文件。可以使用:

pyi-makespec options script [script ...] 

创建一个.spec文件,对于手动编辑的.spec文件,我们可以使用下面任意一条命令:

pyinstaller specfile pyi-build specfile 

PyInstaller的原理简介

PyInstaller其实就是把python解析器和你自己的脚本打包成一个可执行的文件,和编译成真正的机器码完全是两回事,所以千万不要指望成打包成一个可执行文件会提高运行效率,相反可能会降低运行效率,好处就是在运行者的机器上不用安装python和你的脚本依赖的库。在Linux操作系统下,它主要用的binutil工具包里面的ldd和objdump命令。

PyInstaller输入你指定的的脚本,首先分析脚本所依赖的其他脚本,然后去查找,复制,把所有相关的脚本收集起来,包括Python解析器,然后把这些文件放在一个目录下,或者打包进一个可执行文件里面。

可以直接发布输出的整个文件夹里面的文件,或者生成的可执行文件。你只需要告诉用户,你的应用App是自我包含的,不需要安装其他包,或某个版本的Python,就可以直接运行了。

需要注意的是,PyInstaller打包的执行文件,只能在和打包机器系统同样的环境下。也就是说,不具备可移植性,若需要在不同系统上运行,就必须针对该平台进行打包。

参考资料

Freezing Your Code
PyInstaller官方WIKI
PyInstaller源码

将Python脚本打包成可执行文件.exe

将Python脚本打包成可执行文件点击打开链接 http://www.cnblogs.com/mywolrd/p/4756005.html 【Python】.py程序转换成.exe可执行程序点击打开...
  • u012041523
  • u012041523
  • 2017年04月20日 16:39
  • 360

将Python脚本打包成可执行文件

Python是一个脚本语言,被解释器解释执行。它的发布方式: .py文件:对于开源项目或者源码没那么重要的,直接提供源码,需要使用者自行安装Python并且安装依赖的各种库。(Python官方的各种安...
  • future_fighter
  • future_fighter
  • 2015年08月24日 21:40
  • 1541

VS10_程序打包成可执行文件C#

本方法同样适用于VS2005和VS2008,有细微的差别。 (一)            打开Vs2010,文件—新建—项目。 (二)            其他项目类型—安装和部署—VS i...
  • softwarelive
  • softwarelive
  • 2014年10月11日 23:26
  • 500

将Python程序打包成可执行文件exe

Python编程语言是一款功能强大的免费开源的通用型计算机程序应用语言,对于经验丰富的开发人员来说,掌握这样一款语言在其程序开发中是一个比较重要的选择。我们今天就先来了解一下python打包方法的相关...
  • Gordennizaicunzai
  • Gordennizaicunzai
  • 2017年06月10日 12:24
  • 689

c#程序打包成可执行文件

c#程序打包
  • shshjj
  • shshjj
  • 2017年07月21日 12:14
  • 226

PyInstaller对python脚本进行代码打包成单个独立的exe可执行文件

安装命令行里面用pip安装 pip install pyinstaller 打包脚本 pyinstaller -F -w --icon="F:\python\Pyqt\test.ico" te...
  • lixintong1992
  • lixintong1992
  • 2016年07月12日 21:09
  • 1787

python--打包成可执行文件

python是一个非常非常优秀的编程语言,它最大的特性就是跨平台。python程序几乎可以在所有常见的平台中进行使用,而且大部分无需修改任何代码!不过,python也有一点点小缺憾(这个是由于自身本质...
  • buyibanxiaoer
  • buyibanxiaoer
  • 2014年05月01日 16:18
  • 452

可执行文件简单打包成rpm文件

操作环境:CentOS_6.7-Minimal 首先安装rpm环境: yum install rpm-build yum install rpm-devel yum install rpmde...
  • fang437385323
  • fang437385323
  • 2017年07月09日 13:40
  • 472

Windows平台使用PyInstaller将Python脚本打包成可执行文件

本文介绍一种方法,通过PyInstaller工具将Python脚本打包成一个可执行文件,可以直接在Windows运行,不管Windows是否安装Python都可以运行该可执行文件。...
  • leo881205
  • leo881205
  • 2016年12月14日 22:11
  • 893

用PyInstaller将依赖Dlib库的python文件(.py)转换成exe可执行文件

用PyInstaller将依赖Dlib库的python文件(.py)转换成exe可执行文件
  • hua18513115569
  • hua18513115569
  • 2017年10月12日 20:14
  • 91
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:将Python脚本打包成可执行文件
举报原因:
原因补充:

(最多只允许输入30个字)