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

引用[1]:【PythonPython项目打包发布(一)(基于Pyinstaller打包多目录项目) 【PythonPython项目打包发布(二)(基于Pyinstaller打包PyWebIO项目) 【PythonPython项目打包发布(三)(基于Aardio打包多目录项目) 【PythonPython项目打包发布(四)(基于Nuitka打包PySide6项目) 【PythonPython项目打包发布(五)(制作Windows安装包) 说明。 引用[2]:项目requirements.txt beautifulsoup4==4.11.2 bs4==0.0.1 certifi==2022.12.7 charset-normalizer==3.0.1 idna==3.4 Nuitka==1.4.8 numpy==1.24.2 ordered-set==4.1.0 PySide6==6.4.2 PySide6-Addons==6.4.2 PySide6-Essentials==6.4.2 requests==2.28.2 shiboken6==6.4.2 soupsieve==2.4 urllib3==1.26.14 。 引用[3]: 一、前言 最近为了做个数据处理的程序,考虑到在后面其他操作人员在任何电脑都能进行试验数据处理。因此需要将数据处理程序嵌入到界面中。使用者只需要运行.exe文件就能进行数据处理。之前有了解过python版本的PyQt5以及PySide2以及C 的Qt,但是都没有系统去学,为了在短时间内完成一个界面,我在B站找了白月黑羽.的一个视频,里面刚好有一个例子,于是我就直接用该程序进行了改进。大家可以看一下很容易理解,我当时也就看了前三个视频。然后直接用这个程序。写完程序之后就是需要打包,因为在以后的项目工程中,程序会进行模块化,一个项目会有很多文件,因为我这个程序相对比较简单,所以我只是用了两个文件,一个是Window.py,也就是窗口我呢见,另一个就是DataProces.py就是数据处理文件。在之前的打包中,习惯用的是pyinstaller -F -w name.py,这种是单文件打包。对于多文件,以及Pyside2这个特殊的包不适用本方法。下面就跟大家说一下我遇到过的一些问题。 二、踩坑报错之路 1.No Module named ‘PySide2’ 说明:本文有两个文件,其中一个是Window.py另一个是DataProcess.py 其中Window.py调用DataProcess.py模块。我一开始使用的打包命令时单文件打包。因为我之前打包过类似的小程序(不含PySide2库),改指令可以用,但是对于本文的情况不能用。 pyinstaller -F -w -i name.ico Name.py # 解释:-F 表示单文件打包 # -w:不带黑色弹窗 # -i name.ico 打包后的.exe软件显示图标。 # Name.py:就是我们需要打包的py文件 如果大家打包.exe对软件图标有要求,需要利用这个链接将图片转换为.ico格式,建议用网站转换,因为之前踩过坑,如果是自己手动更改后缀名会出现打包报错。同时直接复制粘贴的图片可能不是正方形的,对于长宽不相等的图标也会报错。这是个人的踩坑经验,大家可以借鉴一下。ico格式转换网址:迅捷PDF转换器. 2.This application failed to start because no Qt platform plugin could be initialized. 。 问题: pyside6打包部署pyinstaller 回答: 对于使用PySide6进行打包部署,可以参考以下步骤: 1. 确保在项目的requirements.txt文件中包含了PySide6的版本信息,例如PySide6==6.4.2。[2] 2. 使用PyInstaller进行打包时,需要使用特定的命令来处理PySide6这个特殊的包。对于多文件打包,可以使用以下命令: pyinstaller --add-data "path/to/PySide6/PySide6.dll;." --add-data "path/to/PySide6/Qt/plugins;Qt/plugins" your_script.py 这个命令会将PySide6.dll文件和Qt/plugins目录添加到打包后的可执行文件中。请将"path/to/PySide6"替换为实际的PySide6安装路径。[3] 3. 如果在打包过程中遇到"No Module named 'PySide2'"的错误,这是因为PyInstaller默认将PySide6识别为PySide2。可以尝试在打包命令中添加"--hidden-import PySide6"来解决这个问题。[3] 4. 如果在运行打包后的可执行文件时遇到"This application failed to start because no Qt platform plugin could be initialized"的错误,这是因为缺少Qt平台插件。可以将Qt/plugins目录添加到系统环境变量中,或者将Qt/plugins目录复制到打包后的可执行文件所在的目录中。[3] 通过以上步骤,您应该能够成功地使用PySide6进行打包部署。希望对您有帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值