PyQt6实例_批量下载pdf工具_使用pyinstaller与installForge打包成exe文件

目录

前置:

步骤:

step one 准备好已开发完毕的项目代码

step two 安装pyinstaller

step three 执行pyinstaller pdfdownload.py,获取初始.spec文件

step four 修改.spec文件,将data文件夹加入到打包程序中

step five 增加data文件夹打包

1 执行前,先看下未增加data文件夹的情况。

2 执行,pyinstaller pdfdownload.spec

3)执行后,看dist文件夹情况

step six 如果要发布免安装文件

step seven 制作成单个exe安装文件 

1 下载 installForge

2 安装installForge

3 制作

视频


前置:

1 本系列将以 “PyQt6实例_批量下载pdf工具”开头,放在 【PyQt6实例】 专栏
2 本系列涉及到的PyQt6知识点:
   线程池:QThreadPool,QRunnable;
   信号与槽:pyqtSignal,pyqtSlot;
   界面:QTextEdit,QLabel,QLineText,QPushButton,QMainWindow,QWidget;
   布局:QHBoxLayout,QVBoxLayout;
   弹框:QFileDialog,QMessageBox。
3 本系列后续会在B站录制视频,到时会在文末贴出链接。本人还是建议先看博文,不懂的再看视频,这样效率高,节约时间。

步骤:

step one 准备好已开发完毕的项目代码

示例项目“批量下载pdf工具”,代码中的项目名:pdfdownload

项目入口(所谓项目入口就是 if __name__ == '__main__': 该函数所在位置)所在文件名为pdfdownload.py

项目情况:

1 整个项目只有一个pdfdownload.py一个py文件

2 一个数据文件夹data,在程序执行过程中会往data中读取数据和写入数据

step two 安装pyinstaller

未避免最后打成的包过大,只包含项目执行需要的包,建议大家都在虚拟环境里开发项目,这样可以确保环境的纯净,不会有一大堆不需要包堆在环境里。本实例的操作都在虚拟环境中进行。

在虚拟环境的终端(PyCharm打开项目下的Terminal)执行 pip install pyinstaller

注意:命令行前有(venv)说明在虚拟环境里。“venv”是创建的虚拟环境名,如果创建时命名成venv123,那这里就显示为(venv123)

 网络好,外加电脑配置还行的情况,安装速度非常快,两三秒时间

step three 执行pyinstaller pdfdownload.py,获取初始.spec文件

1 在terminal中定位到 pdfdownload.py 目录下,也就是定位到项目入口对应的py文件目录

2 输入 pyinstaller 项目入口文件名,本实例输入 pyinstaller pdfdownload.py

由于本实例项目很小,执行很快。执行完毕后,打开项目目录

 项目目录下新增了一个文件和两个文件夹

1 .spec是打包用的配置文件。.spec的文件名可以在配置中修改,默认是项目入口文件的文件名。这个文件重要,打包的配置信息都在里面,可以根据打包需求修改配置信息进行打包

2 build文件夹。打包的过程文件,可以不用理会,用不上。

3 dist文件夹。打包后的目标文件,如果要把项目当成免安装软件发布,把dist里的文件压缩成zip进行发布。

step four 修改.spec文件,将data文件夹加入到打包程序中

如果项目里有向外读取文件(诸如:获取图标文件、读取txt文件等)或对外写入文件(诸如:程序关闭前保存状态信息到txt文件中等)的功能,需要将外部文件和文件夹加入到打包程序中。

本实例程序有一个data文件夹,在data文件夹中保存了几个文件,程序运行时会读取文件,并在运行过程中往文件写入。所以,打包时需要将data文件夹加入到打包程序中。

1 打开.spec文件 

2 在 a 中的 datas 字段加上 (‘data’,'data'),前一个data指的是告知打包程序要从项目中拷贝的文件夹名,后一个data表示告知打包程序复制到结果中的文件夹名。一般不会改名,除非在项目代码中作了额外设置。 

3 将控制台关闭。默认打包会把控制台打开,也就是说打包后执行exe文件会把控制台同步打开,关闭控制台也会把exe同时关闭,在实际使用exe过程中,控制台没必要打开。在.spec文件件设置控制台关闭。

step five 增加data文件夹打包

1 执行前,先看下未增加data文件夹的情况。

进入dist目录

 在 _internal 中没有 data 文件夹,此时你双击 pdfdownload.exe 是会闪退的。

2 执行,pyinstaller pdfdownload.spec

1)删除项目目录下的 build 和 dist 文件夹

2)在PyCharm终端执行 pyinstaller pdfdownload.spec 命令

3)执行后,看dist文件夹情况

 新增了 data 文件夹。

运行 pdfdownload.exe

检查各个功能是否正常。具体检查过程不赘述(可以看博文 PyQt6实例_批量下载pdf工具_exe使用方法-CSDN博客)。 

检查没有问题后,进行下一步。

step six 如果要发布免安装文件

如果是要发布免安装文件,那到这一步就完结了,不需要用到后面的installForge操作。

直接将 dist 目录的内容压缩成 zip等压缩包发布。使用者直接解压运行 exe就行。

step seven 制作成单个exe安装文件 

1 下载 installForge

https://installforge.net/download/   installForge下载地址

 文件很小,只有4.19MB

2 安装installForge

 

 

3 制作

 1)打开 General 面板,输入Product Name 产品名,自己定义;输入Product 可以写版本号,自己决定;选择exe可以运行的操作系统,自行勾选。

2)点击左侧Files, 然后点击上面的“Add Files”

3)选择pyinstaller生成的dist文件夹中的 exe 文件

 4)点击上面的“Add Folder”

5)选择 pyinstaller 生成的dist文件夹下的 _internal 文件夹

 项目内容添加完毕。

6)点击左侧“Shotcuts”,点击下面的“Add...” 

7)设置好了应用安装完后桌面快捷方式的显示情况。开始栏中的设置一样。本实例没有设置图标,直接用的默认。注意:目标文件Target File 一定要和最终生成的文件名一致

 本实例只创建桌面快捷方式。

8)点击左侧“Build”,Setup File 右侧的 按钮 

9)选择一个空目录,等会最终生成的exe文件会在这个目录中生成。在文件名中写入要生成的exe文件名。注意,这里的文件名一定要和前面创建桌面快捷方式的目标文件Target File 文件名保持一致。

10)点击上面的“Build” 

 等待。。。,大概1到2分钟

制作完毕。

 最终exe文件使用方法,可查看博文 PyQt6实例_批量下载pdf工具_exe使用方法-CSDN博客

视频

PyQt6实例_批量下载pdf工具_v1使用pyinstaller与installForge打包成exe文件_哔哩哔哩_bilibili 

PyQt6实例_批量下载pdf工具_v2使用pyinstaller与installForge打包成exe文件_哔哩哔哩_bilibili

PyQt6实例_批量下载pdf工具_v3使用pyinstaller与installForge打包成exe文件_哔哩哔哩_bilibili

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

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

相关文章

Axure项目实战:智慧城市APP(完整交互汇总版)

亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢! 课程主题:智慧城市APP 主要内容:主功能(社保查询、医疗信息、公交查询等)、活动、消息、我的页面汇总 应用场景&#xff…

Appium Inspector使用教程

1.下载最新版本 https://github.com/appium/appium-inspector/releases 2.本地启动一个Appium服务 若Android SDK已安装Appium服务,则在任意terminal使用appium启动服务即可 3.Appium Inspector客户端配置连接到Appium服务 Configuring and Starting a Session…

Pycharm(七):几个简单案例

一.剪刀石头布 需求:和电脑玩剪刀石头布游戏 考察点:1.随机数;2.判断语句 import random # numrandom.randint(1,3) # print(num) # print(**30) #1.录入玩家手势 playerint(input(请输入手势:(1.剪刀 2.石头 3&…

Python Cookbook-4.13 获取字典的一个子集

任务 你有一个巨大的字典,字典中的一些键属于一个特定的集合,而你想创建一个包含这个键集合及其对应值的新字典。 解决方案 如果你不想改动原字典: def sub_dict(somedict,somekeys,default None):return dict([(k, somedict.get(k,default)) for k…

VMware Ubuntu 网络配置全攻略:从断网到畅通无阻

一、网络连接模式选择(先搞懂原理) VMware提供三种网络模式,就像手机的不同网络套餐: 模式适用场景特点类比NAT个人上网/新手首选虚拟机共享主机IP,能上网但隐身家用WiFi桥接服务器/需要被局域网访问虚拟机会获得独立…

链表(C++)

这是本人第二次学习链表,第一次学习链表是在大一上的C语言课上,首次接触,感到有些难;第二次是在大一下学习数据结构时(就是这次),使用C再次理解链表。同时,这也是开启数据结构学习写…

【SPP】蓝牙串口协议应用层深度解析:从连接建立到实战开发

目录 一、SPP应用层协议框架与角色模型 1.1 分层协议栈模型 1.2 设备角色模型(DevA 与 DevB 交互) 二、连接建立流程:从 SDP 到 RFCOMM 2.1 服务发现(SDP)流程(SDP 记录关键参数) 2.2 连接…

Giteki 认证:无线产品进入日本市场的关键保障

目录 适用产品认证范围 认证项目及技术要求 认证流程 认证周期 与其他认证的对比 常见问题 注意事项 Giteki 认证,其名称来源于日本语 “技適マーク”,罗马字拼写为 “GITEKI” ,在行业内也常被称为 Telec 认证、MIC 认证、RF 认证或技…

Ubuntu24.04 配置远程桌面服务

一:安装 sudo apt update sudo apt install vino 二:设置 gsettings set org.gnome.Vino require-encryption false # 关闭加密(某些 VNC 客户端不支持加密) gsettings set org.gnome.Vino prompt-enabled false # 关闭连接…

人工智能与软件工程结合的发展趋势

AI与软件工程的结合正在深刻改变软件开发的流程、工具和方法,其发展方向涵盖了从代码生成到系统维护的整个生命周期。以下是主要的发展方向和技术趋势: 1. 软件架构体系的重构 从“面向过程”到“面向目标”的架构转型: AI驱动软件设计以目标…

转发和重定向的区别详解

转发(Forward)和重定向(Redirect)是 Web 开发中两种常用的请求处理方式,主要用于将客户端请求从一个资源转移到另一个资源。它们在实现机制、行为表现和应用场景上有显著区别,以下是对两者的详细解析&#…

python专题1-----判断一个变量是否是字符串类型

在 Python 中,可以使用 isinstance() 函数来判断一个变量是否是字符串类型。字符串在 Python 中是以 str 类型表示的。下面是一些示例代码,展示如何判断一个变量是否是字符串类型: # 示例变量 var1 "Hello, World!" var2 12345 …

软件工程之需求工程(需求获取、分析、验证)

一、需求获取(Requirements Elicitation) 1. 定义与目标 需求获取是通过与用户、利益相关者等交互,识别并捕获系统需求的过程,目标是明确用户意图与业务目标,避免后期因需求偏差导致返工。 2. 主要方法 问卷法&…

Java简单生成pdf

生成这样的PDF 直接上代码 public static void main(String[] args) {String logoPath "Q:\\IdeaWork\\Demo\\src\\main\\webapp\\images\\logo.jpg"; // 替换为实际路径String baseDir "E:/Demo/TEST/problem/Generate"; // 基础目录int year 2025; //…

k8s存储介绍(六)StorangeClass

一、Kubernetes 存储类(StorageClass)详解 1. 什么是 StorageClass? 在 Kubernetes 中,StorageClass(存储类)是一种用于动态创建 PersistentVolume(PV)的资源对象。它允许管理员根…

C++:allocator类(动态数组续)

1.为什么需要 allocator? 在 C 中,动态内存管理通常通过 new 和 delete 完成: int* p new int; // 分配内存 构造对象 delete p; // 析构对象 释放内存 但 new 和 delete 有两个问题: 耦合性:将内…

北斗导航 | 中国北斗卫星导航系统的发展历程——“三步走”战略:背景,信号频点,调制方式,短报文,等

中国北斗卫星导航系统的发展历程按照“三步走”战略逐步推进,从区域服务到全球覆盖,形成了北斗一号、北斗二号、北斗三号三代系统的迭代升级,展现了中国航天科技的自主创新与突破。以下是各阶段的核心内容与发展特点综述:一、北斗一号:中国卫星导航的奠基(1994-2003年) …

Headless Chrome 优化:减少内存占用与提速技巧

在当今数据驱动的时代,爬虫技术在各行各业扮演着重要角色。传统的爬虫方法往往因为界面渲染和资源消耗过高而无法满足大规模数据采集的需求。本文将深度剖析 Headless Chrome 的优化方案,重点探讨如何利用代理 IP、Cookie 和 User-Agent 设置实现内存占用…

英伟达GB300新宠:新型LPDDR5X SOCAMM内存

随着人工智能(AI)、机器学习(ML)和高性能计算(HPC)应用的快速发展,对于高效能、大容量且低延迟内存的需求日益增长。NVIDIA在其GB系列GPU中引入了不同的内存模块设计,以满足这些严格…

静态网页应用开发环境搭建实战教程

1. 前言 静态网页开发是前端工程师的基础技能之一,无论是个人博客、企业官网还是简单的Web应用,都离不开HTML、CSS和JavaScript。搭建一个高效的开发环境,能够极大提升开发效率,减少重复工作,并优化调试体验。 本教程…