py3.9环境下程序提示错误ImportError: libssl.so.3

错误日志

ImportError: libssl.so.3: cannot open shared object file: No such file or directory
Traceback (most recent call last): 

说明你的 Python 程序(或者底层依赖,如 requests、pyopenssl、urllib3 等)需要使用 OpenSSL 3.x,但系统中缺少对应的动态链接库 libssl.so.3。

env

  • centos7.9
  • python3.9

解决

背景解释

libssl.so.3OpenSSL 3.0 的动态库链接名,通常安装在以下路径:

  • /usr/lib64/libssl.so.3
  • /usr/lib/x86_64-linux-gnu/libssl.so.3
  • 或软链接自 /usr/local/lib

解决方案

1. Debian / Ubuntu 22+

1
2
sudo apt update
sudo apt install -y libssl3

可选:更新 ldconfig

1
sudo ldconfig

2. CentOS / RHEL / AlmaLinux / Rocky

CentOS 7 默认是 OpenSSL 1.0,不支持 libssl.so.3,需要手动安装 OpenSSL 3:

1
sudo dnf install -y openssl3 openssl3-libs

如果没有 dnf,可能需要先启用 EPEL 或升级系统版本。


3. Arch / Manjaro / 基于 pacman 的系统

1
sudo pacman -Syu openssl

Arch 默认就使用的是 OpenSSL 3.x,路径是 /usr/lib/libssl.so.3


4.CentOS 7(默认不提供 OpenSSL 3)

方法一:启用第三方源(如 EPEL/ius)

1
2
sudo yum install epel-release
sudo yum install openssl3 openssl3-libs

方法二:手动编译 OpenSSL 3(通用)

1
2
3
4
5
6
7
cd /usr/local/src
wget https://www.openssl.org/source/openssl-3.0.14.tar.gz
tar xvf openssl-3.0.14.tar.gz
cd openssl-3.0.14
./config --prefix=/usr/local/openssl3 --openssldir=/usr/local/openssl3 shared
make -j$(nproc)
sudo make install

然后添加库路径:

1
2
echo "/usr/local/openssl3/lib" | sudo tee /etc/ld.so.conf.d/openssl3.conf
sudo ldconfig

可设置环境变量给 Python 找:

1
export LD_LIBRARY_PATH=/usr/local/openssl3/lib:$LD_LIBRARY_PATH

Python 如何检测 libssl.so.3

Python 检测:

1
2
import ssl
print(ssl.OPENSSL_VERSION)
1
ldd $(which python3) | grep ssl

输出中应该出现:

libssl.so.3 => /usr/lib/libssl.so.3