python的ssl问题

python新的版本对ssl的版本有更高的要求,本文介绍如何解决(基于centos 7)
python官网:https://www.python.org/

1. 基本解释

python依赖ssl 1.1.1及以上版本,如果自行编译,会导致找不到openssl的依赖库

1.1.核心依赖

安装必要的依赖

1
2
yum groupinstall -y 'Development Tools';
yum install -y zlib-devel libffi-devel libuuid-devel readline-devel tk tk-devel ncurses-libs sqlite sqlite-devel bzip2-devel openssl-devel gdbm gdbm-devel libdbi-devel xz-devel python-backports-lzma mpdecimal expat libretls db4-devel libpcap-devel lzma xz perl-CPAN perl-IPC-Cmd gcc-c++ kernel-devel

你需要升级gcc,点击查看链接

1.2 使用yum自带的openssl

安装openssl

1
2
3
4
# 安装仓库自带的openssl
yum install openssl-devel -y
# 链接库包含这个目录
ldconfig /usr/local/lib64/

尝试安装python,如果成功就OK

1
2
3
4
5
# 清除原来可能已经make的缓存
make distclean
./configure --enable-optimizations --enable-shared --with-openssl=/usr/local/lib64
make
make altinstall

2.手动编译openssl

2.1 安装openssl

查看openssl官网:https://www.openssl.org/source/
下载解压之后

1
2
3
4
5
6
7
8
9
10
11
12
13
# 我解压到了这个目录
cd /root/local/openssl-3.0.5
./Configure
make
make install
# 链接库包含这个目录
vim ~/.bashrc
# 添加如下内容:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib:/usr/local/lib:/usr/local/lib64;
# 更新
source ~/.bashrc
#查看版本
openssl version

2.2 在openssl的编译目录,准备lib库

将源码下的链接库,复制到lib目录

1
2
3
cd /root/local/openssl-3.0.5
mkdir lib
cp ./*.{so,so.3,a,pc} ./lib

编译python,并使用openssl的编译目录

1
2
3
./configure --enable-optimizations --enable-shared --with-openssl=/root/local/openssl-3.0.5
make
make altinstall