记录用python封装的第一个小程序

news2025/3/2 13:11:45

前言

我要封装的是前段时间复现的一个视频融合拼接的程序,现在我打算将他封装成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运行

成功

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1381053.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

逼格满满,推荐一个高效测试用例工具:XMind2TestCase !

一、背景 软件测试的核心是什么?毫无疑问是测试分析和测试用例设计,也是日常测试投入最多时间的工作内容之一。 然而,传统的测试用例设计过程有很多痛点: 1、使用Excel表格进行测试用例设计,虽然成本低,但…

POI:对Word的基本操作

1 向word中写入文本并设置样式 package com.example;import org.apache.poi.xwpf.usermodel.*;import java.io.File; import java.io.FileOutputStream;/*** Author:xiexu* Date:2024/1/12 23:54*/ public class WriteWord {static String PATH "…

Linux(Ubantu)交叉编译生成windows(32位,64位)可执行程序和库

机缘 机缘巧合下收到了这个小任务. 工作流 先是找了下资料发现过去的都是关于mingw32. 教程的做法: 增加个源 (trusty 是linux发行的版本标识,比如22.04是jammy deb http://us.archive.ubuntu.com/ubuntu trusty main universe更新源 sudo apt update下载mingw32. sudo…

阅读笔记lv.1

阅读笔记 sql中各种 count结论不同存储引擎计算方式区别count() 类型 责任链模式常见场景例子(闯关游戏) sql中各种 count 结论 innodb count(*) ≈ count(1) > count(主键id) > count(普通索引列) > count(未加索引列)myisam 有专门字段记录…

通过shell脚本确定当前平台

shell中的变量OSTYPE存储操作系统的名称,也可以使用uname命令来确认当前所在的平台。 shell中的变量HOSTTYPE存储操作系统的架构。 测试代码如下所示: #! /bin/bashecho "use OSTYPE:" if [[ "$OSTYPE" "linux-gnu&quo…

java大学生宿舍共享厨房系统宿舍自习室宿舍洗衣房系统源码包含技术文档

主要功能:学生可注册登录,预约自己宿舍楼栋的共享厨房和评价,也可以使用该楼栋的洗衣房,查看洗衣机吹风机的使用情况和报修,还可以进入该楼栋自习室打卡和评价。管理员可管理所有的学生和宿管,分配宿舍&…

MYSQL的操作

1.库的操作 1.1创建数据库 语法: CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [, create_specification] ...] create_specification: [DEFAULT] CHARACTER SET charset_name [DEFAULT] COLLATE collation_name 说明: #…

GitHub项目推荐-incubator

项目地址 Github地址:GitHub - apache/incubator-anser 官网:Apache Answer | Free Open-source Q&A Platform 项目简述 这是Apache的一个开源在线论坛,也可以部署成为一个自有的QA知识库。项目主要使用了Go和Typescript来开发&#…

Feature Fusion for Online Mutual KD

paper:Feature Fusion for Online Mutual Knowledge Distillation official implementation:https://github.com/Jangho-Kim/FFL-pytorch 本文的创新点 本文提出了一个名为特征融合学习(Feature Fusion Learning, FFL)的框架&…

设计模式—— 单例设计模式

单例设计模式 什么是单例模式 单例模式是一种对象创建型模式,使用单例模式,可以保证为一个类只生成唯一的实例对象。也就是说,在整个程序空间中,该类只存在一个实例对象。 为什么使用单例模式 在应用系统开发中,我…

Python测试开发,掌握技巧更上一层楼!

学员学习分享: 自动化测试工作稳定之后,一向对技术着迷的我,迫不及待地要进入测开的世界,在java和Python的方向上,我选择了Python。 原因很简单,比较好上手,而且市场上也比较主流。 在跟着课…

【操作系统】在阅读论文:OrcFS: Orchestrated file system for flash storage是需要补充的基础知

在阅读论文:OrcFS: Orchestrated file system for flash storage是需要补充的基础知识 这篇论文是为了解决软件层次之间的信息冗余问题 To minimize the disk traffic, the file system buffers the updates and then flushes them to the disk as a single unit, …

二极管限幅电路理论分析,工作原理+作用

一、限幅是什么意思? 限幅也就是,将电压限制在某个范围内,去除交流信号的一部分但不会对波形的剩余部分造成影响。通常来说,限幅电路主要是由二极管构成,波形的形状取决于电路的配置和设计。二、限幅电路工作原…

流量预测中文文献阅读(郭郭专用)

目录 基于流量预测的超密集网络资源分配策略研究_2023_高雪亮_内蒙古大学(1)内容总结(2)流量预测部分1、数据集2、结果对其中的一个网格的CDR进行预测RMSE和R2近邻数据和周期数据对RMSE的影响 (3)基于流量预…

C语言实现简易n子棋小游戏(代码含注解)

利用C语言简单实现一个n子棋小游戏,棋盘大小由自己定义 将源文件分为 执行游戏的测试文件(test.c)和保存游戏运行逻辑的相关函数的文件(game.c) 头文件中声明符号和函数的定义(game.h) 游戏执行主要依靠二维数组实现,电脑走棋采用随机值的方法简易地…

【NI-DAQmx入门】LabVIEW中DAQmx同步

1.同步解释 1.1 同步基础概念 触发器:触发器是控制采集的命令。您可以使用触发器来启动、停止或暂停采集。触发信号可以源自软件或硬件源。 时钟:时钟是用于对数据采集计时的周期性数字信号。根据具体情况,您可以使用时钟信号直接控制数据采…

ElasticSearch概述+SpringBoot 集成 ES

ES概述 开源的、高扩展的、分布式全文检索引擎【站内搜索】 解决问题 1.搜索词是一个整体时,不能拆分(mysql整体连续) 2.效率会低,不会用到索引(mysql索引失效) 解决方式 进行数据的存储(只存储…

ssm基于Javaweb的物流信息管理系统的设计与实现论文

摘 要 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统物流信息管理难度大,容错率低,管理…

基于OpenCV的谷物颗粒识别

基于OpenCV的谷物颗粒识别 一、程序整体功能介绍1.1 导入库与函数定义1.2 颜色分割与灰度处理1.3 二值化与轮廓检测1.4 绘制与计数1.5 主程序与结果展示 二、算法原理与实现流程2.1算法原理(1)颜色分割(2)灰度处理与二值化&#x…

mysql进阶 - 存储过程

目录 1. 用途: 2. 相关语法 2.1 创建 2.1.1 语法 2.1.2 示例 2.2 查看存储过程 2.3 调用 2.4 修改存储过程 2.5 删除存储过程 1. 用途: 存储过程广泛存在于一些遗留系统,可以减少代码的编写。而近些年,存储过程很少再用…