Centos安装python3导入ssl时解决 ModuleNotFoundError: No module named ‘_ssl‘问题

2023-11-07

当装好python3导入ssl模块时报以下错误: ModuleNotFoundError: No module named '_ssl'

import _ssl # if we can't import it, let the error propagate ImportError: No module named _ssl


参考试了好多文章,发现都不太好使,最终找到了解决方案,安装openssl的依赖

解决办法:

centos安装python3.7时,查阅知需要的openssl版本最低为1.0.2,但是centos 默认的为1.0.1,所以需要重新更新openssl

一、安装依赖库:

如果有网,直接在线安装依赖库,如果部署环境没网,可以参考最后一节,五、注1:openssl或nginx离线依赖安装过程

yum install -y zlib zlib-dev openssl-devel sqlite-devel bzip2-devel libffi libffi-devel gcc gcc-c++

二、安装新版本的openssl

注意!openssl配置是用config,而不是configure,另外openssl编译安装依赖zlib动态库,所以一定要shared zlib 自行到官网查阅最新版本~

1、openssl安装包官网下载地址:

http://www.openssl.org/source/

也可在该文章最后面一节内容,注1:步骤中所述下载到openssl1.0.2版本,可以满足Centos7.8环境。

wget http://www.openssl.org/source/openssl-1.1.1.tar.gz            (如果有网就可以直接下载,没网就需要单独下载安装包通过终端工具从windows上传到centos中)

tar -zxvf openssl-1.0.2k.tar.gz                                                ( 解压对应版本安装包)

cd openssl-1.0.2k                                                                (进入对应的解压目录)

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

 (prefix为配置安装目录,shared zlib 安装依赖库)这一步最重要,一定要shared

make && make install                                                         (编译、安装)


2、设置环境变量LD_LIBRARY_PATH(一般用户环境变量即可生效,二选一即可)

        这一步一定要有!!LD_LIBRARY_PATH环境变量主要用于指定查找共享库(动态链接库)时除了默认路径之外的其他路径。当执行函数动态链接.so时,如果此文件不在缺省目录下‘/lib' and ‘/usr/lib',那么就需要指定环境变量LD_LIBRARY_PATH

(1)用户环境变量:

echo "export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/openssl/lib" >> /usr/local/.bash_profile     (在用户环境变量文件中添加openssl的环境变量)

source /usr/local/.bash_profile                        (重新加载该路径下的用户环境变量文件)

注:在实际服务器上应用过程中发现,该环境变量只会当前shell脚本生效,如果下次重新进入shell脚本会失效,故如果嫌麻烦每次启动服务都要用的话,可直接设置到path环境变量中。(该步涉及到Centos系统使用习惯,一般程序环境变量设置入用户变量即可,path专门保存系统变量,但一般用户环境变量会失效,放入path会全局生效)。

(2)系统环境变量:

如果选择将其设置为全局的在path系统环境变量中设置命令如下:

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

(在系统环境变量文件中添加openssl的环境变量)

source /etc/profile                                    (重新加载该路径下的系统环境变量文件)


三、解压python3.7,并安装,一定要指定刚才安装的1.1.1版本的openssl!!!

tar -zxvf Python-3.7.0.tgz                                                                        (解压安装包)

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

    (配置安装目录,指定openssl环境的安装目录)

make && make install                                                                                (编译、安装)

四、至此python3.7就安装完了,来检验下ssl模块能否被导入吧:

1、创建python软连接

ln -s /usr/local/python3/bin/pip3  /usr/bin/pip        

  (pip命令行调用指向pip3)

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

  (python命令行调用指向python3,如果同时安装有其他版本python可通过该命令指定用到的python版本)

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

  (python3命令行调用指向python3,由于某些程序执行时要求是python3命令调用,该步可根据需要进行设置)

python --version                                                   

 查看当前python安装版 

 2、导入ssl模块

python3                      (进入python3命令行)

import ssl                        (导入ssl模块)

import _ssl                        (导入_ssl模块)

exit()                                        (退出python3命令行)

3、查看pyhon的软链接指向。

以上Centos安装python3导入ssl时解决 ModuleNotFoundError: No module named '_ssl'问题的全部解决过程!!!


五、注1:openssl或nginx离线安装依赖库(没网可离线,也可在线):

第(1)步在线安装和第(2)步离线安装,二选一安装即可。

(1)如果是在线安装直接用yum命令就可以安装,依赖安装成功即可。

yum install -y zlib zlib-dev openssl-devel sqlite-devel bzip2-devel libffi libffi-devel gcc gcc-c++

(2)如果是离线安装直接下载下面这个我传到百度云上的安装依赖包就可以,里面有依赖包和openssl1.0.2版本。

该离线包同样可以用于nginx离线安装环境依赖。

安装包下载方式:百度云、CSDN、openssl官网均可。

A、链接:https://pan.baidu.com/s/1mdwddtYEo-_qr3OUmBtxMw 
提取码:qy2k

B、CSDN下载资源,已设置免积分下载

Linux系统centos7环境下安装openssl1.0.2所需安装包及nginx离线安装所需全部依赖包,均可使用-Linux文档类资源-CSDN文库

C、最新版openssl安装包也可在openssl官网下载。

/source/index.htmlhttps://www.openssl.org/source/

(3)依赖包解压如下: 

具体打开文件夹如下:

 安装命令如下:

rpm -ivh   xxxx.rpm        --nodeps

命令含义注释:rpm -ivh (rpm包的安装命令),--nodeps 跳过环境依赖

例如:

rpm -ivh openssl-devel-1.0.2k-19.el7.x86_64.rpm --nodeps

 ---------------------------------------------------------以下无正文------------------------------------------------------

注:仅供学习,记录问题和参考,共勉!

参考文章:

1、centos 解决python3.7 安装时No module named _ssl - 小小日常 - 博客园

2、​​​​​​关于服务器上安装新版Python报错的问题_Ricardo5566的博客-CSDN博客​​​​​​

3、python3虚拟环境中解决 ModuleNotFoundError: No module named '_ssl'_北极冰熊的博客-CSDN博客​​​​​​ ​​​​​​

4、CentOS7设置环境变量_C语言实战技术的博客-CSDN博客

5、configure --prefix=/的作用和用法_今天也是橙汁的博客-CSDN博客

6、Linux ./configure --prefix 命令是什么意思?

7、Linux更改python软连接 - 知乎

8、linux安装和卸载python3_悠悠-我心的博客-CSDN博客_linux卸载python3

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Centos安装python3导入ssl时解决 ModuleNotFoundError: No module named ‘_ssl‘问题 的相关文章

  • 如何授予 apache 使用 NTFS 分区上的目录的权限?

    我在一台带有 20GB 硬盘的旧机器上运行 Linux Lubutu 12 10 我有一个 1 TB 外部硬盘 上面有一个 NTFS 分区 在该分区上 有一个 www 目录 用于保存我的网页内容 它在启动时自动安装为 media t515
  • 为什么我可以直接从 bash 执行 JAR?

    我是一个长期从事 Java 工作的人 并且知道运行带有主类的 JAR 的方法MANIFEST MFJar 中的文件很简单 java jar theJar jar 我用它来启动 Fabric3 服务器 包含在bin server jar在其标
  • SSE:跨页边界的未对齐加载和存储

    我在页面边界旁边执行未对齐加载或存储之前读过某处 例如使用 mm loadu si128 mm storeu si128内在函数 代码应首先检查整个向量 在本例中为 16 个字节 是否属于同一页 如果不属于同一页 则切换到非向量指令 我知道
  • 将 jar 作为 Linux 服务运行 - init.d 脚本在启动应用程序时卡住

    我目前正在致力于在 Linux VM 上实现一个可运行的 jar 作为后台服务 我已经使用了找到的例子here https gist github com shirish4you 5089019作为工作的基础 并将 start 方法修改为
  • 在我的 index.php 中加载 CSS 和 JS 等资源时出现错误 403

    我使用的是 Linux Elementary OS 并在 opt 中安装了 lampp My CSS and JS won t load When I inspect my page through browser The console
  • docker容器大小远大于实际大小

    我正在尝试从中构建图像debian latest 构建后 报告的图像虚拟大小来自docker images命令为 1 917 GB 我登录查看尺寸 du sh 大小为 573 MB 我很确定这么大的尺寸通常是不可能的 这里发生了什么 如何获
  • jq中如何分组?

    这是 json 文档 name bucket1 clusterName cluster1 name bucket2 clusterName cluster1 name bucket3 clusterName cluster2 name bu
  • 如何确保应用程序在 Linux 上持续运行

    我试图确保脚本在开发服务器上保持运行 它会整理统计数据并提供网络服务 因此它应该会持续存在 但一天中有几次 它会因未知原因而消失 当我们注意到时 我们只需再次启动它 但这很麻烦 并且某些用户没有权限 或专有技术 来启动它 作为一名程序员 我
  • 删除 Git 存储库,但保留所有文件

    在我使用 Linux 的过程中的某个时刻 我决定将我的主目录中的所有内容都放入源代码管理中是个好主意 我不是在问这是否是一个好主意 我是在问如何撤销它 删除存储库的原因是我最近安装了 Oh My Zsh 而且我非常喜欢它 问题是我的主目录有
  • 如何在基于 Linux 的系统上的 C 程序中使用 mqueue?

    如何在基于 Linux 的系统上的 C 程序中使用 mqueue 消息队列 我正在寻找一些好的代码示例 可以展示如何以正确且正确的方式完成此操作 也许是一个操作指南 下面是一个服务器的简单示例 该服务器接收来自客户端的消息 直到收到告诉其停
  • 在两次之间每分钟执行一次 Cronjob

    我需要在 crontab 中每分钟运行一个 bash 脚本8 45am and 9 50am每天的 Code 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 8 home pull sh gt ho
  • 监视目录的更改

    很像一个类似的问题 https stackoverflow com questions 112276 directory modification monitoring 我正在尝试监视 Linux 机器上的目录以添加新文件 并希望在这些新文
  • 如果在等待“read -s”时中断,在子进程中运行 bash 会破坏 tty 的标准输出吗?

    正如 Bakuriu 在评论中指出的那样 这基本上与BASH 输入期间按 Ctrl C 会中断当前终端 https stackoverflow com questions 31808863 bash ctrlc during input b
  • 子目录中的头文件(例如 gtk/gtk.h 与 gtk-2.0/gtk/gtk.h)

    我正在尝试使用 GTK 构建一个 hello world 其中包括以下行 include
  • FormsAuthentication:安全吗?

    Using 表单验证构建成asp net创建一个为经过身份验证的用户创建 cookie 的登录系统非常快速且简单 FormsAuthentication SetAuthCookie uniqueUsername false 与中的一些代码配
  • 如何在c linux中收听特定接口上的广播?

    我目前可以通过执行以下操作来收听我编写的简单广播服务器 仅广播 hello int fd socket PF INET SOCK DGRAM 0 struct sockaddr in addr memset addr 0 sizeof ad
  • SSLHandshakeException:证书中的主机名不匹配

    我正在编写一个系统 必须向具有自签名证书的服务器 一个名为 ARX 的第三方程序 当前在开发过程中在本地主机上运行 进行多部分发布 我试图找到它的证书 但只能找到三个不同的jks文件 服务器 jks 服务器信任 jks and 服务器ca
  • 如何构建任务“gems:install”

    我正在将 Rails 应用程序部署到 Linux 服务器 并且缺少一些 rake 任务 包括 rake gems install 和 rake db 我正在运行来自 GEM 的 Rails 2 3 4 为什么是这样 我该如何解决 我可以以某
  • 如何使用httplib2进行相互证书认证

    我正在使用 httplib2 从我的服务器向另一个 Web 服务发出请求 我们想要使用相互证书身份验证 我了解如何使用证书进行传出连接 h set certificate 但是如何检查应答服务器使用的证书 这张票 http code goo
  • 如何配置 nginx 重写规则以使 CakePHP 在 CentOS 上运行?

    大家好 请帮帮我 我正在尝试在运行 Nginx 和 Fact CGI 的 Centos 服务器上设置 cakephp 环境 我已经在服务器上运行了一个 WordPress 站点和一个 phpmyadmin 站点 因此我已经正确配置了 PHP

随机推荐