很多朋友都知道如何将Py程序打包成exe文件,而且很多人发现,一个简单的Py程序打包成exe文件后,编程容量有好几G。
如何将Python打包成exe,以及如何使其足够小。
1、标准包装
目前比较常见的打包exe的方法都是通过Pyinstaller来实现的,本文也将使用这些常规方法。 如果你已经熟悉这位男配了,可以直接跳到本文后半部分。
1、为什么要打包?
众所周知,Python脚本无法在没有安装Python的机器上运行。
那么如果我们写一个数据分析/手动办公的小脚本,我们想分享给朋友的小妹妹,但是她的笔记本没有安装Python。
这时,若果把脚本打包成exe文件,沫沫发给她了。 虽然她的笔记本上没有安装Python库,但是exe程序仍然可以在其中运行。 是不是很难过?
2.安装Pyinstaller
首先我们需要先安装Pyinstaller,在cmd中直接使用pip命令
pip install pyinstaller
如果网速太慢,可以切换到国外源来加快速度。 本文其余部分直接引用国外资料,不再重复注释。
pip install -i https://pypi.douban.com/simple/ pyinstaller #豆瓣源
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyinstaller #清华源
3.Pyinstaller打包步骤
这里以之前用Python手动批量编写Word晚报的代码为例进行演示。将脚本py_word.py、待处理的表格文件workbook.xlsx以及规划的软件图标图片 Chengzi.ico 放入我的笔记本的 F:py_word 目录
1.cmd切换到我们刚才放文件的目录
2、执行命令Pyinstaller-Fw-i Chengzi.icopy_word.py,执行过程很长,并且没有记录动画。
执行后会发现当前目录下多了几个文件夹,打开名为dist的文件夹。
已经生成了一个名为py_word的exe应用程序,图标也是我们设置的橙色图案。 看来已经成功一半了。
如果您不想运行,可以尝试正常生成Word晚报吗?
运行成功,可惜文件有点大(339M)
4.Pyinstaller参数解读
说回刚刚执行的命令
Pyinstaller -F -w -i chengzi.ico py_word.py
我给大家解释一下Pyinstaller的参数,其中
最后,稍微总结一下:
Pyinstaller -F py_word.py 打包exe
Pyinstaller -F -w py_word.py 不带控制台的打包
Pyinstaller -F -w -i chengzi.ico py_word.py 打包指定exe图标打包
以上三个是比较常用的参数,其他参数详见下表
Pyinstaller参数列表
5.ico图像生成
我喜欢在自己制作的软件上贴上自己的图标,但是哪里有那么多ico图片呢?
一是你可以找到专门的ico图片网站,但它们很冷门,图片库也很小。
另一个是你可以自己生成它。 这里给大家分享一个可以将其他格式的图片转换为ico格式的网站:
2、压缩包装
好吧,伙计们
最激动的时刻,刚才生成的exe太大了,用Momo传输一个300多M的软件程序需要费很大力气。
我也尝试过很多方法,比如:改变spec文件定制打包、pipenv虚拟环境、使用开源upx压缩等,而往往过程比较繁琐,或者成功率不高(取决于如果压缩不成功则面对)。
而我要分享的是我至今仍在使用的最简单且成功率很高的方法——conda来创建虚拟环境。
1.为什么Python的包这么大?
在压缩打包之前,先简单说一下为什么Python包太大?
Python打包的exe不仅体积大而且运行速度极慢。 大多数解释型语言都是这样,但Python尤为突出。 解决大而慢的问题,只有编译型语言,比如C、C++,甚至VB要好得多,而体积最小的是汇编。 [1]
据悉,也有知乎大鳄称,是因为“Anaconda进进出出的库非常多,打包的时候也打包了很多必要的模块,必须用纯Python来打包”。
因此我们可以模拟一个新的环境,其中只安装我们打包所需的工具包。
那么最适合的就是——虚拟环境!
2. 虚拟环境
在Python中创建虚拟环境的方法有很多,我是Anaconda的忠实用户。 如果你像我一样,那就很简单了。 (也可以使用Virtualenv、Pipenv搭建虚拟环境,善用搜索,技巧长篇大论)
先记住几个命令,很简单
conda create -n 虚拟环境名字 python==3.6 #创建虚拟环境
conda activate 虚拟环境名字 #激活虚拟环境
conda deactivate #退出虚拟环境
从开始菜单运行“AnacondaPrompt”,在出现的界面上输入命令创建虚拟环境。 基于python 3.6版本成功创建了名为aotu的虚拟环境。
创建过程中需要回复(y/n)Yes,然后激活虚拟环境
conda安装的虚拟环境会在anaconda安装目录下的env目录下生成虚拟环境的目录。
其实我们也可以使用刚才窗口中的命令condainfo --envs来查看conda环境中的所有虚拟环境
3.安装所需的库
我们之前已经创建并激活了名为 aotu 的虚拟环境,您可以通过输入 condalist 查看当前虚拟环境中已经安装的库。
我们打开需要打包的Python脚本,对比上图把网站封装成小程序,发现需要额外安装pandas和docx这两个库。 其实打包必不可少的pyinstaller库是不能缺少的。
安装库的过程不再多余
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pandas
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple python-docx
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyinstaller
安装后看一下
已经安装成功了,有些是因为这些库才安装的,所以忽略它们。
4.Pyinstaller打包步骤
这里不再重复,尝试另一个苹果图标即可
Pyinstaller -F -w -i apple.ico py_word.py
产生
成功压缩到29.8M,如果pandas的master不导出的话应该有10M多
运行一下没问题
最后简单总结一下虚拟环境+打包的整个过程(只有三步):
#创建虚拟环境
conda create -n aotu python=3.6
#激活虚拟环境
conda activate aotu
#Pyinstaller打包
Pyinstaller -F -w -i apple.ico py_word.py
5.总结一些小坑
1.听起来有点玄学。 我在上面的两个笔记本中执行了完全相同的过程。 其中一张显示缺少xlrd的库,安装后打包成功,大小也是一样。 男朋友们可以在文末获取文件,也来尝试一下。
2.安装库时要注意一些库名称。 例如,库 docx 不需要 pipinstalldocx,但需要
pip install python-docx
还有一些库可能因为版本不同而无法使用,只是碰壁的次数多了。
3.为了避免打包时某些库安装不正确,可以先在虚拟环境中执行Python脚本。 如果操作正确的话,再打包,这样更安全。
4.最后,如果想删除虚拟环境,可以执行以下命令
conda remove -n aotu--all
5.
如果打包为exe的话,尽量选择python3.6+32位版本,因为win64位系统向上兼容32位程序,不考虑32位也没关系位系统,可以直接打包python64位版本,但只能在win64位系统中运行。
6.下载链接
测试Python打包,手头没有合适的文件把网站封装成小程序,这里是文章中所有文件链接: 提取码:kxpy