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

news/2024/10/18 22:34:54/

当需要通过 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.ppmy.cn/news/1538507.html

相关文章

计算机毕设选题推荐【软件工程专业】

计算机毕设选题推荐【软件工程专业】 对于软件工程专业的同学们来说,选择一个合适的毕业设计选题是成功完成毕设的第一步。一个好的选题不仅要符合当前行业的技术潮流,还要结合自己所学的知识与兴趣。以下是为大家整理的100个软件工程专业的毕设选题推荐…

【算法篇】三道题理解什么是递归,回溯和剪枝

递归,回溯,剪枝 想必大家再学习算法知识的路上经常听到回溯,剪枝类似的概念,对于初学者来说,很容易把他们理解成一种新的算法思想,其实回溯和剪枝只是在递归的基础上稍加修改,对于解决某些特定问…

学习之面试题:偏函数

偏函数(Partial Function)是 Python 中的一个实用工具,通常用于函数式编程中,可以固定一个函数的部分参数,从而生成一个新的函数。偏函数在 Python 中通常通过 functools.partial 实现。在面试中,考察偏函数…

Django的模板语法

Django的模板语法 1、初步认识2、原理 1、初步认识 本质上:在HTML中写一些占位符,由数据对这些占位符进行替换和处理。 在views.py中用字典(键值对)的形式传参,在html文件中用两个花括号来显示单独的值 列表、元组等数…

TinyOS 点对基站通信

文章目录 一、前言1.1 发包的BlinkToRadio的数据包格式 二、混淆基站源码分析2.1 Makefile2.2 组件连接2.3 主逻辑代码 一、前言 1.1 发包的BlinkToRadio的数据包格式 如下,注意:AM层类型(1byte)即handlerID使可以在组件中修改的。 二、混淆基站源码…

Rocky linux 修改ip地址, rocky服务器修改静态地址, rocky虚拟机修改ip

1. 更新yum yum update 2. 安装ifconfig yum install net-tools 3. 修改配置 vi /etc/NetworkManager/system-connections/ens33.nmconnection 将ipv4内容修改如下: # 自动改为手动 methodmanual # 网关为vm ware 查看网关地址 address你想改为的ip/24,网关 #dns不…

【Linux】操作系统基础

1.冯诺依曼体系结构介绍 冯诺依曼体系结构如下: 在上图中「输⼊设备」和「输出设备」⼀般被称为计算机的外设,⽽「存储器」在冯 诺依曼体系结构中表示「内存」 输⼊设备⼀般包括:⽹卡、磁盘、键盘、触摸屏等 输出设备⼀般包括:…

使用Spring Security+jwt+redis实现登录注册逻辑

Spring Security Spring Security 是一个提供身份验证、授权和防御常见攻击的框架。它为保护命令式和响应式应用程序提供了一流的支持,是保护基于 Spring 的应用程序的事实标准。 这篇博客主要是记录自己第一次使用springSecurity实现登录逻辑的过程。 使用Spring…