PyInstaller打包动态插件命令参数设置

本文详细解析使用PyInstaller打包Python工程时,如何正确处理动态加载库,包括使用--hidden-import和--add-binary参数的方法,以及如何在程序中指定资源文件路径确保在不同环境下正常运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果工程中有动态加载库,要添加两个选项:–hidden-import 和 --add-binary

–hidden-import <动态插件名字>
–add-binary <src;DEST>
src是动态库的路径,DEST是打包后希望存放的路径,中间的分号是在Windows中使用,Linux中用冒号

例如目录结构

|-main.py
|-plugins/
|-plugins/__init__.py
|-plugins/_01plugin.py
|-plugins/_02plugin.py
|-plugins/_98plugin.py
|-plugins/_99plugin.py

命令行

pyinstaller --hidden-import plugin--hidden-import plugins._01plugin --hidden-import plugins._01plugin --hidden-import plugins._02plugin --hidden-import plugins._98plugin --hidden-import plugins._99plugin --add-binary ./plugins/__init__.py;plugins --add-binary ./plugins/_01plugin.py;plugins --add-binary ./plugins/_02plugin.py;plugins --add-binary ./plugins/_98plugin.py;plugins --add-binary ./plugins/_99plugin.py;plugins -F main.py

-F参数是将工程打包成一个exe文件

两个参数都使用之后也可能会报错说找不到动态插件
从pyinstaller打包后的exe的运行机制将,打包得到的exe文件是一个可自解压的程序,它会把这个exe文件中包含的文件打包到一个名为_MEIxxxxxx的临时目录下面,这个目录在系统的临时文件夹下面(Linux下是/tmp),当程序退出时,会自动清空删除这个临时目录_MEIxxxxxx。
最终的exe文件有可能放在认可目录执行,其当前目录下不会有bin目录下面的资源文件,而是被解压到了临时目录下面,所以程序报错找不到相关文件。
解决方法
要在程序中指定资源文件的路径,使得它在非打包模式和打包模式下运行时都能找到相关资源文件。

base_path = getattr(sys, '_METPASS', os.path.dirname(os.path.abspath(__file__)))

pluginspath = os.path.join(base_path, 'plugins')

把资源的相对路径转换为绝对路径。如果找到_MEIPASS路径就以此为资源的基准路径,否则以当前路径为基准路径。

只使用–hidden-import
会报错,还是上面说的exe运行机制,虽然把动态库添加了进来,但是没有添加动态插件的文件资源,在程序中修改了绝对路径也会显示找不到这个文件。

只使用–add-binary
运行时会报错找不到动态插件中用import引入的包。因为使用这个选项只是把文件打入exe中,并没有识别其中的内容

参考:
https://www.yuanrenxue.com/tricks/pyinstaller-spec.html
https://blog.csdn.net/shixinwenwu/article/details/89879608

### 如何使用 PyInstaller 打包集成 YOLO 的 Python 脚本 #### 准备工作 在开始之前,确保已经创建并激活了一个专门用于项目的 Anaconda 环境。这一步非常重要,因为如果未在一个独立环境中操作,可能会引入不必要的依赖项,从而增加最终可执行文件的大小[^1]。 #### 安装必要的工具 为了成功打包包含 YOLO 模型推理功能的脚本,需要先安装 `PyInstaller` 和其他可能需要用到的相关库: ```bash conda install pyinstaller pip install opencv-python torch torchvision ``` 上述命令分别完成了以下任务: - 使用 Conda 安装 `PyInstaller`,以确保其运行于当前环境。 - 通过 Pip 安装 OpenCV、Torch 及 TorchVision 库,这些通常是实现 YOLO 推理所必需的核心组件。 #### 配置 PyInstaller 命令参数 当准备就绪后,可以利用如下命令来构建单个可执行文件(假设目标脚本名为 `yolo_inference.py`): ```bash pyinstaller --onefile --hidden-import=torchvision yolo_inference.py ``` 这里的关键选项解释如下: - `--onefile`: 将所有的程序资源压缩到单一的 .exe 文件中。 - `--hidden-import=torchvision`: 显式告知 PyInstaller 添加某些隐式的模块导入支持,防止因缺少必要模块而导致错误发生。 由于深度学习框架及其附属插件较为复杂,在实际应用过程中还可能出现额外缺失的动态链接库或者数据文件等问题,则需进一步调整配置或手动复制相关内容至指定目录下。 #### 处理大体积模型权重文件 对于像 YOLO 这样的机器学习项目来说,通常会涉及较大的预训练模型权重文件。为了避免将它们嵌入到 exe 中造成臃肿的结果,建议采用相对路径加载方式处理外部资源,并保持原样放置于发布后的应用程序旁边即可正常调用。 例如修改代码中的模型载入部分为读取同级目录下的 `.pt` 或者 `.pth` 类型权值文档形式: ```python import os weights_path = os.path.join(os.path.dirname(__file__), 'model_weights.pt') model.load_state_dict(torch.load(weights_path)) ``` 这样做的好处在于既简化了分发流程又减少了内存占用率。 #### 测试生成的应用程序 完成以上步骤之后,请务必验证生成出来的 EXE 是否能够脱离开发机正确无误地单独运作起来。可以通过虚拟机或者其他干净系统上来做最后的功能确认测试环节。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值