前言
之前有做过Python的pyqt桌面应用,当时每次更新打包的时候整个文件下来都需要300~400M,但是一直没有找到合适的方法解决,而是尽量Python少安抓库包,但效果一般,最近找到了解决方法,特此记录,给需要的小伙伴用~
步骤
1、为什么要打包?
众所周知,Python脚本不能在没有安装Python的机器上运行。
那我们如果写了一个数据分析/自动化办公的小脚本,想分享给同事小姐姐使用,可她电脑又没有装Python。
这个时候如果将脚本打包成exe文件,微信发送给她,即使她的电脑上没有安装Python解释器,这个exe程序也能在上面运行。
一般步骤:
Pyinstaller -F py_word.py 打包exePyinstaller -F -w py_word.py 不带控制台的打包Pyinstaller -F -w -i chengzi.ico py_word.py 打包指定exe图标打包以上三个是比较常用的参数,其他参数详见下表
pyinstaller -h可以查看其参数说明,由于较多这里不做完整展示,摘取部分常用参数做简要介绍:
|
参数 |
说明 |
|
-F |
产生单个的可执行文件 |
|
-D |
产生一个目录(包含多个文件)作为可执行程序 |
|
-a |
不包含 Unicode 字符集支持 |
|
-d |
debug 版本的可执行文件 |
|
-w |
指定程序运行时不显示命令行窗口(仅对 Windows 有效) |
|
-c |
指定使用命令行窗口运行程序(仅对 Windows 有效) |
|
-o |
指定 spec 文件的生成目录。如果没有指定,则默认使用当前目录来生成 spec 文件 |
|
-p |
设置 Python 导入模块的路径(和设置 PYTHONPATH 环境变量的作用相似)。也可使用路径分隔符(Windows 使用分号,Linux 使用冒号)来分隔多个路径 |
|
-n |
指定项目(产生的 spec)名字。如果省略该选项,那么第一个脚本的主文件名将作为 spec 的名字 |
打包一个带自定义icon的exe可执行文件
ico图片生成
扩展:把其他格式图片转成ico格式:https://app.xunjiepdf.com/img2icon/
conda创建虚拟环境
1、Python打包为什么大?
在压缩打包之前,先简单说一下为什么Python打包过大?
Python打包exe,不但体积大而且运行奇慢。解释型语言大都是这个样子,只不过Python尤其突出。要解决大而慢,只能用编译型语言,如C,C++,甚至VB都好很多,体积最小的是汇编。
此外,还有知乎大佬说是因为“Anaconda里内置了很多库,打包的时候打包了很多不必要的模块进去,要用纯净的Python来打包。
所以我们可以模拟一个新环境,其中只安装我们本次打包所必要的工具包即可。
那最适合的就是——虚拟环境了!
2、虚拟环境
Python创建虚拟环境的方法有很多,我这里用的时候Anaconda(大家也可以使用Virtualenv、Pipenv来设置虚拟环境等其他方法)
先记几个命令,很简单
conda create -n 虚拟环境名字 python==3.6 #创建虚拟环境 conda activate 虚拟环境名字 #激活虚拟环境 conda deactivate #退出虚拟环境从开始菜单运行“Anaconda Prompt”,出现的界面输入创建虚拟环境的指令。成功创建了一个名字为aotu,且基于python版本3.6的虚拟环境。
在创建过程中需要回复(y/n),Yes,再激活虚拟环境
conda安装的虚拟环境,会把虚拟环境的目录生成在anaconda安装目录下的env目录下。
当然我们也可以在刚刚的窗口,使用命令conda info --envs,来查看conda环境下所有的虚拟环境
3、安装所需的库
上面我们已经创建并激活了名为aotu虚拟环境,输入conda list可以查看当前虚拟环境里已经安装的库。
我们打开所要打包的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这位大神,应该就可以10多M了
最后再简单总结一下虚拟环境+打包的全过程(只三步):
#创建虚拟环境 conda create -n aotu python=3.6#激活虚拟环境 conda activate aotu#Pyinstaller打包 Pyinstaller -F -w -i apple.ico py_word.py5、总结一些小坑
1、上文中一模一样的过程我在两个电脑都执行过一遍。在其中一个上显示缺少xlrd这个库,安装后成功打包,也是一样的大小。
2、在安装库是要注意一些库名,比如docx这个库不要pip install docx,而是需要
pip install python-docx还有一些库可能因为版本不同导致不能使用,多碰碰壁就好了。
3、为了防止打包时候有些库没安装好,可以先在虚拟环境中执行一下Python脚本。运行无误的话再打包,比较保险。
4、最后,如果想要删除虚拟环境的话,可执行下方命令
conda remove -n aotu--all5、打包为exe的话,版本尽量选择python3.6+32位版本,因为win64位系统向下兼容32位程序,但是如果不考虑32位系统的话无所谓,直接python64位版本直接打包就可以,只是只能在win64位系统上跑。
结语
到这里,python打包成exe基本算是结束了,记得一定要把pip升级成最新版的pip在安装pyinstaller哈。要不然可能会出现莫名奇妙的问题。
扩展其他打包方法和注意事项:
1、用form import导入需要的模块会更好一点
2、使用. spec配置文件打包即可,在. spec中去除掉日常用不到的大的包
3、Nuitka打包
以上就是解决python 用Pyinstaller 打包EXE大而慢的问题的详细内容,更多信息请关注OD云其它相关文章!

喜 欢 440