HTTPSHandler SSL Error

news2024/9/21 22:54:08

我在服务器ubuntu中,尝试使用pip3,但是出现下面的报错

ImportError: cannot import name 'HTTPSHandler'

通过查询资料,发现报错的原因是,该pip3.5中没有安装好openssl. 我尝试在python3.5中使用import ssl, 确实是会显示下面的报错信息

 然后我尝试安装SSL module,我之前在本地是安装过,应该还是比较容易,但是在服务器中却是各种方法都不有效。

尝试1:

首先,我检测服务器中是否有openssl。显示了版本信息,这个可能是在安装服务器的时候就自带了,或者其他人在使用服务器的时候可以用。

$ openssl version
OpenSSL 1.1.1g  21 Apr 2020

然后我尝试了在python2.7和python3.6中,导入import ssl都不会报错。这两个应该是ubuntu安装的时候自带的两个python版本。

然后我尝试了下面的方法,因为服务器中有openssl,而且是我可以接受的版本,我不需要重新下载,因此可能是像下面文章说的那样,是在安装python3.5的时候没有设置ssl

【下面是他文章的解释】

本人查阅资料发现,在./configure过程中,如果没有加上–with-ssl参数时,默认安装的软件涉及到ssl的功能不可用,刚好pip3过程需要ssl模块,而由于没有指定,所以该功能不可用。

  解决办法是重新对python3.6进行编译安装,用一下过程来实现编译安装:

cd Python-3.6.2
./configure --with-ssl
make
sudo make install

python3中pip3安装出错,找不到SSL_玩人的博客-CSDN博客_pip3 ssl问题

但是我尝试了一下,并没有成功,报错信息如下:


Python build finished successfully!
The necessary bits to build these optional modules were not found:
_dbm                  _tkinter
To find the necessary bits, look in setup.py in detect_modules() for the module's name.


Failed to build these modules:
_hashlib              _ssl




.....


rm /usr/local/lib/python3.5/lib-dynload/_sysconfigdata.py
rm -r /usr/local/lib/python3.5/lib-dynload/__pycache__
/usr/bin/install -c -m 644 ./Misc/python.man \
        /usr/local/share/man/man1/python3.5.1
if test -f /usr/local/bin/python3 -o -h /usr/local/bin/python3; \
then rm -f /usr/local/bin/python3; \
else true; \
fi
(cd /usr/local/bin; ln -s python3.5 python3)
if test "3.5" != "3.5m"; then \
        rm -f /usr/local/bin/python3.5-config; \
        (cd /usr/local/bin; ln -s python3.5m-config python3.5-config); \
        rm -f /usr/local/lib/pkgconfig/python-3.5m.pc; \
        (cd /usr/local/lib/pkgconfig; ln -s python-3.5.pc python-3.5m.pc); \
fi
rm -f /usr/local/bin/python3-config
(cd /usr/local/bin; ln -s python3.5-config python3-config)
rm -f /usr/local/lib/pkgconfig/python3.pc
(cd /usr/local/lib/pkgconfig; ln -s python-3.5.pc python3.pc)
rm -f /usr/local/bin/idle3
(cd /usr/local/bin; ln -s idle3.5 idle3)
rm -f /usr/local/bin/pydoc3
(cd /usr/local/bin; ln -s pydoc3.5 pydoc3)
rm -f /usr/local/bin/2to3
(cd /usr/local/bin; ln -s 2to3-3.5 2to3)
rm -f /usr/local/bin/pyvenv
(cd /usr/local/bin; ln -s pyvenv-3.5 pyvenv)
if test "x" != "x" ; then \
        rm -f /usr/local/bin/python3-32; \
        (cd /usr/local/bin; ln -s python3.5-32 python3-32) \
fi
rm -f /usr/local/share/man/man1/python3.1
(cd /usr/local/share/man/man1; ln -s python3.5.1 python3.1)
if test "xupgrade" != "xno"  ; then \
        case upgrade in \
                upgrade) ensurepip="--upgrade" ;; \
                install|*) ensurepip="" ;; \
        esac; \
         ./python -E -m ensurepip \
                $ensurepip --root=/ ; \
fi
Ignoring ensurepip failure: pip 7.1.2 requires SSL/TLS

因此可以发现,有一些module是无法安装的,其中就包括SSL。

然后我查了一下,python3.6应该是自带SSL,因此只需要在配置时,加上ssl就好了,也就是下面这个代码的作用:./configure --with-ssl。但是3.6和3.5是有区别的,在python3.5中ssl的部分是注解掉的,这也就是我尝试的第二个办法

尝试二:

我修改了python3.5配置文件关于ssl的部分,可以参考文章,具体来说就是修改了这里。【我不知道为什么他是3.6以上,没有尝试使用第一种方法】。但是3.5的也是修改这里。

PS: 我在很多文章里面,他们只修改了第一步,二没有修改.py文件,这次我尝试修改了两个文件

1.修改setup.dist

# 进入python3.6.5源码路径
cd /usr/bin/python3.6.5
# 修改setup.py文件
sido vim Modules/Setup.dist
 
# 修改结果如下:
# Socket module helper for SSL support; you must comment out the other
# socket line above, and possibly edit the SSL variable:
SSL=/usr/lib/ssl            # 你的ssl文件位置
_ssl _ssl.c \
        -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
        -L$(SSL)/lib -lssl -lcrypto

2.修改setup.py文件

# 修改setup.py文件

sudo vim setup.py
 
# 修改后结果如下 
# Detect SSL support for the socket module (via _ssl)
        search_for_ssl_incs_in = [
                              '/usr/local/ssl/include',
                              '/usr/contrib/ssl/include/openssl''
                             ]


3. 重新编译安装

sudo ./configure --enable-optimizations
sudo make -j 2

python3中pip3安装出错,找不到SSL_玩人的博客-CSDN博客_pip3 ssl问题python编译安装后ssl模块无法调用_SitVen的博客-CSDN博客

虽然我全部进行了修改,但是还是在安装python3.5的时候,显示ssl模块无法安装。

尝试3:

我以为是.so文件出现了问题,因此在可以使用ssl的python3.9中拷贝了该文件,并发到了3.5中,并修改了名称。但是没有成功,我猜测的原因是:第一不兼容,第二不是单纯的文件丢失,因此补充好文件是没有用的,因此根本没有进行安装。因此该方法适用于文件丢失的,当然可以从其他服务器进行拷贝,从本地其他版本的python库拷贝可能没用,因此我不是文件丢失,我也没有其他服务器可以用,因此我没有继续任何尝试了。

copy _ssl.cpython-35-x86_64-linux-gnu.so from python3.9 to python3.5 and rename it. 

参考: python - pip raises ImportError: cannot import name HTTPSHandler - Ask Ubuntu

尝试4:

直接重新安装一个版本,直接安装一个最新版本给python3.5就好了。就是安装openssl以及库libssl,

sudo apt-get install openssl
sudo apt-get install libssl-dev
sudo apt-get install bless

这些代码可以成功运行,并不会报错,甚至显示没有任何可以更新的内容。结果如下:

 但是我测试的时候,在导入import ssl,还是失败的。

参考:Ubuntu安装OpenSSL-良许Linux教程网

失败原因猜测:因为服务器存在多个版本的python,是否在使用apt-get的时候将ssl安装到了其他python版本中,或者其他路径下?

因此我去查了一下,apt-get的默认安装路径,在多个路径下。具体如下:

/var/cache/apt/archives

ubuntu 默认的PATH为

PATH=/home/brightman/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

apt-get install安装目录是包的维护者确定的,不是用户

$ dpkg -L packagename、

dpkg -L +软件包的名字,可以知道这个软件包包含了哪些文件, 这个方法可以列出所有安装后留在系统里的文件

参考:ubuntu中apt-get的默认安装路径。安装、卸载以及查看的方法总结_ifwantwill的博客-CSDN博客_apt list 路径

=> 因此我去查了下openssl确实在 /usr/bin和/usr/local/bin中都有,因此不是第一个问题的原因,因为我自己安装的python是在local那里,默认自带的python是在第一个路径下。为什么后面的路径下会存在一个openssl,可能是因为在之前有人使用和安装python3.9的时候,安装的。

除了该问题,我还有一个困惑,就是服务器是否只需要一个openssl,无论存在多少个python版本,这个问题还没有解决, 如果只需要一个,那么就是python和openssl链接的问题,如果每个python都需要,那么才需要下载和再安装。

我没有找到明确的答案,但是我认为是只需要一个,因为如果我们认为该版本需要升级,那么并不是针对哪个python路径执行,只需要向下面文章一样,手动或者自动的下载一个openssl资源,然后进行安装,如果需要两个版本进行切换,可以进行软链接。但是在链接的时候并没有任何指令是针对python版本。

参考:Ubuntu18.04安装Openssl-1.1.1 - osc_6oerel1o的个人空间 - OSCHINA - 中文开源技术交流社区

尝试5:

使用brew进行更新,其实就是更新下openssl,然后重新编译下python3.5(所需要的版本)就好了。但是由于我使用的服务器的brew 在安装的时候会有2个error,也就是在使用brew更新openssl的时候的指令会报错,但是这令个代码的错误在网上没有任何的信息,所以没有继续尝试该方法。

参考:python - ImportError: cannot import name HTTPSHandler using PIP - Stack Overflow

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/343313.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

推广传单制作工具

临近节日如何制作推广活动呢?没有素材制作满减活动宣传单怎么办?小编教你如何使用在线设计工具乔拓云,轻松设计商品的专属满减活动宣传单,不仅设计简单,还能自动生成活动分享链接,只需跟着小编下面的设计步…

动态规划,这将是你见过最详细的讲解

文章目录一、为什么要讲动态规划呢?二、什么是动态规划三、感受一下递归算法、备忘录算法、动态规划递归算法带备忘录的递归解法(自定向下)自底向上的动态规划四、动态规划的解题套路1. 穷举分析2. 确定边界3. 确定最优子结构4. 写出状态转移…

sql 优化

sql 优化1. mysql 基础架构1.1 mysql 的组成2. mysql 存储引擎2.1MyISAM2.2 InnoDB2.3 MyISAM 和 InnoDB 的对比3. mysql 索引3.1 Hash 索引3.2 B-Tree 索引3.3 BTree 索引3.4 R-Tree 索引3.5 Full-Text 索引4. sql 优化4.1 避免 select *4.2 避免在where子句中使用or来连接条件…

PTA L1-046 整除光棍(详解)

前言:内容包括四大模块:题目,代码实现,大致思路,代码解读 题目: 这里所谓的“光棍”,并不是指单身汪啦~ 说的是全部由1组成的数字,比如1、11、111、1111等。传说任何一个光棍都能被…

【数据库】sql函数和多表关联查询

目录 一,SQL函数 1,聚合函数 1, count函数 2, AVG函数 3, SUM函数 4, MAX函数 5, MIN函数 6,数据分组——GROUP BY 7,限定组的结果,HAVING 8&#x…

在线支付系列【23】支付宝开放平台产品介绍

有道无术,术尚可求,有术无道,止于术。 文章目录前言支付产品App 支付手机网站支付电脑网站支付新当面资金授权当面付营销产品营销活动送红包会员产品App 支付宝登录人脸认证信用产品芝麻 GO芝麻先享芝麻免押芝麻工作证安全产品交易安全防护其…

Centos7上Docker安装

文章目录1.Docker常识2.安装Docker1.卸载旧版本Docker2.安装Docker3.启动Docker4.配置镜像加速前天开学啦~所以可以回来继续卷了哈哈哈,放假在家效率不高,在学校事情也少点(^_−)☆昨天和今天学了学Docker相关的知识,也算是简单了解了下&…

设计模式C++实现12:抽象工厂模式

参考大话设计模式; 详细内容参见大话设计模式一书第十五章,该书使用C#实现,本实验通过C语言实现。 抽象工厂模式(Abstract Factory),提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们…

Python之字符串精讲(下)

前言 今天继续讲解字符串下半部分,内容包括字符串的检索、大小写转换、去除字符串中空格和特殊字符。 一、检索字符串 在Python中,字符串对象提供了很多用于字符串查找的方法,主要给大家介绍以下几种方法。 1. count() 方法 count() 方法…

CHAPTER 5 Jenkins SonarQube

Jenkins & SonarQube5.1 安装SonarQube1. 下载镜像2. 导出到其他服务器3. 准备工作4. docker-compose文件5. 启动容器5.2 登录SonarQube1.登录2. 安装中文语言插件3. 安装其他插件5.3 部署扫描器sonar-scanner1. 部署sonar-scanner2. 新建项目3. 扫描代码4. 查看报告5.4 Je…

Prometheus 的介绍和安装

介绍 Prometheus 是一个开源的监控和报警系统,最初由SoundCloud于2012年创建,随着越来越多的公司采用Prometheus以及非常活跃的社区,Prometheus于2016年加入云原生基金会,成为Kubernetes之后的第二个托管项目,并于2018年毕业。 特点 通过PromQL来对基于指标名称和键值对…

独立产品灵感周刊 DecoHack #047 - 安卓手机上最有用的APP

本周刊记录有趣好玩的独立产品设计开发相关内容,每周发布,往期内容同样精彩,感兴趣的伙伴可以点击订阅我的周刊。为保证每期都能收到,建议邮件订阅。欢迎通过 Twitter 私信推荐或投稿。💻 产品推荐 1. Bouncer Tempor…

算法训练营 day45 动态规划 0-1背包理论 分割等和子集

算法训练营 day45 动态规划 0-1背包理论 分割等和子集 0-1背包理论 有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。 在下面的讲解中&…

python 使用 thrift 教程

一、前言:   Thrift 是一种接口描述语言和二进制通信协议。以前也没接触过,最近有个项目需要建立自动化测试,这个项目之间的微服务都是通过 Thrift 进行通信的,然后写自动化脚本之前研究了一下。 需要定义一个xxx.thrift的文件&…

【C++】十分钟带你入门C++

目录零 内容概括一 C关键字二 命名空间2.1 命名空间定义2.2 命名空间的使用三 C输入和输出四 缺省参数4.1 缺省参数的概念4.2 缺省参数分类五 函数重载5.1 函数重载的概念六 引用6.1 引用概念6.2 引用特性6.3 常引用6.4 使用场景6.5 效率比较6.6 引用和指针的区别七 内联函数7.…

最简易的教程 -一篇文章教会你 用Python打包文件

前言 嗨嗨,好久不见,我是 我叫 … emmm你们好 我是一堆英文字母(名字乱打的不好yi shi ~) 看到文章的人多不多,我不知道 ,招呼我还是要打一个的 👍 今天文章很简单,打包改图标 用…

C++关键字之const、inline、static

C 关键字总结 1.const const是 constant 的缩写,本意是不变的、不易改变的意思。在C中用来修饰内置类型变量,自定义对象,成员函数,返回值,函数参数使用如下: //修饰普通类型变量 const int a 7; int ba;…

人工智能对教育的冲击有多大?

人工智能对教育有巨大冲击 高考改革也会发生重大变化 教育系统其实是一个坚固的堡垒 再坚固也要适应未来 趣讲大白话:让我未来更有竞争力 *********** 创造和创新的意识和能力 复杂性和不确定性的适应能力 应该是改革的方向 【安志强趣讲信息科技】74期 掌握信息科…

【人工智能】对贝叶斯网络进行吉布斯采样

问题 现要求通过吉布斯采样方法,利用该网络进行概率推理(计算 P(RT|SF, WT)、P2(CF|WT)的概率值)。 原理 吉布斯采样的核心思想为一维一维地进行采样,采某一个维度的时候固定其他的维度,在本次实验中,假…

分享开放通达信l2接口的过程,开发之后怎么使用?

随着互联网的不断进步,信息技术的不断发展,通达信l2接口技术逐步成熟。那么,这些开放通达信l2接口开发的过程是怎么样的呢?期间又会遇到什么问题,开放之后又会怎么使用呢?这篇文章带你深入了解。 通达信l2接口不像一…