报错:ImportError: libssl.so.1.1: cannot open shared object file: No such file or directory
若有理解不当,欢迎讨论补充
系统:Linux
环境:conda虚拟环境 + paddle 2.5.1
问题:在使用paddle 2.5.1的时候,显示已经pip安装成功了,但是在import paddle时报了错误。
分析:错误发生在paddle包的fluid文件夹下的core.py里,代码:
from . import libpaddle
这里的libpaddle应该指的是同路径下的libpaddle.so文件,该文件是python代码编译成的共享库,它里面应该是尝试调用了系统的openssl.so.*,在我的环境中,我已经通过conda install openssl=1.1
命令安装了1.1版本的openssl,而且也存在libssl.so.1.1
这个文件,位置是
/root/miniconda3/envs/env_name/lib/libssl.so.1.1
但是显然代码找不到这个文件。但是它可以找到系统本身环境的openssl.so文件,在我本地,该文件位于
/usr/lib/x86_64-linux-gnu/libssl.so
/usr/lib/x86_64-linux-gnu/libssl.so.3
显然版本不对。解决该问题的方法有几个:
解决1
:在系统环境中安装openssl.1.1.x,这个方法我没试,在网上搜该报错,大多数回答都是这个方法。但是我不想动系统环境,我想直接用conda虚拟环境中的openssl.so文件,所以该方法我没试过。
解决2
:将conda 虚拟环境中的openssl.so.1.1复制到/usr/lib/x86_64-linux-gnu路径下。该方法在我的环境下有效。
注意:如果你的/usr/lib下没有该文件,你可以尝试在根目录下搜索libssl.so文件,找到类似于/usr/lib这种形式的路径,把openssl.so.1.1复制过去即可
解决3
:将你的虚拟环境中的libssl.so.1.1所在路径,(即/root/miniconda3/envs/envs_name/lib)添加到环境变量LD_LIBRARY_PATH中:
export LD_LIBRARY_PATH=/root/miniconda3/envs/envs_name/lib:$LD_LIBRARY_PATH