前言
我要封装的是前段时间复现的一个视频融合拼接的程序,现在我打算将他封装成exe程序,我在这里只记录一下我封装的过程,使用的是pyinstaller,具体的封装知识我就不多说了,可以参考我另一篇博客:将Python 程序封装成exe程序
环境准备:
首先进入自己的虚拟环境并激活
安装pyinstaller:
pip install pyinstaller # 打包工具安装命令
准备开始打包:
进入需要打包程序的根目录文件夹(logo.ico图标文件提前放到根目录文件夹中),进入cmd命令行窗口,输入命令:
pyinstaller -D -i logo.ico main.py
打包结束后,根目录文件夹会中多出来一个dist的文件夹,打包好的程序就放在这个文件夹下面,但是应该会缺少一些东西,需要我们自己再添加:
可以看到封装的时候一些依赖库自动封装进来了
我们找到main.exe程序,这是我们的目标
我们双击main.exe发现会出现一个黑窗口并闪退,这里面的情况有以下几种:
1. 缺少依赖库:如果程序依赖其他库,打包时需要将依赖库一同打包,否则在运行时可能会找不到相应的库而闪退。可以使用 pyinstaller 等工具将所有依赖的库都打包到 exe 中。
2. 路径问题:在程序中使用相对路径或绝对路径时,可能会因为打包后的工作路径不同而导致找不到文件而闪退。可以使用 os.path 模块来处理路径问题,如使用 os.path.join() 拼接路径,os.path.abspath() 获取绝对路径等。
3. 异常捕获不足:在程序中可能存在没有完善的异常处理,当出现异常时程序直接退出导致闪退。可以在程序的关键部分增加 try...except 语句来捕获异常并处理。
4. 编码问题:如果代码中有非 ASCII 字符,打包后可能会出现编码问题导致闪退。可以在程序开头添加如下代码,指定编码方式:# -*- coding: utf-8 -*-
5. 操作系统兼容性问题:如果程序在 Windows 上开发,但在其他操作系统上运行,可能会出现闪退。可以在程序中处理操作系统兼容性问题,如使用 os 模块来处理文件路径、os.system() 来执行操作系统命令等。
6. 防病毒软件拦截:某些防病毒软件可能会误认为 exe 文件是恶意软件而拦截,导致程序无法运行。可以将程序添加到白名单或关闭防病毒软件后再运行。
如果以上方法都无法解决问题,可以使用 Python 自带的 logging 模块来记录程序运行过程中的错误信息,或使用 IDE 的 debugger 来调试程序。
具体是什么原因,我们可以在打包好的dist/main文件夹,使用cmd执行main.exe文件,这样窗口不会闪退
可以发现,我这里是由于相对路径问题没有找到对应的加载文件,因此我们直接将相关文件夹复制到main文件夹下
现在再双击main.exe运行
成功