Linux下用PyInstaller打包Python3.10程序时遇libpng依赖错误
解决PyInstaller打包opencv时libpng缺失的问题
这个错误是因为PyInstaller没自动把opencv依赖的libpng库打包进可执行文件目录,导致运行时找不到对应库文件。下面是几种可行的解决办法:
定位libpng库的路径
先在系统里找到libpng16的具体位置,执行以下命令:ldd $(python -c "import cv2; print(cv2.__file__)") | grep libpng或者用find命令全局搜索:
find /usr/lib -name "libpng16*.so*"执行后会得到类似
/usr/lib/x86_64-linux-gnu/libpng16.so.16的路径。方法1:打包时手动添加库文件
在PyInstaller命令中用--add-binary参数指定库的路径,格式为源路径:目标路径,目标路径填.表示将库放到可执行文件的同级目录:python3 -m PyInstaller --add-binary "/usr/lib/x86_64-linux-gnu/libpng16.so.16:." compare_format.py方法2:修改spec文件重新打包
如果已经生成了compare_format.spec文件,打开它找到Analysis配置段,在binaries列表中添加库的路径配置:a = Analysis( ['compare_format.py'], pathex=[], binaries=[('/usr/lib/x86_64-linux-gnu/libpng16.so.16', '.')], # 添加这一行 datas=[], ... )保存后执行以下命令重新打包:
python3 -m PyInstaller compare_format.spec方法3:改用系统包管理器安装的opencv
如果之前用pip安装的是opencv-python,可以换成系统包管理器提供的版本(以Ubuntu为例):pip uninstall opencv-python sudo apt-get install python3-opencv系统版本的opencv依赖库路径更规范,PyInstaller更容易自动识别并打包所需依赖。
完成打包后,进入dist/compare_format目录检查是否存在libpng16相关文件,再运行可执行文件即可。
内容的提问来源于stack exchange,提问作者dfSDF
相关产品推荐
相关产品推荐

