关于打包的那些事,你必须记住的三件事,利用Python实现打包exe_打包成exe会做哪些事_49.99%的博客-程序员宅基地

技术标签: python  编程语言  

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理

本文章来自腾讯云 作者:Python进阶者

想要学习Python?有问题得不到第一时间解决?来看看这里“1039649593”满足你的需求,资料都已经上传至文件中,可以自行下载!还有海量最新2020python学习资料。
点击查看

在这里插入图片描述

1 前言

嘿,各位小伙伴,晚上好呀,我相信各位小伙伴都是python的爱好者。也许我们不一定是专业的程序员,但是我们仍然可以通过代码提高我们的效率,尽量少加班,多陪陪媳妇。再不行,让代码替我们干着重复的工作,我们有节省出来的时间打游戏不好嘛,是吧,哈哈哈。

但是呢,我们开发的脚本一般都会用到一些第三方包,可能别人也需要用到我们的脚本,如果我们将我们的xx.py文件发给他,他是不能直接用的,他还需要安装python解释器,甚至还要安装我们用的那些第三方包,是不是有点小麻烦?但是我们都知道,PC是可以直接运行exe文件的,这就为我们提供了一个便捷的方式。所以,从看了这个教程以后,这都将成为过去式,打成exe之后,分享即可用。

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

2 安装pyinstaller

首先安装pyinstaller,使用安装命令:pip3 install pyinstaller,如下图所示。
在这里插入图片描述

3 pyinstaller打包机制

我们写的python脚本是不能脱离python解释器单独运行的,所以在打包的时候,至少会将python解释器和脚本一起打包,同样,为了打包的exe能正常运行,会把我们所有安装的第三方包一并打包到exe。

即使我们的项目只使用的一个requests包,但是可能我们还安装了其他n个包,但是他不管,因为包和包只有依赖关系的。比如我们只装了一个requests包,但是requests包会顺带装了一些其他依赖的小包,所以为了安全,只能将所有第三方包+python解释器一起打包。如下图所示。
在这里插入图片描述
蓝色表示是安装requests依赖的包,看到了吧!

4 Pyinstaller打包exe

这里呢,我就拿刚给同事写办公自动化脚本示例一下。源码示例效果,如下图所示。
在这里插入图片描述
1、我们来将这个.py的文件打包成一个exe,我们直接cmd切换到这个脚本的目录,执行命令:pyinstaller-F setup.py,如下图所示。
在这里插入图片描述
ps: -F参数表示覆盖打包,这样在打包时,不管我们打包几次,都是最新的,这个记住就行,固定命令。

2、执行完毕之后,会生成几个文件夹,如下图所示。

在这里插入图片描述
3、在dist里面呢,就有了一个exe程序,这个就是可执行的exe程序,如下图所示。

在这里插入图片描述
4、我们把这个setup.exe拖到和setup.py平级的目录,我们来运行一下这个,效果图如下图所示。
在这里插入图片描述
5、这样,我们就完成了一个打包工作,如果别人需要,即使没有python环境,他依然可以运行。

6、接下来我们再来打包一个带界面的,这里我用pyqt5写了一个最简单的框架,看一下打包成exe是否能运行成功,效果图如下图所示。

在这里插入图片描述
我们可以看到,后面有一个黑洞洞的窗口,这就有点尴尬了,所以,我们的打包命令也要变一下。

7、执行 pyinstaller -F -wsetup.py 多加-w以后,就不会显示黑洞洞的控制台了,这里就不做演示啦!

8、但是我们打包的exe,我们的图标呀,实在是有点丑陋,默认的,没有一点自己的风格,那么,我们应该怎么改一下呢?

执行命令:pyinstaller -F -w-i wind.ico setup.py,如下图所示。

在这里插入图片描述
9、默认打包图片,如下图所示。
在这里插入图片描述
10、加上 -i 参数之后,如下图所示,会形成一个类似风力发电机的logo图案。
在这里插入图片描述
在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_49345590/article/details/112714581

智能推荐

零空间(Null space)的理解-程序员宅基地

零空间(Null space):像为零的原像空间,即{x| Ax=0}。若矩阵为A,则用Null(A)表示A的零空间。零空间不独立存在,其依赖于某个特定的算子而存在。是定义在某个特定的算子上的。通常说的是“某个算子A的零空间”。零空间并不是维度为0.零空间的维度: 先介绍矩阵的秩: 矩阵的列空间是一个向量空间,显然每个向量的维度是。列空间的维数定义为矩阵的秩, 零空间的维度: -----------..._零空间

最大公约数 欧几里得算法 最小公倍数-程序员宅基地

Gcd(m, n) = Gcd(n, m%n)int Gcd(int m, int n){ if(n == 0) return m; else return Gcd(n, m%n);}int Gcd(int m, int n){ int c; while(m != 0) { c = m; ...

Tomcat 正确安装并启动后,浏览器访问localhost8080显示404_tomcat访问8080出现404_心动的偏执的博客-程序员宅基地

目录:1. 确认 Tomcat 安装正确,且已打开。2. 查看8080端口是否被占用3. 端口被占用的解决方法在初次使用 Tomcat 时遇到了一些问题,经过一段时间的调试最终将其解决,个人感觉此问题应该比较常见,因此在这做一个分享。关于 Tomcat 的安装(下载安装包或压缩包均可)和环境变量的配置,在网上有很多教程,在此就不再赘述。在安装了 Tomcat 之后,通常会在浏览器中键入 localhost:8080 (安装时默认的端口为8080)以查看是否安装成功。正常情况下,键入本地端口之后_tomcat访问8080出现404

matlab动画制作详解_matlab动态函数-程序员宅基地

众所周知,MATLAB的绘图能力十分强大。有时,我们不仅需要绘图,还需要制作一些动态视频和动画,下面就来介绍一些matlab里制作动画和视频常用的函数,并举出一些实例。一.animatedlineanimatedline函数可以帮助对线条动画进行优化,允许用户在不重新定义现有点的情况下,添加新的点。源代码如下a1 = animatedline('Color',[0 .7 .7]);_matlab动态函数

ABP从入门到精通(3):aspnet-zero-core 使用Redis缓存-程序员宅基地

一.Redis是什么?redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redi...

matlab求零空间,【线性代数】矩阵的零空间-程序员宅基地

矩阵A的零空间就Ax=0的解的集合。零空间的求法:对矩阵A进行消元求得主变量和自由变量;给自由变量赋值得到特解;对特解进行线性组合得到零空间。假设矩阵如下:对矩阵A进行高斯消元得到上三角矩阵U,继续化简得到最简矩阵R:由于方程Ax=0的右侧是零向量,所以只对矩阵A进行消元不会影响解,因此不需要增广矩阵,所以有:从上面的高斯消元的结果可以看出,矩阵A的秩为2,其中第1,3列为主元列,2,4列为自由列..._matlab求零空间

随便推点

STL源代码剖析个人小结3--STL容器_stl容器代码分析-程序员宅基地

STL中的容器有两类: 序列式容器和关联式容器一. 序列式容器: 指其中的元素可以有序也可以无序。常用的标准序列式容器如下: 1. vector 相比与C++内置的静态数组array,vector则代表着动态空间,随着元素的加入其内部机制回自行扩充空间以容纳新元素。担当元素删除时岂不会自动释放空间。 当容器已满在进行插入操作时,vec_stl容器代码分析

(实验2)文件IO实验_仿写linux下的cp命令-程序员宅基地

文章目录1.仿写cp命令的部分功能(编写mycp程序)2.命令行参数3.打开文件(POSIX API)3.读取文件(POSIX API)4.写文件(POSIX API)5.关闭文件(POSIX API)6.文件定位(POSIX API)7.错误处理8.仿写cp命令的部分功能的进阶要求1.仿写cp命令的部分功能(编写mycp程序)要求:(1)将源文件复制到另外一个文件(将test1.tex..._仿写linux下的cp命令

Programmer-如何从菜鸟变成老鸟?-程序员宅基地

程序员需要具备什么样的能力,才可以在任何环境下,成为老鸟?1、懂得基本原理。语言本身,不是一种方向。编程语言是程序员开发软件的工具,任何一种语言,亦或是一门技术,只要是运行在冯·诺依曼体系的计算机上,要想钻的深,离不开那些原理性的东西,数据结构、内存管理、多线程、操作系统、网络协议等等。备注:这些原理知识与语言本身无关,却是用好每一门语言的基石。2、技术全面发展。只会一...

常用模板_常用博客模板-程序员宅基地

模板素数判断素数打表快速幂最大公约数___欧几里得算法(GCD)大数加法大数乘法小根堆大根堆桶排序动态规划最长公共子序列(长度+打印路径)最长递增子序列(长度+打印路径)只求长度的(java):求长度并打印的:图论最小生成树Kruskalprim算法单源最短路径算法Dijkstra算法模板素数判断int Is..._常用博客模板

《HelloGitHub》第 15 期-程序员宅基地

公告这段时间没怎么写文章,跑去写 HelloGitHub.com 这个网站了,现在已经顺利上线,功能后面会持续迭代。本期内容就是通过该网站的后台进行编辑生成的!一切都变的程序化、流程化,希望项目越来越大、有更多的小伙伴加入!最后,这个网站的代码会完全开源(现在还拿不出手),开源为了让 HelloGitHub 项目变的更好!下期发布的时候就可以看到源码了(不设 deadline 没有生产力)。..._《hellogithub》第 15 期

给UIimageView添加UITapGestureRecognizer手势点击事件-程序员宅基地

在Iphone开发中,像UIimageView是不支持点击的,但往往我们却有很多能在Image上点击的需求,比如一个自定义的TableViewCell中放入一个UIimageView,在这里命名为imageleft,当tableView加载后,单击tableView中某一行中的image,我便进入该图片的详细页面。当然,现在的最新版支持手势控件,只要拖一个这样的控件到UIIma

推荐文章

热门文章

相关标签