根据现有的libjpeg依赖修复ImportError

作者:matrix 发布时间:2024-06-25 分类:Linux Python

Python的Pillow库(PIL)处理图像时,可能会遇到库依赖问题,例如缺少libjpeg.so.9文件

from PIL import Image
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/work/.local/lib/python3.7/site-packages/PIL/Image.py", line 103, in <module>
    from . import _imaging as core
ImportError: libjpeg.so.9: cannot open shared object file: No such file or directory

正常来说是安装libjpeg库来解决 apt-get install libjpeg-dev / yum install libjpeg-devel 。但是我这台 CentOS机器之前有这个依赖,还有就是网络问题很麻烦

查找现有的libjpeg库文件

sudo find / -name "libjpeg.so*" 2> /dev/null

比如找到 /home/work/.jjjjbbbo/lib/libjpeg.so.9

方法 1.更新动态链接配置

软链接到系统库目录,并更新动态链接器配置

sudo ln -s /home/work/.jjjjbbbo/lib/libjpeg.so.9 /usr/lib/libjpeg.so.9
sudo ldconfig

说明:
ln -s 用于将找到的 lib 文件软链接到系统目录
ldconfig命令是更新动态链接器运行时绑定

方法 2.配置临时环境变量

不想修改系统配置,可以通过临时环境变量来解决

export LD_LIBRARY_PATH=/home/work/.jjjjbbbo/lib:$LD_LIBRARY_PATH
python3 -c 'from PIL import Image' # 执行测试,没有报错

配置LD_LIBRARY_PATH环境变量后,运行无报错,确认问题解决

验证库是否正确链接

ldd $(which python3)

ldd命令可以查看python解释器关联的依赖库路径。

还可以通过设置LD_DEBUG=libs 来输出动态链接库加载信息:

LD_DEBUG=libs python3 -c 'from PIL import Image'