简介
PyInstaller 是一个用于将 Python 程序打包成可执行文件(可执行程序)的工具。它能够将 Python 代码和其相关的依赖项(包括 Python 解释器、依赖的模块、库文件等)打包成一个独立的可执行文件,方便在不同环境中运行,而无需安装 Python 环境和相关依赖。
使用 PyInstaller,你可以将 Python 程序打包成 Windows 的可执行文件(.exe)、Mac OS 的应用程序(.app)以及 Linux 下的可执行文件。打包后的可执行文件可以在原始操作系统之外的其他操作系统上运行(如将 Windows 上的 Python 程序打包成 Mac OS 或 Linux 下的可执行文件)。
问题
本文讲解的是,Linux系统打包可执行文件后,运行onnxruntime会警告(Init provider bridge failed):
[W:onnxruntime:Default, onnxruntime_pybind_state.cc:1560 onnxruntime::python::CreateInferencePybindStateModule] Init provider bridge failed.
这是由于找不到动态库导致的。
当然这并不影响程序运行,但作为一名合格的程序员,必须干掉这个问题。
解决办法
1、运行pyinstaller命令
pyinstaller xxx.py
运行之后,会在当前py文件的目录下生成一个xxx.spec文件
2、打开xxx.spec文件
找到datas参数,如下:
3、修改datas的值
手动将动态库so文件写入
datas=[('/usr/local/python3.8.16/lib/python3.8/site-packages/onnxruntime/capi/libonnxruntime_providers_shared.so','onnxruntime/capi/')],
需要改成自己本地中的路径。
4、再次执行打包命令
pyinstaller xxx.spec
执行./xxx,测试功能,发现之前提示的问题已经成功解决了。