可以参考Python安装第三方库出错完美解决方法

看了很多答案,有的说是镜像问题走了一些弯路,虽然pip后加网址镜像(更换镜像源点此)能暂时解决问题,但是在import一些包时python还是会报错 importssl 。我安装的是python3.10,这个问题openssl没有升级造成了。openssl升级方法参见以下

一. centOS7离线安装python3.10运行环境

前言:因为总总原因,服务器内网运行不能联网,在部署前也没有装好环境离线安装需要很多依赖包,安装过程简单也很耗时,梳理一下过程,希望能给我一样有离线安装需求小伙伴一些帮助。

提供一个centOS7镜像位置可以下载各种依赖

CentOS Mirror

———————————————————————————————————————————

第一步:环境搭建

我的系统几乎是个白板,下载各种依赖跑断腿,环境还是有问题最后按了虚拟机记录各种依赖包,然后下载。下面是依赖资源,也可以自己去镜像里下。

centOS7离线安装python3.10运行环境rpm依赖-Linux文档资源-CSDN下载

文件夹解压上传服务器上,执行下面语句安装linux小白,每个语句都需要查)

cd /rpm目录
rpm -Uvh --force --nodeps *rpm

———————————————————————————————————————————

第二步:安装pythonpython3.10

二. CentOS 7 安装 Python 3.10

1. 安装编译所需的依赖

sudo yum -y update
sudo yum -y install openssl-devel libffi-devel bzip2-devel
sudo yum -y groupinstall "Development Tools"

2. 安装 Python 3.10 必需的 openssl >= 1.1.1

wget https://www.openssl.org/source/openssl-1.1.1q.tar.gz --no-check-certificate
tar zxf openssl-1.1.1q.tar.gz
cd openssl-1.1.1q
./config --prefix=/usr/local/openssl-1.1.1
sudo make && sudo make install

3. 安装 Python 3.10

wget https://www.python.org/ftp/python/3.10.5/Python-3.10.5.tgz
tar zxf Python-3.10.5.tgz 
cd Python-3.10.5
./configure --enable-optimizations --with-openssl=/usr/local/openssl-1.1.1 --with-openssl-rpath=auto
sudo make altinstall

4. 添加链接

查看系统python的位置在哪儿

whereis python

在这里插入图片描述
python2.7默认安装是在 /usr/bin目录中,切换到/usr/bin/

cd /usr/bin/
ll python*

在这里插入图片描述

这里已经软链接了,正常未链接之前是python->python2.7而不是python3.10

添加链接,将原来的链接备份

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

添加python3的软链接

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

或者

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

测试是否安装成功了

python -V

默认centos7是没有安装pip,先添加epel扩展

yum -y install epel-release

安装pip

yum install python-pip

更改yum配置,因为其要用到python2才能执行,否则会导致yum不能正常使用

vi /usr/bin/yum

第一行的#! /usr/bin/python 修改为如下

#! /usr/bin/python2
vi /usr/libexec/urlgrabber-ext-down

修改如下

#! /usr/bin/python2

三. Caused by SSLError(“Can‘t connect to HTTPS URL because the SSL module is not available.“) 详解

前言

本文描述手动编译 python3.10 缺少 openssl 模块问题解决方案和几个小时解决这个问题的全过程。虽然我编译的是 python3.10,但是对于 python3.6、python3.8 应该同样适用(打脸了,python3.8 查看这篇文章)。

解决方案

我的服务器环境是 centos7,如果是其他环境,某些命令可能用不了,自行百度一下。下面进入正题:

安装 openssl-1.1.1

  1. 下载openssl1.1.1

    wget https://www.openssl.org/source/openssl-1.1.1n.tar.gz --no-check-certificate 
    
  2. 解压

    tar -zxf openssl-1.1.1n.tar.gz 
    
  3. 进入目录

    cd openssl-1.1.1n
    
  4. 设置安装目录 可以自定义 但是要记住,后面会用到

    ./Configure --prefix=/usr/local/openssl 
    
  5. 编译并安装

    make -j && make install 
    

重新编译 python3.10

  1. 切换到 python3.10 解压目录

  2. 已经编译过的可以make clean 清理一下

  3. ./configure –prefix=/usr/local/python3 –with-openssl=/usr/local/openssl –with-openssl-rpath=auto 标粗的这个一定别漏了

  4. 编译

    make -j && make install
    
  5. 到这就安装好了,如果只是解决问题可以不往下看了。

详细过程

  1. pip3 search anyHub 看一下有没有这个库

    报错

    Caused by SSLError(“Can’t connect to HTTPS URL because the SSL module is not available.”)
    
  2. -_-||, 之前编译vim8 需要python3,装了几个版本的python3 ,但是ssl这个报错都存在,看来得先把这个解决,不然不能保证python3是完整可用的。

  3. 网上说是openssl版本对不上,升级一下openssl

    yum update -y openssl openssl-devel 
    
  4. 现在就要重新编译 python3.10 了,因为我之前试过3.8、3.6 都会报错,所以干脆就搞最新的。

  5. 编译要带编译选项,我就想看下之前编译时传了哪些参数,避免影响其他功能了,那怎么查看已经编译好的python 用了什么编译选项呢?

  6. 这里有几种方法:

    1. 展示了 python 所有环境变量,太多了,我要的是显示手动传递的编译参数,换下一个

      python3 -m sysconfig | less 
      
    2. 麻蛋 也是显示所有的

      import sysconfig
      
      print(sysconfig.get_config_vars()) 
      
    3. 终于对了,我这里就传了一个编译参数

      import sysconfig
      
      print(sysconfig.get_config_vars(“CONFIG_ARGS”)) 
      

    在这里插入图片描述

  7. 还有个准备工作应该加什么编译参数 因为我印象中我之前编译的时候,加过各种各样带有 openssl 的编译选项,但是都没啥用。例如:--with-openssl=/usr/local/openssl/lib

  8. 那怎么查看 python 支持的编译选项

    ./configure --help
    

    在这里插入图片描述

  9. 但是我并不知道这个参数是传 openssl 的什么目录网上查了一通,有人说什么都不跟,那就试一下先,结果报错如下:

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

    在这里插入图片描述

  10. 搜一下报错代码发现 with-openssl 必须赋值
    在这里插入图片描述

  11. 通过后续使用 ssldirs代码可以看出这里传递的目录应该包含以下文件:

    xxx/include/openssl/ssl.h  头文件 xxx 为 --with-openssl=xxx 中的路径信息
    
    xxx/lib/libssl.soxxx/lib/libcrypto.so 动态文件
    

    在这里插入图片描述

  12. 大致了解了传递的 path 需要具备什么样的子目录,那么就先到官网一个最新版的 openssl-3.0.0

    1. 下载

      wget https://www.openssl.org/source/openssl-3.0.2.tar.gz --no-check-certificate
      
    2. 配置

      ./Configure 
      

      报错
      在这里插入图片描述

    3. 百度解决该报错,需要安装 perl-CPAN

      yum install -y perl-CPAN
      perl -MCPAN -e shell
      cpan[1]> install IPC/Cmd.pm	
      
  13. 再次配置

    ./Configure --prefix=/usr/local/openssl 
    
  14. 编译安装

make && make install
  1. 查看安装好的文件目录发现 /usr/local/openssl 下面没有 lib 目录,只有 lib64,但是我们上面提到,该路径下必须有 xxx/lib/libssl.so ,那么我们手动 copy 出来一个

    cp -rf /usr/local/openssl/lib64 /usr/local/openssl/lib
    
  2. 重新编译 pyton3.10

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

    编译,但是报错了

    make -j  
    

在这里插入图片描述

  1. 根据报错信息分析下:(当时要是多往错误信息上面看几行就好了)

    1. 当前不能构建ssl module 那么就是3.0版本不行哦 (看完后续大家可以试试就用3.0,毕竟3.0官网说的支持到26年,1.1.1支持到23年11月份)

    2. 需要 1.1.1 或者更新 ,yum 看一下我们之前的openssl版本,果然只有1.0.2, 那么下一个 1.1.1 的来试试吧。

      在这里插入图片描述

  2. 和前面安装 openssl-3.0 步骤一样,只是链接改成 https://www.openssl.org/source/openssl-1.1.1n.tar.gz ,编译好了 openssl 1.1.1 ,再来编译python,又报错说找不到libssl.so.1.1:

    在这里插入图片描述

  3. 这次报错信息就很明确了,找不到对应的库 libssl.so.1.1。我严重怀疑之前 3.0 这里也是报的这个错误信息,大家可以自己试试。

  4. 但是我这路径下是有该文件的:

在这里插入图片描述

  1. rpath默认no,如果不手动设置为 auto, –with-openssl 选项设置了也没用,设置了再来试试。

  2. 这里插一句 可以用 make -j 加快编译,不要 make && make install, 因为这种不阻断流程错误信息,你就看不到了,我最开始就是 -_-||

    ./configure --prefix=/usr/local/python3 --with-openssl=/usr/local/openssl –with-openssl-rpath=auto
    
  3. 编译成功,至少这次没有刚才的关于 openssl 的错误信息了,现在 make Install 安装

    在这里插入图片描述

  4. 使用新的pip3 再来搜索anyHub ,又有报错,不过已经不是 openssl 引发的了:

    在这里插入图片描述

  5. 百度了下发现是要安装 pip_search 包,pip3 install pip_search 安装下包

  6. pip_search anyHub 报错:找不到命令

在这里插入图片描述

  1. 因为没有把 /usr/local/python3/bin 加到path里面,所以只能显示调用安装位置的 pip_search 程序,到这里为止,带openssl 模块的 python3.10 可以确认是安装好了

结语

耐心看手册,细心看日志,可以少走一些弯路。


yangxiluo

centOS7离线安装python3.10运行环境

一_二

CentOS 7 安装 Python 3.10

tobybo

Caused by SSLError(“Can‘t connect to HTTPS URL because the SSL module is not available.“) 详解

yangxiluo

python3安装pip install报错Could not fetch URL https://pypi.org/simple/pip/: There was a problem confirm

原文地址:https://blog.csdn.net/weixin_54626591/article/details/134413650

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_11209.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注