【报错记录】遇到openssl和hashlib报错,报错 ImportError: No module named _ssl 或 ValueError:unsupported hash type

最近在离线的服务器上部署MrDoc的项目,项目是以 Django 开发的 知识管理系统,属于开源项目目前还在持续维护中,期望打造以python为基础语言的企业知识管理系统,类似于市场上的 wiki 等

部署时,因为服务器是离线状态,所有的包都需要手动编译安装,于是在安装了python3.6.4 和 一些依赖包后 ,启动项目,

先报了一个这个错误:

ImportError: No module named _ssl 

【分析原因】出现此错误是python的基础包没有安装好,需要重新安装openssl后,再重新编译安装python

经过百度和论坛查找后发现 是因为 openssl 模块的问题,于是找到以下几种解决方案,实测有效:

https://blog.csdn.net/onebigday/article/details/104672350

https://www.cnblogs.com/mqxs/p/9103031.html

https://blog.csdn.net/xiemanR/article/details/85224509

https://blog.csdn.net/qq_33811662/article/details/80224060

--------------------------------------------我是分隔线,以下是原文---------------------------------------------------------------

笔者在 centos6.5 安装 python3.7 碰到此问题,安装好以后,执行 python3.7 命令行,import ssl 出现错误 ImportError: No module named _ssl 。 该错误表现在 pip install 时会报 pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.

在网上找了很多资料,经过验证,在编译前修改 python 源码的方式(Modules/Setup.dist)是不奏效的。 升级 openssl 到 1.1.x之后的版本是有效的。

解决步骤如下:

一、下载 openssl 编译安装

openssl 官方下载地址:https://www.openssl.org/source/

我当时安装的版本是: openssl-1.1.1c

 

  1.  

  2. tar xf openssl-1.1.1c.tar.gz

  3. cd openssl-1.1.1c

  4. ./config --prefix=/usr/local/openssl-1.1.1c

  5. make

  6. make install

二、配置 openssl 共享库

 

  1. '''新建文件'''

  2. vim /etc/ld.so.conf.d/openssl.conf

  3.  

  4. '''填入如下内容'''

  5. /usr/local/openssl-1.1.1c/lib/

  6.  

  7. '''保存'''

  8.  

  9. '''更新共享库'''

  10. ldconfig

  11.  

  12. '''检验 openssl-1.1.1 是否已加入共享库'''

  13. ldconfig -v | grep ssl

  14.  

  15. /usr/local/openssl-1.1.1c/lib:

  16. libssl.so.1.1 -> libssl.so.1.1 '''有这个表示加成功了'''

  17. libssl3.so -> libssl3.so

  18. libssl.so.10 -> libssl.so.1.0.1e

三、安装 python3.7

  1. cd /usr/local/python3.7/

  2. ./configure --prefix=/usr/local/python3.7 --with-openssl=/usr/local/openssl-1.1.1c

  3. make && make install

【以上解决思路是对的,只是在具体操作上有些区别】

 

------------------------------------------------------------------------------------------------------------------------

 

 

后来在运行中又报了以下错误:

ValueError : unsupported hash type

【分析原因】hashlib包太旧支持的类型不够,而安装python时,也没有将新的hashlib库关联过来;

通过查找发现 hashlib 是openssl相关的方法,也就是说是openssl安装的有问题导致的,据我推测应该是版本不匹配吧,但是最终也没找到根本问题,但是搜集几个解决办法如下,感觉思路是正确的,但是没有成功:

https://blog.csdn.net/yihui8/article/details/22163351

https://stackoverflow.com/questions/11433108/unsupported-hash-type-when-installing-plone

 

【总结】以上这些问题在联网下一般不会出现,因为联网安装 会自动匹配最合适的依赖,不会产生手动安装不匹配的问题;

 


【最终解决方案】

当以上方法解决均无效时,重新起看了一下python官网,突然发现:

Python 3.7.4 发布,内置的 OpenSSL 已升级至 1.1.1

也就是说,我最终的解决目的就是将python关联的openssl版本提升至1.1.1来支持更多的哈希类型

https://www.oschina.net/news/108148/python-3-7-4-eleased

------------------------------------------------------------------------------------------------------------------------------

Python 3.7.4 已发布,这是 3.7 系列的第四个也是最新的维护版本。Python 3.7 同时也是 Python 最新的主要版本,包含许多新功能和优化,详细内容请点此查看

3.7.4 主要变化如下

面向 Windows 用户

  • OpenSSL 已从 1.1.0 升级至 1.1.1,SQLite 也已升级至 3.28.0
  • 面向 AMD64 设备的二进制文件也适用于实现了 Intel 64 架构的处理器。(也被称为"x64"架构,曾被称为"EM64T"和"x86-64")
  • 现已面向 Windows 平台提供基于 Web 的安装程序,安装程序会在安装时下载所需的组件
  • ……

面向 macOS 用户

  • OpenSSL 已从 1.1.0 升级至 1.1.1,SQLite 也已升级至 3.28.0
  • 对于 Python 3.7.4,官方提供了两个二进制安装包供选择下载。默认变体仅提供 64 位版本,并运行在 macOS 10.9 及更高的版本上
  • 两个 python.org 安装程序变体均包含私有的 OpenSSL 副本。请仔细阅读安装期间显示的重要信息,以获取有关 SSL/TLS 证书认证和 Install Certificates.command 的信息

点此查看完整更新日志

相关链接


于是我下载了 python3.7.7.tar.xz     在服务器上编译安装后,不再出现 以上2个问题!!!

总的来说还是对linux不熟悉,导致一些操作事与愿违,有待加强学习

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值