通过pyinstaller打包多个引用的小软件和PDF文件方法

当需要通过 PyInstaller 打包多个文件时,尤其是像多个小软件和 PDF 文件时,在终端中手动输入长长的 --add-data 参数会变得繁琐且容易出错。为了解决这个问题,可以通过以下几种更便捷的方法来进行打包:

方法 1: 使用 .spec 文件配置打包
.spec 文件是 PyInstaller 打包时自动生成的配置文件,你可以编辑这个文件来简化添加多个数据文件的过程。步骤如下:

生成 .spec 文件: 首先使用 pyinstaller --onefile main.py 来生成默认的 .spec 文件。这个文件会出现在你当前目录下,文件名为 main.spec。

编辑 .spec 文件: 打开生成的 main.spec 文件,找到 Analysis 函数中 datas 参数,并将需要打包的文件全部写入到 datas 列表中。

python
复制代码
a = Analysis(
[‘main.py’],
pathex=[‘.’],
binaries=[],
datas=[
(‘path_to_your_software/软件1.exe’, ‘.’),
(‘path_to_your_software/软件2.exe’, ‘.’),
(‘path_to_your_pdf/document1.pdf’, ‘.’),
(‘path_to_your_pdf/document2.pdf’, ‘.’),
],
hiddenimports=[],

)
在这里,datas 是一个列表,包含了每个文件的源路径和目标路径。左边是文件的实际路径,右边是它打包到 EXE 中时的相对路径(这里使用 ‘.’ 表示与 EXE 同一目录)。

通过 .spec 文件打包: 修改好 .spec 文件后,运行以下命令来打包:

bash
复制代码
pyinstaller main.spec
这样,所有你指定的文件都会被打包进 EXE 中,无需在终端中逐一添加。

方法 2: 使用自定义脚本来生成 --add-data 参数
如果你不希望手动编辑 .spec 文件,也可以通过 Python 脚本自动生成 PyInstaller 打包命令。如下是一个示例脚本,它可以自动生成带有所有 --add-data 参数的命令:

python
复制代码
import os

文件列表,你可以将所有小软件和 PDF 文件的路径放在这个列表中

files_to_include = [
“path_to_your_software/软件1.exe”,
“path_to_your_software/软件2.exe”,
“path_to_your_software/软件3.exe”,
“path_to_your_pdf/document1.pdf”,
“path_to_your_pdf/document2.pdf”
]

构造 --add-data 参数

add_data_arguments = " ".join([f’–add-data “{file};.”’ for file in files_to_include])

生成 PyInstaller 命令

pyinstaller_command = f’pyinstaller --onefile {add_data_arguments} main.py’

打印最终的命令

print(pyinstaller_command)

你可以选择直接使用 os.system() 来运行这个命令

os.system(pyinstaller_command)

方法 3: 通过目录打包
如果你的文件都在一个特定的目录下,也可以通过指定整个目录来简化 --add-data 参数:

bash
复制代码
pyinstaller --onefile --add-data “path_to_your_directory;.” main.py
这样,PyInstaller 会将整个 path_to_your_directory 目录打包到 EXE 中,而你不需要逐一列出文件。然后,你可以通过 sys._MEIPASS 来获取文件路径。

结论
推荐使用 .spec 文件:编辑 .spec 文件可以让你更加灵活地管理打包内容,且更加可维护。
自动生成命令:通过脚本生成打包命令适用于不想手动输入复杂命令的情况。
使用目录打包:如果你所有的文件都位于同一个目录,可以直接打包整个目录。
这些方法能有效减少手动操作的出错几率,并大大简化打包过程。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据结构——七种排序(java)实现

文章目录 直接插入排序希尔排序选择排序冒泡排序快速排序归并排序计数排序 直接插入排序 思想: /*** 直接插入排序* 具有稳定性* 时间复杂度为:(计算时间复杂度的时候应计算执行次数最多的语句类,在直接插入排序中次数最多的语句…

Ajax ( 是什么、URL、axios、HTTP、快速收集表单 )Day01

AJAX 一、Ajax是什么1.1名词解释1.1.1 服务器1.1.2 同步与异步1. 同步(Synchronous)2. 异步(Asynchronous)3. 异步 vs 同步 场景4. 异步在 Web 开发中的常见应用: 1.2 URL 统一资源定位符1.2.1 URL - 查询参数1.2.2 ax…

maven打包常用命令

跳过tset打包 mvn package -Dmaven.test.skiptrue

什么是 ARP 欺骗和缓存中毒攻击?

如果您熟悉蒙面歌王,您就会明白蒙面歌王的概念:有人伪装成别人。然后,当面具掉下来时,您会大吃一惊,知道了这位名人是谁。类似的事情也发生在 ARP 欺骗攻击中,只是令人惊讶的是,威胁行为者利用他…

获取期货股票历史数据以及均线策略分析

【数据获取】银河金融数据库(yinhedata.com)能够获取国内外金融股票、期货历史行情数据,包含各分钟级别。 【搭建策略】均线策略作为一种广泛应用于股票、期货等市场的技术分析方法,凭借其简单易懂、操作性强等特点,深…

AI绘画Stable Diffusion WebUI 2个超好用的办法-实现图片光照调节,快速生成你想要的光感大片!

大家好,我是画画的小强 在摄影艺术中,灯光的运用对于照片的质量和情感表达至关重要。它不仅能够彰显主题,还能为画面增添深度与立体感,帮助传递感情,以及凸显细节之美。 下面,我将向大家展示如何用AI绘画…

【动态规划-最长公共子序列(LCS)】【hard】【科大讯飞笔试最后一题】力扣115. 不同的子序列

给你两个字符串 s 和 t ,统计并返回在 s 的 子序列 中 t 出现的个数,结果需要对 10^9 7 取模。 示例 1: 输入:s “rabbbit”, t “rabbit” 输出:3 解释: 如下所示, 有 3 种可以从 s 中得到 “rabbit”…

kafka创建多个分区时,分区会自动分配到多个不同的broker

1.分区只有一个时所有的消息生产和消费都集中在单个Broker上,多个broker只是提高了抗风险能力(因为副本存在不同的broker上,主节点挂掉,可以重新选取副本为主节点)。 2.没有消息顺序性要求可以多个分区,注意…

SpringBoot使用esayExcel根据模板导出excel

1、依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.1.3</version></dependency> 2、模板 3、实体类 package com.skybird.iot.addons.productionManagement.qualityTesting…

获取期货股票分钟级别数据以及均线策略

【数据获取】 银河金融数据库&#xff08;yinhedata.com&#xff09; 能够获取国内外金融股票、期货历史行情数据&#xff0c;包含各分钟级别。 【搭建策略】 均线策略作为一种广泛应用于股票、期货等市场的技术分析方法&#xff0c;凭借其简单易懂、操作性强等特点&#xf…

怎么高效对接SaaS平台数据?

SaaS平台数据对接是指将一个或多个SaaS平台中的数据集成到其他应用或平台中的过程。在当前的数字化时代&#xff0c;企业越来越倾向于使用SaaS平台来管理他们的业务和数据。然而&#xff0c;这些数据通常散布在不同的SaaS平台中&#xff0c;这对于企业数据的整合和分析来说可能…

Centos Stream 9备份与恢复、实体小主机安装PVE系统、PVE安装Centos Stream 9

最近折腾小主机&#xff0c;搭建项目环境&#xff0c;记录相关步骤 数据无价&#xff0c;丢失难复 1. Centos Stream 9备份与恢复 1.1 系统备份 root权限用户执行进入根目录&#xff1a; cd /第一种方式备份命令&#xff1a; tar cvpzf backup.tgz / --exclude/proc --exclu…

04-SpringBootWeb案例(中)

3. 员工管理 完成了部门管理的功能开发之后&#xff0c;我们进入到下一环节员工管理功能的开发。 基于以上原型&#xff0c;我们可以把员工管理功能分为&#xff1a; 分页查询&#xff08;今天完成&#xff09;带条件的分页查询&#xff08;今天完成&#xff09;删除员工&am…

CAN和CANFD如何转换和通信

随着科技的发展&#xff0c;汽车电子和工业领域中CAN通信需要承载数据量也越来越大&#xff0c;传统CAN通信有了向CANFD通信过渡的倾向。在实现过渡的过程中可能会出现自己设备是CAN通信&#xff0c;客户设备是CANFD通信的情况&#xff0c;或者自己设备是CANFD通信&#xff0c;…

红帽7—Mysql路由部署

MySQL Router 是一个对应用程序透明的InnoDB Cluster连接路由服务&#xff0c;提供负载均衡、应用连接故障转移和客户端路 由。 利用路由器的连接路由特性&#xff0c;用户可以编写应用程序来连接到路由器&#xff0c;并令路由器使用相应的路由策略 来处理连接&#xff0c;使其…

爬虫常用正则表达式用法

在网页爬虫中&#xff0c;正则表达式&#xff08;regex&#xff09;是一种非常有用的工具&#xff0c;用于从 HTML、JSON 或其他文本格式中提取特定的数据。下面是一些常见的正则表达式及其在爬虫中的应用场景&#xff1a;

品牌渠道保护:系统与方法并重的长期战役

在当今竞争激烈的市场环境中&#xff0c;品牌的发展离不开对销售渠道的精心拓展与管理。渠道的顺畅与否直接关系到品牌的市场表现和声誉&#xff0c;然而&#xff0c;渠道的混乱却可能引发一系列棘手问题&#xff0c;如低价、乱价、窜货、假货等&#xff0c;这些问题犹如品牌发…

Python简介与入门

如果你要用计算机做很多工作&#xff0c;最后你会发现有一些任务你更希望用自动化的方式进行处理。比如&#xff0c;你想要在大量的文本文件中执行查找/替换&#xff0c;或者以复杂的方式对大量的图片进行重命名和整理。也许你想要编写一个小型的自定义数据库、一个特殊的 GUI …

纪录片《西野》首站出海亮相伦敦 幕后主创现场与观众互动交流

近日&#xff0c;备受瞩目的ANFFF动物生态未来影展在英国伦敦如约举办&#xff0c;它以其独特的视角和深刻的主题&#xff0c;为全球观众呈现一场跨越生物多样性、喜马拉雅山脉神秘魅力与人类心灵共鸣的光影盛宴。此次影展也吸引了众多影人及动物保护主义者的目光。其中&#x…

JMeter性能测试时,如何做CSV参数化

在现代软件开发中&#xff0c;性能测试是保证应用程序在高负载条件下稳定运行的重要环节。为了实现真实场景的测试&#xff0c;参数化技术应运而生。其中&#xff0c;CSV参数化是一种高效且灵活的方法&#xff0c;可以让测试人员通过外部数据文件驱动测试脚本&#xff0c;从而模…