自用笔记 | 解决Python与OpenSSL相关问题

提示:本文自用系统CentOS7,请根据个人问题情况适当调整解决办法命令

文章目录

  • 一、问题描述
  • 警告:pip配置了需要TLS/SSL的位置,但是Python中的SSL模块不可用。
  • 二、问题分析
  • 三、解决方案
  • 1.查看当前Openssl版本
  • 2.更新Openssl
  • (1)确保您的系统已更新
  • (2)安装依赖
  • (3)下载源码包
  • (4)解压源码包
  • (5)进入解压后的目录
  • (6)配置编译选项
  • (7)编译安装
  • (8)解决安装完还是旧版本
  • ①进入程序目录,测试新安装的Openssl
  • ②拷贝Openssl库文件
  • ③更新动态链接库
  • ④更新Openssl软链接
  • (9)重新查看当前Openssl版本
  • 3.重新编译Python
  • (1)安装依赖
  • (2)下载源代码包
  • (3)解压源代码包
  • (4)进入解压后的目录
  • (5)配置编译选项
  • (6)开始编译安装
  • (7)清理不必要的文件
  • (8)设置环境变量
  • (9)更新Python3软链接
  • ①删除旧链接
  • ②创建新链接
  • (10)检查Python版本

  • 一、问题描述

    WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.

    警告:pip配置了需要TLS/SSL的位置,但是Python中的SSL模块不可用。


    二、问题分析

    Python版本与Openssl版本需要相对匹配。
    Python3.7之后的版本,依赖的Openssl,必须要是1.1或者1.0.2之后的版本,或者安装了2.6.4之后的libressl,Linux自带的Openssl版本过低。可能是当前Openssl版本过低。

    三、解决方案

    1.查看当前Openssl版本

    openssl version
    

    OpenSSL 1.0.2k-fips 26 Jan 2017
    当前openssl版本为1.0.2k-fips ,然而对于安装Python 3.10.11来说,Openssl的版本过低,因此需要更新Openssl的版本才能满足要求。

    2.更新Openssl

    (1)确保您的系统已更新

    #系统更新
    sudo yum update
    

    (2)安装依赖

    #安装依赖
    yum install gcc libffi-devel zlib* openssl-devel
    

    如若部分依赖未安装成功,请单独安装重试

    (3)下载源码包

    下载合适版本的源码包

    #下载合适的版本包
    wget https://www.openssl.org/source/openssl-3.0.1.tar.gz
    

    (4)解压源码包

    #解压
    tar -zxvf openssl-3.0.1.tar.gz
    

    (5)进入解压后的目录

    进入解压后的文件目录,切记一定要进入该目录才能继续执行后续命令

    #进入文件目录
     cd openssl-3.0.1
    

    (6)配置编译选项

    其中--prefix是指定安装目录的,shared zlib库是在安装时寻找zlib库依赖的

    #配置编译选项
    ./config --prefix=/usr/local/openssl
    

    (7)编译安装

    #编译安装
    make && make install
    

    (8)解决安装完还是旧版本

    #查看当前Openssl版本
    openssl version
    

    OpenSSL 1.0.2k-fips 26 Jan 2017

    发现还是旧版本!


    ①进入程序目录,测试新安装的Openssl
    #运行
    cd /usr/local/openssl/bin
    ./openssl
    

    出现报错
    ./openssl: error while loading shared libraries: libssl.so.3:
    cannot open shared object file: No such file or directory

    查看目录/usr/local/openssl/lib64

    #查看目录/usr/local/openssl/lib64
    ls /usr/local/openssl/lib64
    

    发现有libssl.so.3库文件,但是openssl程序却找不到,考虑是路径问题。
    openssl程序会去 /usr/lib路径下去寻找库文件。

    ②拷贝Openssl库文件
    #拷贝Openssl库文件到/usr/lib
    cp -r /usr/local/openssl/lib64/* /usr/lib
    
    ③更新动态链接库
    #更新动态链接库
    ldconfig
    
    ④更新Openssl软链接
    # 备份旧版openssl
    mv /usr/bin/openssl /usr/bin/openssl.bak-$(date +%m%d)
     
    # 新版openssl软链接到旧openssl位置
    ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
     
    # /etc/ld.so.conf 文件记录了编译时使用的动态链接库的路径,告诉链接器去哪个路径下寻找链接时需要用到的库,如果找不到,就会提示链接错误。
    echo "/usr/local/openssl/lib">>/etc/ld.so.conf
     
    # ldconfig 命令用于在默认搜寻目录 /lib 和 /usr/lib 以及动态库配置文件 /etc/ld.so.conf 内所列的目录下,搜索出可共享的动态链接库。
    ldconfig
    

    (9)重新查看当前Openssl版本

    #重新查看当前Openssl版本
    openssl version
    

    OpenSSL 3.0.1 14 Dec 2021 (Library: OpenSSL 3.0.1 14 Dec 2021)
    当前Openssl版本为3.0.1 ,已满足Python 3.10.11的要求。


    3.重新编译Python

    (1)安装依赖

    #安装编译工具和Python开发工具
    sudo yum install gcc python3-devel
    

    (2)下载源代码包

    下载Python 3.10.11的源代码包

    #下载Python 3.10.11的源代码包
    wget https://www.python.org/ftp/python/3.10.11/Python-3.10.11.tgz
    

    (3)解压源代码包

    #解压源代码包
    tar -zxvf python-3.10.11.tgz
    

    (4)进入解压后的目录

    #进入解压后的目录
    cd python-3.10.11
    

    (5)配置编译选项

    #配置编译选项
    ./configure --prefix=/usr/local/python3.10 --with-openssl=/usr/local/openssl
    

    (6)开始编译安装

    #编译安装
    make && make install
    

    (7)清理不必要的文件

    删除编译过程中生成的一些临时文件和目标文件

    #清理编译临时文件
    make clean
    

    (8)设置环境变量

    #设置环境变量
    echo "export PATH=/usr/local/python3.10/bin:\$PATH" >> ~/.bashrc
    #更新环境变量
    source ~/.bashrc
    

    (9)更新Python3软链接

    ①删除旧链接
    rm -rf /usr/bin/python3
    
    ②创建新链接
    ln -s /usr/local/python3.10 /usr/bin/python3
    

    (10)检查Python版本

    python -V
    

    作者:阿夜吖Aye

    物联沃分享整理
    物联沃-IOTWORD物联网 » 自用笔记 | 解决Python与OpenSSL相关问题

    发表回复