pyinstaller打包多个py文件为一个exe可执行文件(附带资源和文件路径说明)

1.新建虚拟环境

新建一个虚拟环境可以有效减少最后生成的exe文件的大小。

conda create -name ev1 python=3.9

在这里插入图片描述
将项目的依赖重新更改为新建的虚拟环境,将所需要的依赖项全部安装好就可以了。这样这个新环境就不会有其他的额外依赖,环境所占用的空间就比较少了。

2.安装pyinstaller

激活虚拟环境
activate t1
pip安装
pip install pyinstaller

在这里插入图片描述

3.进入到项目文件夹,编辑打包文件

移动到D盘cd /d d: 或者直接输入 d:
cd 项目的绝对路径(不同盘符)/相对路径

在这里插入图片描述
生成spec文件,这个文件是用来配置打包信息的。默认会在项目文件夹中生成这个文件,可以使用记事本打开编辑。

pyi-makespec -F SpeakerRecog.pyw

-F将项目打包成一个独立的exe文件,SpeakerRecog.pyw项目的主入口
我的项目结构大致如图
在这里插入图片描述
我的spec文件录入情况
在这里插入图片描述

4.资源路径适配

由于打包之后的资源会被释放到系统中的临时文件夹中,并且每次的文件夹名称会不一样,所以只能调用函数去读取;另外如果把打包文件发送给其他人,路径也会发生变化。基于以上原因路径只能调用函数读取。
获取资源路径具体如下(打包后的和开发环境):

def resource_path():
    if getattr(sys, 'frozen', False):  # 判断是否为打包环境
        base_path = sys._MEIPASS  # 获取临时解压目录‌:一般为C:\Users\qq979\AppData\Local\Temp\_MEI23962\项目名;_MEI23962是变化量}
    else:
        base_path = os.path.abspath(".")  # 开发环境使用当前目录,绝对路径
    return base_path

注意事项1:在开发环境中引用的所有资源需要全部使用os.path.join()方式拼接,os.path.join()会自动的匹配当前系统使用的路径分隔符,一定要避免使用路径分隔符(\ 或者/),不然打包之后的资源路径会有问题。

bg = tk.PhotoImage(file=os.path.join(resource_path(),'interface','picture','bg.gif') )
#带有format的也需要改
file_path = os.path.join(resource_path(), 'interface', '{}.jpg').format(number)

注意事项2:打包资源只会帮你拷贝非空文件夹,如果程序中需要使用一些空文件夹,需要在使用之间使用代码创建,否则就会出现开发环境正常,打包之后空文件夹不存在。

# 定义文件夹路径
	import os
    folder_path1 = os.path.join(resource_path(),'guess','wav','wa')
    # 如果文件夹不存在,则在当前项目目录下创建文件夹guess/wav/wa
    if not os.path.exists(folder_path1):
        os.makedirs(folder_path1)

注意事项3:os.path.join()使用细节

#项目中要使用某个文件夹中的资源,一般是guess/wav/
 f1 = os.path.join(resource_path(), 'guess', 'wav')#guess/wav
 f2 = os.path.join(resource_path(), 'guess', 'wav', '')#后面跟空字符就会补全系统路径分隔符guess/wav/

5.正式打包

直接打包刚刚的spec文件即可。打包会需要一些时间,打包完毕之后,默认会在项目的目录中生成一个dist文件夹,打开里面就只有一个exe文件,直接双击运行就好了。

pyinstaller SpeakerRecog.spec

在这里插入图片描述
打包后的图标更改、文件保存位置、是否需要隐藏dos窗口等配置参考其他资料。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值