pyqt5 +Tensorflow+pyinstaller的踩坑记录

       最近老师让我将课题内的一个模块写成软件,方便后续使用。鉴于课题组传统,准备使用qt designer做Ui设计,通过Qt Uic转换成py文件再去写内部逻辑,最后用pyinstaller打包成.exe软件。在这过程中,在最后一步打包为软件遇到了巨大问题,部分功能始终无法使用。在经过两天努力,终于解决了问题。因此记录分享一下。也顺便分享一下本软件的制作过程。

本项目主要内容是将深度学习训练出的模型嵌入到.exe软件使用。


1.qt designer进行UI设计

简单分享一下软件的部分页面,最终效果就是用户输入数据,通过深度学习模型输出结果。内部逻辑就不过多赘述。


2.将py文件打包为.exe文件

在这个过程中,涉及到模型的加载,一些数组的加载和副窗口的联动。在python中,运行时功能一切正常,但是通过pyinstaller打包为.exe运行后,预测功能无法实现。查阅资料发现是模型等资源没有被正确的加载进去。首先去修改了py文件中的模型加载路径等。

 def load_resources(self):
        try:
            # 确定 base_path
            if getattr(sys, 'frozen', False):
                base_path = sys._MEIPASS
            else:
                base_path = r'D:\pythonlearning\IT'

            # 定义文件路径
            self.single_model_path = os.path.join(base_path, 'forward_model_1725180986.0.h5')
            self.double_model_path = os.path.join(base_path, 'model_1725206208.0.h5')
        except Exception as e:
            print(f"An error occurred while loading resources: {e}")
        

这是其中部分的加载方法,用相对路径的方法去动态加载,防止出现找不到路径的问题。

改完以后发现还是不行,继续查阅资料,发现说是模型文件没有打包到.exe中,有两种方法,

1 是命令行--add-data的方式

pyinstaller --onefile -w --add-data "D:\pythonlearning\IT\forward_model_1725180986.0.h5;."  D:\pythonlearning\IT\Mainwindow.py

2 是在.spec文件中的data中添加 ,如下

a = Analysis(
    ['Mainwindow.py'],
    pathex=[],
    binaries=[],
    datas=[
        ('D:\\pythonlearning\\练习\\pyqt\\惯性管设计\\forward_model_1725180986.0.h5', '.'),
       .......
       .......
    ],
......

添加完以后,运行pyinstaller Mainwindow.spec指令,重新打包。注意,一定要在你项目所在的目录去运行这个命令,或者使用项目的绝对地址

在整完这些后,运行项目,发现还不行。又去查阅,说要将资源文件一起放到项目文件中,于是将资源文件一起挪到了dist目录下

再次运行,还是不行。于是在代码中添加了一些调试信息,在运行时看看资源导读有没有被加载  指令如下:pyinstaller --debug all Mainwindow.spec

再运行,发现显示临时目录里找不到模型等信息。临时目录是软件运行时系统默认分配的一个文件夹,所有的资源文件要添加到临时目录里才可以让软件加载。查阅后发现可以更改临时目录,于是在Mainwindow.spec中修改了默认的临时目录位置,dist是打包软件时自动生成的一个文件夹,生成的.exe会放在这个目录下。如下

runtime_tmpdir='D:/pythonlearning/IT/dist',

将资源全放到里面,再运行,成功了


总结,在使用pyinstaller打包软件时我就知道加载资源的路径一定要正确,为此,我将几个需要的资源都放在了同一个目录下,使用动态路径加载的方式,为的就是让软件能找到资源,没想到临时目录在Cpan某个犄角旮旯里,费了这么大劲总算找出问题解决了,记录分享一下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值