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

Posted 乞力马扎罗の黎明

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Centos安装python3导入ssl时解决 ModuleNotFoundError: No module named ‘_ssl‘问题相关的知识,希望对你有一定的参考价值。

当装好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

Censos6安装python37并解决ssl

原地址:https://www.jianshu.com/p/3ec24f563b81

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

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

安装依赖库

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

安装openssl

# 注意:openssl编译的时候,需要bzip2库,并且版本要匹配
wget http://www.openssl.org/source/openssl-1.1.1.tar.gz
tar -zxvf openssl-1.1.1.tar.gz
cd openssl-1.1.1
./config --prefix=$HOME/openssl shared zlib
make && make install

设置环境变量LD_LIBRARY_PATH

echo "export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/openssl/lib" >> $HOME/.bash_profile
source $HOME/.bash_profile
这一步一定要有!!LD_LIBRARY_PATH环境变量主要用于指定查找共享库(动态链接库)时除了默认路径之外的其他路径。当执行函数动态链接.so时,如果此文件不在缺省目录下‘/lib‘ and ‘/usr/lib‘,那么就需要指定环境变量LD_LIBRARY_PATH
解压python3.7,并安装,一定要指定刚才安装的1.1.1版本的openssl!!!
tar -zxvf Python-3.7.0.tgz
./configure --prefix=$HOME/Py37 --with-openssl=$HOME/openssl
make && make install
echo $HOME

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

[root@izbp12am8wqrn7t6wzgmydz Python-3.7.0]# echo $HOME
/root
[root@izbp12am8wqrn7t6wzgmydz Python-3.7.0]# cd /root/Py37/
[root@izbp12am8wqrn7t6wzgmydz bin]# ./python3
Python 3.7.0 (default, Sep 16 2018, 14:12:43)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-23)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import ssl
>>> import _ssl
>>>

查看源python的路径

whereis python
需要更新软链接

 




以上是关于Centos安装python3导入ssl时解决 ModuleNotFoundError: No module named ‘_ssl‘问题的主要内容,如果未能解决你的问题,请参考以下文章

Censos6安装python37并解决ssl

Python3中无法导入ssl模块的解决办法

PythonCentOs7 Python3安装Openssl以及解决ssl问题

python3.7 ImportError: No module named _ssl 解决方法

centos 安装python3与Python2并存,并解决"smtplib" object has no attribute 'SMTP_SSL'的错误

centos6.8安装python3.7.3报错Can't connect to HTTPS URL because the SSL module is not available问题解决