python程序打包成.exe(史上最全面讲解)(代码片段)

平静愉悦 平静愉悦     2022-12-02     262

关键词:

 

一直有读者在后台问有关Python脚本打包成exe的问题。今天就推荐给大家一篇文章,全面总结一下:Python如何打包成exe,以及如何打得足够小。

标准打包

目前比较常见的打包exe方法都是通过Pyinstaller来实现的,本文也将使用这种常规方法。如果对这块已经很熟悉的小伙伴,可以直接下滑到本文下半部分。

为什么要打包?

众所周知,Python脚本不能在没有安装Python的机器上运行。

那我们如果写了一个数据分析/自动化办公的小脚本,想分享给同事小姐姐使用,可她电脑又没有装Python。

这个时候如果将脚本打包成exe文件,微信发送给她,即使她的电脑上没有安装Python解释器,这个exe程序也能在上面运行。岂不美哉?

(当然,想通过帮安装Python跟小姐姐建立感情的话,就当我没说)

安装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 #清华源

Pyinstaller打包步骤

这里我们拿之前《手把手教你用自己训练的AI模型玩王者荣耀》这篇的python代码,作为案例来演示。将其中脚本py_word.py,待处理的表格文件workbook.xlsx,以及准备好的软件图标图片chengzi.ico放在了我电脑的F:\\py_word目录下(如果大家感兴趣的话,可以在文末下载获取)

1、cmd切换到我们刚刚放文件的目录

2、执行命令Pyinstaller -F -w -i chengzi.ico py_word.py,执行过程特别漫长,就没有录制动图。

执行完毕会发现当前目录多了几个文件夹,打开其中名为dist的文件夹。

已经生成了一个名为py_word的exe应用程序,并且图标也是我们设置的橙子图案,看来已经成功一半了。

要不运行一下,试试能否正常生成word日报?

打包exe后执行

成功运行,可惜就是文件有点大(339M)

Pyinstaller参数详解

说回刚刚执行的命令

Pyinstaller -F -w -i chengzi.ico py_word.py

给大家解释一下其中Pyinstaller的参数,其中-F参数代表制作独立的可执行程序。

-w是指程序启动的时候不会打开命令行。如果不加-w的参数,就会有黑洞洞的控制台窗口出来。比如在刚才的脚本里我加一行print('Hello World!'),那么就不要放-w参数了,不然运行会报错,毕竟Hello World!需要在命令行里打印出来。此外,-w参数在GUI界面时非常有用。

最后的-i chengzi.ico就是指设置自己的图标图案,因为默认打包图片是下图这样的。这个参数也可以写成--icon=chengzi.ico

最后稍微总结一下:

Pyinstaller -F py_word.py 打包exe

Pyinstaller -F -w py_word.py 不带控制台的打包

Pyinstaller -F -w -i chengzi.ico py_word.py 打包指定exe图标打包

以上三个是比较常用的参数,其他参数详见下表

Pyinstaller参数大全


很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!
QQ群:721195303


ico图片生成

自己做的软件都喜欢放上自己的图标,不过哪来那么多ico图片呢?

一个是可以找专门的ico图片网站,不过都很小众,图片库也很小。

另一个是可以自己生成,这里就给大家分享一个网站,可以把其他格式图片转成ico格式:https://app.xunjiepdf.com/img2icon/

ico图片格式转换

压缩打包

好了,小伙伴们

来到了最激动人心的时刻,刚刚生成的exe实在太大了,300多M的软件程序想用微信传一下都费劲。

我也试过很多方法,比如:修改spec文件自定义打包、pipenv 虚拟环境、使用开源的upx压缩等等,但是往往要么过程比较麻烦,要么成功率不高(压缩成不成功全看脸)。

而我要分享的,是自己一直在用的,最简单且成功率极高的方法——conda创建虚拟环境。

Python打包为什么大?

在压缩打包之前,先简单说一下为什么Python打包过大?

Python打包exe,不但体积大而且运行奇慢。解释型语言大都是这个样子,只不过Python尤其突出。要解决大而慢,只能用编译型语言,如C,C++,甚至VB都好很多,体积最小的是汇编。[1]

此外,还有知乎大佬说是因为“Anaconda里内置了很多库,打包的时候打包了很多不必要的模块进去,要用纯净的Python来打包。”

所以我们可以模拟一个新环境,其中只安装我们本次打包所必要的工具包即可。

那最适合的就是——虚拟环境了!

虚拟环境

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环境下所有的虚拟环境

安装所需的库

上面我们已经创建并激活了名为aotu虚拟环境,输入conda list可以查看当前虚拟环境里已经安装的库。

我们打开所要打包的Python脚本,对比上图,发现pandasdocx这两个库还需要额外安装。当然,也不能缺了打包必不可少的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

安装后再看

已成功安装,还有一些因为这几个库所附带安装的,就不管他们了。

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.py

总结一些小坑

1、说起来还是有点玄学,上文中一模一样的过程我在两个电脑都执行过一遍。在其中一个上显示缺少xlrd这个库,安装后成功打包,也是一样的大小。小伙伴们可以在文末获取文件,也试试。

2、在安装库是要注意一些库名,比如docx这个库不要pip install docx,而是需要

pip install python-docx

还有一些库可能因为版本不同导致不能使用,多碰碰壁就好了。

3、为了防止打包时候有些库没安装好,可以先在虚拟环境中执行一下Python脚本。运行无误的话再打包,比较保险。

4、最后,如果想要删除虚拟环境的话,可执行下方命令

conda remove -n aotu--all 

5、打包为exe的话,版本尽量选择python3.6+32位版本,因为win64位系统向下兼容32位程序,但是如果不考虑32位系统的话无所谓,直接python64位版本直接打包就可以,只是只能在win64位系统上跑。


在这里还是要推荐下我自己建的Python学习群:721195303,群里都是学Python的,如果你想学或者正在学习Python ,欢迎你加入,大家都是软件开发党,不定期分享干货(只有Python软件开发相关的),包括我自己整理的一份2020最新的Python进阶资料和零基础教学,欢迎进阶中和对Python感兴趣的小伙伴加入!
 

用pyinstaller模块将python程序打包成exe文件(全网最全面最详细)(代码片段)

目录打包前置知识一、什么是exe可执行文件?二、为什么要将Python程序打包为exe可执行文件?三、为什么Python程序不能直接运行呢?四、我们用什么来打包Python文件呢? 五、打包有哪几种分类呢?打包的方法... 查看详情

复制粘贴,快速将python程序打包成exe

复制粘贴,快速将Python程序打包成exe为了将Python程序发送给不懂代码和没有安装Python的同事、朋友使用,最好的方式就是将Python程序打包成exe可执行文件,再发送给他们。我之前曾经打包过几次,操作并没有难度,但不会记打包... 查看详情

python打包成exe后程序无法运行?

用pyinstaller把python文件打包成exe文件,发现无法运行。如图具体看build文件下的warn***.txt文档,里面详细记载了错误的原因。一般都是库丢失。不要下拉双击执行,可以在控制台下执行,看看报错内容。注意:打包时,要让其找到... 查看详情

别再问我python打包成exe了!(终极版)

导读:本文给大家全面总结一下:Python如何打包成exe,以及如何打得足够小。作者:朱小五来源:凹凸数据(ID:alltodata)01标准打包目前比较常见的打包exe方法都是通过Pyinstaller来实现的,本文... 查看详情

python项目打包成可执行的exe文件(代码片段)

...件,就可以在执行的时候在cmd独立一个窗口了。如果python项目打包exe呢?下面按照步骤讲解一下。环境依赖安装pyinstaller。pipinstallpyinstaller-ihttps://pypi.douban.com/simple项目打包项目部分代码 先看一下项目在终端执行的效果... 查看详情

python实现windows锁屏程序并打包成exe文件(代码片段)

Python实现一个简单的功能:Windows锁屏,并打包成exe文件发布。(1)锁屏程序代码很简单:fromctypesimport*if__name__=='__main__':user32=windll.LoadLibrary('user32.dll')user32. 查看详情

python实现windows锁屏程序并打包成exe文件(代码片段)

Python实现一个简单的功能:Windows锁屏,并打包成exe文件发布。(1)锁屏程序代码很简单:fromctypesimport*if__name__=='__main__':user32=windll.LoadLibrary('user32.dll')user32. 查看详情

pycharm软件将程序打包成exe文件

参考技术A在学习Python的时候,一直都是在Pycharm工具中运行Python程序,当程序写完后,需要在一个独立环境下执行,此时就需要将.py程序打包成Windows环境下可直接执行的exe文件。这里记录下pycharm软件打包程序的步骤。1、打开需... 查看详情

pythonpyinstaller打包成winmac应用程序(app/exe)(代码片段)

一、简介python提供了几个用来打包的模块,主要有py2app、py2exe、pyinstaller。附:pyinstaller、py2app、py2exe、fbs对比与爬坑。根据上面的表可以看出,只有fbs,cx_Freeze和PyInstaller满足跨平台要求,本文以PyInstaller进行... 查看详情

python3项目打包成exe可执行程序(代码片段)

一、安装pyinstallerpipinstallpyinstaller常用可选项及说明:-F:打包后只生成单个exe格式文件;-D:默认选项,创建一个目录,包含exe文件以及大量依赖文件;-c:默认选项,使用控制台(就是类似cmd的... 查看详情

pyqt5python程序打包成.exe文件(代码片段)

...总结前言我们在pycharm上写的程序在发送到一台没有安装python解释器的机器上是不能运行的,甚至还要安装程序中所使用的第三方包,这样极其不方便。但是PC是可以直接运行.exe文件的,因此我们通过将程序打包成.exe... 查看详情

复制粘贴,快速将python程序打包成exe(代码片段)

为了将Python程序发送给不懂代码和没有安装Python的同事、朋友使用,最好的方式就是将Python程序打包成exe可执行文件,再发送给他们。我之前曾经打包过几次,操作并没有难度,但不会记打包命令,每次打包... 查看详情

python可以编译成exe程序吗

参考技术APyInstaller的原理简介PyInstaller其实就是把python解析器和你自己的脚本打包成一个可执行的文件,和编译成真正的机器码完全是两回事,所以千万不要指望成打包成一个可执行文件会提高运行效率,相反可能会降低运行效... 查看详情

史上最全python面试题详解(附带详细答案(持续更新))(代码片段)

...慢、效率低;依赖解释器、跨平台性好。如Java、Basic.2、Python解释器种类以及特点CPythonc语言开发的使用最广的解释器IPython基于cpython之上的一个交互式计时器交互方式增强功能和cpython一样PyPy目标是执行效率采用JIT技术对python代... 查看详情

原创:史上对bm25模型最全面最深刻的解读以及lucene排序深入讲解(佟学强)

垂直搜索结果的优化包括对搜索结果的控制和排序优化两方面,其中排序又是重中之重。本文将全面深入探讨垂直搜索的排序模型的演化过程,最后推导出BM25模型的排序。然后将演示如何修改lucene的排序源代码,下一篇将深入... 查看详情

简单易学的springboot打包成exe文件图文教程

本文章转自:乐字节文章主要讲解:SpringBoot打包成exe程序获取更多Java相关知识可以:点击链接加入裙聊【Java技术交流羊君】:933-873--310暗号:166前言近期做了一个前后端合并的springboot项目,但是要求打成exe文件,提供给不懂... 查看详情

pythonselenium代码如何打包成.exe文件(pyinstaller)(代码片段)

前言python写的代码如何打包成.exe可执行程序,让别人电脑上没安装过python的小伙伴也可以直接运行?本篇讲如何用PyInstaller库一步步打包python代码。PyInstaller环境准备我的电脑环境:1.系统windows102.python3.6.6PyInstaller环境需依赖pywin... 查看详情

python编写游戏怎么打包——详解python+pygame游戏开发之使用py2exe打包游戏为exe文件(代码片段)

python编写游戏怎么打包1.简介2.软件准备3.打包流程最近在用python+pygame开发游戏,写完以后在分享给朋友玩的时候遇到了很大的问题,只有搭建了环境才能运行python脚本。这会吓退99%以上的人……所以把我们的游戏打包... 查看详情