当装好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软连接 - 知乎文章来源:https://www.toymoban.com/news/detail-816182.html
8、linux安装和卸载python3_悠悠-我心的博客-CSDN博客_linux卸载python3文章来源地址https://www.toymoban.com/news/detail-816182.html
到了这里,关于Centos安装python3导入ssl时解决 ModuleNotFoundError: No module named ‘_ssl‘问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!