11
2024
03
16:50:49

Centos7安装Python3.10(安装OpenSSL v1.1.1、urllib3 2.0)(ImportError: urllib3 v2.0 only supports OpenSSL 1)

背景

urllib3一直报错: "ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1+, currently the 'ssl' module is compiled with OpenSSL 1.0.2k-fips"。 决定进行OpenSSL版本升级到1.1.1+。


准备环境


1.安装依赖包

在编译python的时候,需要一些依赖包,一次性安装完


yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make libffi-devel



2.安装wget

yum install wget



安装OpenSSL


这一步比较重要,在文档中说到需OpenSSL需要1.0.2或者1.1.x


Currently Python versions 3.6 to 3.9 are compatible with OpenSSL 1.0.2, 1.1.0, and 1.1.1.


1.下载OpenSSL

我们先下载并解压,1.1.1g


wget https://www.openssl.org/source/openssl-1.1.1g.tar.gz

tar -zxvf openssl-1.1.1g.tar.gz

2.编译安装

分别执行下面三条命令


cd openssl-1.1.1g

./config --prefix=/usr/local/openssl no-zlib #不需要zlib

make && make install


3.备份原配置

mv /usr/bin/openssl /usr/bin/openssl.bak

mv /usr/include/openssl/ /usr/include/openssl.bak


4.配置

将安装好的openssl 的openssl命令软连到/usr/bin/openssl


ln -s /usr/local/openssl/include/openssl /usr/include/openssl

将软链到升级后的libssl.so


ln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/local/lib64/libssl.so

将安装好的openssl命令软连到/usr/bin/openssl


ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl

将软链接写入openssl库文件的搜索路径


echo "/usr/local/openssl/lib" >> /etc/ld.so.conf

 

ldconfig -v #使修改后的/etc/ld.so.conf生效

/etc/ld.so.conf 这个文件记录了编译时使用的动态链接库的路径,告诉链接器去哪个路径下寻找链接时需要用到的库,如果找不到,就会提示链接错误。

完成OpenSSL安装

至此OpenSSL已经安装并配置好了,我们查看一下版本


openssl version

# OpenSSL 1.1.1g  21 Apr 2020

 


安装Python

1.下载源码包

wget https://www.python.org/ftp/python/3.10.10/Python-3.10.10.tgz

这里下载的是3.10.10版本,如果需要装其他版本可以到这里下载自己需要的版本。


注:如果这一步骤速度比较慢,可以先通过其他下载工具下载到本机,然后通过scp上传上去即可。



2.解压

# 解压压缩包

tar -zxvf Python-3.10.10.tgz

# 进入文件夹

cd Python-3.10.10



3.配置,编译,安装

./configure prefix=/usr/local/python3 -with-openssl=/usr/local/openssl #<---注意-with-openssl这个参数

make && make install

这个过程比较漫长,耐心等待即可


4.添加软链接

添加python3软链接


ln -s /usr/local/python3/bin/python3.10 /usr/bin/python3 

添加pip3的软链接


ln -s /usr/local/python3/bin/pip3.10 /usr/bin/pip3



5.完成安装

我们测试一下python3


python3 --version

# Python 3.10.10

常见问题

如果您没有安装OpenSSL,直接安装的Python,那么大概率您在使用pip3的时候会报错,报错信息诸如pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.SSLError("Can't connect to HTTPSURL because the SSL module is not available.")之类。


具体报错如图所示


这种情况大概率就是缺少ssl模块所致


验证很简单,大家可以进入python3控制台,import ssl,这时候大概率会报异常。


大家可以尝试使用安装OpenSSL步骤安装一遍,光这样还是不够的,安装完之后,还要再进行一次Python的编译和安装,这样才能生效,还有就是配置后面的-with-openssl参数不能少。


这里我没有链接到python上,是因为yum要用到python2才能执行,所以现在输入python的话还是会进入python2.7,输入python3才会进入python3.10


如果执意想要链接到python的话,就得修改一下yum的配置:


vi /usr/bin/yum 

把 #! /usr/bin/python 修改为 #! /usr/bin/python2 

 

vi /usr/libexec/urlgrabber-ext-down 

把 #! /usr/bin/python 修改为 #! /usr/bin/python2

添加软链接


添加软链接

 

复制代码

#将原来的链接备份

mv /usr/bin/python /usr/bin/python.bak

 

#添加python3的软链接

ln -s /usr/local/python3/bin/python3.10 /usr/bin/python

 

#测试是否安装成功了

python -V



 


附带完整命令脚本:


#!/bin/bash


yum install wget vim -y

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup; wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo; yum clean all; yum makecache

yum -y update;yum -y install yum-utils;yum -y groupinstall development

yum -y install zlib-devel bzip2-devel openssl-devel openssl-static ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel lzma gcc

wget https://www.openssl.org/source/openssl-1.1.1g.tar.gz

tar zxvf openssl-1.1.1g.tar.gz

cd openssl-1.1.1g

./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl shared zlib

make -j 8

make install

echo "export PATH=/usr/local/openssl/bin:$PATH" >> /etc/profile

echo "export LD_LIBRARY_PATH=/usr/local/openssl/lib:\$LD_LIBRARY_PATH" >> /etc/profile

source /etc/profile

yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make libffi-devel

mv /usr/bin/openssl /usr/bin/openssl.bak

mv /usr/include/openssl/ /usr/include/openssl.bak

ln -s /usr/local/openssl/include/openssl /usr/include/openssl

ln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/local/lib64/libssl.so

ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl

echo "/usr/local/openssl/lib" >> /etc/ld.so.conf

ldconfig -v

wget https://www.python.org/ftp/python/3.10.10/Python-3.10.10.tgz

tar -zxvf Python-3.10.10.tgz

cd Python-3.10.10

./configure prefix=/usr/local/python3 -with-openssl=/usr/local/openssl

make && make install

ln -sfv /usr/local/python3/bin/python3.10 /usr/bin/python  &&  ln -sfv /usr/local/python3/bin/pip3 /usr/bin/pip && ln -sfv /usr/local/python3/bin/python3.10 /usr/bin/python3

pip install urllib3

python -c "import ssl; print(ssl.OPENSSL_VERSION)"





推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

本文链接:https://hqyman.cn/post/5389.html 非本站原创文章欢迎转载,原创文章需保留本站地址!

分享到:
打赏





休息一下~~


« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

请先 登录 再评论,若不是会员请先 注册

您的IP地址是: