1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Pyinstaller 生成 exe 及打包资源文件

Pyinstaller 生成 exe 及打包资源文件

时间:2024-05-07 01:23:07

相关推荐

Pyinstaller 生成 exe 及打包资源文件

其他 Pyinstaller 打包技巧见《Python程序打包指南》

Pyinstaller不仅可以打包.py文件为exe,还可以将依赖的其他资源文件(如图片、音频等媒体文件)也打包到程序中。

pyinstaller 支持两种打包模式,一种是单文件的exe,适合功能简单,体积小的程序;另一种是打包为文件夹,里边包含一个 exe 可以执行。平时我们见到的绿化程序很多都属于是单文件程序,比如我们写了一个小脚本,寥寥数行代码,打包成一个文件夹显然不方便分享,这就可使用Pyinstaller打包成一个exe,便于传发。

本文使用的环境为:Win11 X64Python 3.8.xPyinstaller 4.9

本文主要介绍四部分:1. 如何使用 pyinstaller 打包.py文件为 exe; 2. 如何生成单文件 exe; 3.如何去掉命令行窗口; 4. 如何打包其他资源文件,如图片、文件夹等

文章目录

一、将 .py 文件打包为 exe1.1、打包命令1.2、命令解析1.3、示例演示 二、打包单为文件2.1、打包命令2.2、命令解析2.3、示例演示 三、去掉命令行窗口3.1、设置参数3.2、设置效果如下3.3、命令行窗口在调试中的作用 四、打包组资源文件4.1、Spec文件分析4.2、Spec文件修改实现打包资源文件4.3、重新打包:4.4、示例演示

一、将 .py 文件打包为 exe

这部分主要讲打包py文件的常用命令和方法,同时附带演示代码和演示效果以及命令解析。

1.1、打包命令

# 将 xx.py 打包pyinstaller xx.py

默认就是以文件夹形式打包,会生成一个build 文件夹dist 文件夹 ​pyinstaller -D xx.py命令效果相同,具体演示效果见下文示例演示

1.2、命令解析

xx.py表示代码文件名为xx.py,-D表示打包为文件夹

1.3、示例演示

示例代码⬇️:

# 先安装 pip install pysimpleguiimport PySimpleGUI as sg layout = [[sg.Text('请输入内容:')], [sg.InputText()], [sg.Submit('确认'), sg.Cancel('取消')]] window = sg.Window('Demo示例', layout) event, values = window.read() text_input = values[0] sg.popup('你输入了:', text_input)

执行打包⬇️:

运行打包命令pyinstaller -D test.py,最后提示... completed successfully就是成功了,别的不认识也没关系。

打包效果如下⬇️:

我们可以清楚的看到test.py的同级目录下生成了build文件夹dist文件夹test.spec文件⬇️。dist文件夹下和xx.py文件同名的文件夹,这个就是我们打包出来的程序文件夹;而build文件夹是程序打包时构建过程生成的,我们无法直接使用,对于我们来讲没什么用,而test.spec文件是打包的中间配置文件,下边第四部分,我们通过修改这个文件来实现资源文件的打包。

dist文件夹即是我们程序打包好的文件夹,可以将这个文件夹分享给其他人,点击文件夹内的test.exe就可以运行程序,具体效果如下⬇️:

可以看的出来,完全没有问题!!!至此,我们就完成了程序的打包。

二、打包单为文件

在实际的应用中,有时候我们需要制作一些小工具,为了方便分发,常常打包为一个单文件的exe,这时候就需要使用-F参数。本小节主要讲解如何打包单文件exe,附带演示代码和效果以及命令解析,具体用法和效果如下:

2.1、打包命令

pyinstaller -F xx.py

2.2、命令解析

-F表示打包为单文件xx.py表示代码文件名为xx.py

2.3、示例演示

示例代码⬇️:

这里我们编写一个示例代码,我就直接引用我的另一篇博文《Python GUI-PySimplegui》中的代码来编写一个GUI程序

# 先安装 pip install pysimpleguiimport PySimpleGUI as sg layout = [[sg.Text('请输入内容:')], [sg.InputText()], [sg.Submit('确认'), sg.Cancel('取消')]] window = sg.Window('Demo示例', layout) event, values = window.read() text_input = values[0] sg.popup('你输入了:', text_input)

这个程序的实际运行效果是这样的⬇️:

执行打包⬇️:

接下来我们开始打包,运行打包命令pyinstaller -F test.py

打包效果如下⬇️:

双击运行一下试试看

运行成功!!!说明我们打包成功了。最后看一下文件属性,大小约10M

其实单文件的 exe 在执行的时候也是需要释放资源文件的,不过是释放在了系统默认的缓存位置,如果是软件稍复杂,那么打开就比较慢😑,这时候就不适合打包成单文件程序,而是打包为一个文件夹。

三、去掉命令行窗口

双击运行test.exe时,后边会出现一个黑框,也就是命令行,如果是GUI程序,我们就是需要去掉,不然那体验就太糟糕了😑。本小节主要讲解如何去掉这个黑窗口,同时讲解如何利用命令行窗口辅助调试程序,附带演示代码和效果以及命令解析

3.1、设置参数

可以通过添加w参数去掉黑乎乎的命令行窗口,在-F命令后增加w即可(-F-w参数一起使用的话,应为-Fw,而不是-F -w

假设之前打包的命令是pyinstaller -F xxx.py,现在改为pyinstaller -Fw xxx.py即可

3.2、设置效果如下

可以看到,命令行窗口就隐藏掉了(这里因为我的系统主题设置的黑色,所以动图那么显眼,对比上一张图可以看出是隐藏掉了)

3.3、命令行窗口在调试中的作用

在我们正式打包之前,需要打包测试是否可以正常运行,这时候需要保留命令行窗口来辅助调试。这个窗口可以输出调试的信息:

例如我们在示例代码中加入打印输入内容的语句

print('#>>:'+values[0])

完整代码如下⬇️:

# 先安装 pip install pysimpleguiimport PySimpleGUI as sg layout = [[sg.Text('请输入内容:')], [sg.InputText()], [sg.Submit('确认'), sg.Cancel('取消')]] window = sg.Window('Demo示例', layout) event, values = window.read() text_input = values[0] print('#>>:'+values[0])sg.popup('你输入了:', text_input)

演示效果如下⬇️:

在测试完成没有问题后,即可增加w参数重新打包!!再分发给其他小伙伴。

四、打包组资源文件

有时候我们需要在打包的程序中调用一些资源文件,但是 pyinstaller 并不会自动的帮我们打包进去,每次都得手动复制进去,比较麻烦😡.其实可以配置 pyinstaller 让他打包的时候自动复制进去,这时候就需要我们手动去更改.spec文件了。本小节主要介绍如何修改.spec文件来实现自动打包资源文件,附带演示代码和效果以及命令解析。

4.1、Spec文件分析

细心的小伙伴可能发现,打包的时候,程序同路径下会生成一个同名的.spec文件,这个文件是打包的“中间文件”,我们可以通过修改这个文件来添加需要添加资源的文件。

.spec文件中主要包含4部分:AnalysisPYZEXECOLLECT

Analysis:主要是分析 py 文件的依赖信息PYZ:是一个.pyz的压缩包,包含程序运行需要的依赖EXE:是根据上述两项内容而生成的COLLECT:主要是输出信息

这里放一个spec文件的Analysis部分截取作为示例:

# -*- mode: python ; coding: utf-8 -*-a = Analysis(......datas=[],......)

4.2、Spec文件修改实现打包资源文件

想要添加资源文件,重点是修改datas的内容,我这里是修改过的,一般是空的:datas = []

datas ​里边的元素是以元组的形式来存储的,有这么一个映射关系:

datas = [('源文件路径','目标路径')]

如果有多个文件需要拷贝到程序中,就多写几个元组,记得映射关系不要搞错,有一点比较特殊:如果目标路径打包后的根目录,那就写.,这里讲的比较抽象,可以看下边的示例演示

4.3、重新打包:

重新运行打包命令pyinstaller -D xx.spec即可,不过这里后的对象不再是xx.py文件,而是xx.spec文件。

4.4、示例演示

示例代码⬇️:

代码我们依旧使用test.py,稍加修改:

import PySimpleGUI as sg layout = [[sg.Image('./ico.png')], # 加载根目录下的图片[sg.Submit('确认'), sg.Cancel('取消')]] window = sg.Window('Demo示例', layout) event, values = window.read()

现在的目录结构现在是这样的:

先运行一下,可以看到程序没问题是,可以加载到图片的:

接下来我们先运行打包命令,为了让他先生成.spec文件:

pyinstaller -D -w test.py

试运行⬇️:

我们可以尝试运行一下生成的test.exe,看程序是否运行正常:

可以看到,我们的程序在挠头,提示无法加载到./ico.png文件,这是因为ico.png文件没有一起打包到程序目录下

修改test.spec文件将图片打包进去⬇️:

这时可以删掉builddist文件夹,这两个没用了,一会要重新生成。然后我们修改test.spec文件,记事本或者VSC打开即可:

重点修改详解⬇️:

(‘./ico.png’,‘.’):表示将ico.png复制到打包目录的根目录下(.表示根目录)(‘asset’,‘asset1’):表示将asset文件夹,复制到打包目录asset1目录下。

重新打包,同时打包资源文件⬇️:

运行命令pyinstaller -D xx.spec,可以看到,我们设置的都打包进来了:

运行效果如下⬇️:

可以看出,完全正常!!至此,Pyinstaller 打包我们就讲述完毕了,有问题的小伙伴欢迎留言讨论。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。