首页 > 编程语言 >Python 安装依赖包,出现 ssl.SSLCertVerificationError 的问题,解决方法

Python 安装依赖包,出现 ssl.SSLCertVerificationError 的问题,解决方法

时间:2023-06-21 17:34:09浏览次数:49  
标签:10 lib 0.8 Python SSLCertVerificationError py ssl local python3.8

问题描述

CentOS7环境,已安装 Python3.8.10。

最近项目开发,需要切换 solidity 版本,参考开发文档,需要执行如下命令

pip install solc-select==0.2.0

# 安装指定版本solc
solc-select install <solc版本号>

# 切换solc版本
solc-select use <solc版本号>

先使用 pip install solc-select==0.2.0 命令成功安装了 solc-select,然后执行 solc-select install 查看有哪些可用的 solc 版本,遇到如下问题:

$ solc-select install
Available versions to install:
Traceback (most recent call last):
  File "/usr/local/python3/python3.8.10/lib/python3.8/urllib/request.py", line 1354, in do_open
    h.request(req.get_method(), req.selector, req.data, headers,
  File "/usr/local/python3/python3.8.10/lib/python3.8/http/client.py", line 1252, in request
    self._send_request(method, url, body, headers, encode_chunked)
  File "/usr/local/python3/python3.8.10/lib/python3.8/http/client.py", line 1298, in _send_request
    self.endheaders(body, encode_chunked=encode_chunked)
  File "/usr/local/python3/python3.8.10/lib/python3.8/http/client.py", line 1247, in endheaders
    self._send_output(message_body, encode_chunked=encode_chunked)
  File "/usr/local/python3/python3.8.10/lib/python3.8/http/client.py", line 1007, in _send_output
    self.send(msg)
  File "/usr/local/python3/python3.8.10/lib/python3.8/http/client.py", line 947, in send
    self.connect()
  File "/usr/local/python3/python3.8.10/lib/python3.8/http/client.py", line 1421, in connect
    self.sock = self._context.wrap_socket(self.sock,
  File "/usr/local/python3/python3.8.10/lib/python3.8/ssl.py", line 500, in wrap_socket
    return self.sslsocket_class._create(
  File "/usr/local/python3/python3.8.10/lib/python3.8/ssl.py", line 1040, in _create
    self.do_handshake()
  File "/usr/local/python3/python3.8.10/lib/python3.8/ssl.py", line 1309, in do_handshake
    self._sslobj.do_handshake()
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1131)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/buaa/.local/bin/solc-select", line 8, in <module>
    sys.exit(solc_select())
  File "/home/buaa/.local/lib/python3.8/site-packages/solc_select/__main__.py", line 24, in solc_select
    for version in sorted(get_installable_versions()):
  File "/home/buaa/.local/lib/python3.8/site-packages/solc_select/solc_select.py", line 78, in get_installable_versions
    return set(get_available_versions()) - set(installed_versions())
  File "/home/buaa/.local/lib/python3.8/site-packages/solc_select/solc_select.py", line 82, in get_available_versions
    list_json = urllib.request.urlopen(url).read()
  File "/usr/local/python3/python3.8.10/lib/python3.8/urllib/request.py", line 222, in urlopen
    return opener.open(url, data, timeout)
  File "/usr/local/python3/python3.8.10/lib/python3.8/urllib/request.py", line 525, in open
    response = self._open(req, data)
  File "/usr/local/python3/python3.8.10/lib/python3.8/urllib/request.py", line 542, in _open
    result = self._call_chain(self.handle_open, protocol, protocol +
  File "/usr/local/python3/python3.8.10/lib/python3.8/urllib/request.py", line 502, in _call_chain
    result = func(*args)
  File "/usr/local/python3/python3.8.10/lib/python3.8/urllib/request.py", line 1397, in https_open
    return self.do_open(http.client.HTTPSConnection, req,
  File "/usr/local/python3/python3.8.10/lib/python3.8/urllib/request.py", line 1357, in do_open
    raise URLError(err)
urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1131)>

解决办法

网上搜索 'ssl.SSLCertVerificationError',看到帖子:

python爬虫ssl.SSLCertVerificationError解决办法

根据其中的

方法二:

全局取消证书验证,简易方便,但对整个项目可能会出现安全性的相关问题。

import ssl
ssl._create_default_https_context = ssl._create_unverified_context

联想到可以手动修改 Python 中的 ssl 模块。

于是进入 Python3.8.10 的安装目录,搜索 ssl.py,打开该文件,手动修改之

$ cd /usr/local/python3/python3.8.10

$ find . -name ssl.py
./lib/python3.8/ssl.py

$ sudo vim  ./lib/python3.8/ssl.py

找到

_create_default_https_context = create_default_context

这一行,注释掉,然后修改为

_create_default_https_context = _create_unverified_context

再次执行  solc-select install,就正常了:

$ solc-select install
Available versions to install:
0.4.10
0.4.11
0.4.12
0.4.13
0.4.14
0.4.15
0.4.16
0.4.17
0.4.18
0.4.19
0.4.20
0.4.21
0.4.22
0.4.23
0.4.24
0.4.25
0.4.26
0.5.0
0.5.1
0.5.10
0.5.11
0.5.12
0.5.13
0.5.14
0.5.15
0.5.16
0.5.17
0.5.2
0.5.3
0.5.4
0.5.5
0.5.6
0.5.7
0.5.8
0.5.9
0.6.0
0.6.1
0.6.10
0.6.11
0.6.12
0.6.2
0.6.3
0.6.4
0.6.5
0.6.6
0.6.7
0.6.8
0.6.9
0.7.0
0.7.1
0.7.2
0.7.3
0.7.4
0.7.5
0.7.6
0.8.0
0.8.1
0.8.10
0.8.11
0.8.12
0.8.13
0.8.14
0.8.15
0.8.16
0.8.17
0.8.18
0.8.19
0.8.2
0.8.20
0.8.3
0.8.4
0.8.5
0.8.6
0.8.7
0.8.8
0.8.9

注意事项

_create_default_https_context = _create_unverified_context

这一行代码的作用是取消 python 访问 https 服务器时的证书验证步骤,这是存在安全风险的;自己临时需要做的工作完成以后,就应该将 ssl.py 修改回原来的样子。


2023.06.14 Wed 14:45

标签:10,lib,0.8,Python,SSLCertVerificationError,py,ssl,local,python3.8
From: https://www.cnblogs.com/dongling/p/17496792.html

相关文章

  • python基础之并发
    一、多线程示例代码1:简单多线程importtimeimportthreadingdeffoo(t):print("foo开始")time.sleep(t)print("foo结束")start=time.time()t_list=[]foriinrange(100):t=threading.Thread(target=foo,args=(2,))#注意,如果只有一个参......
  • python在if判断语句中对于0和None的处理
    情景:我在访问一个字典的key,但是我不知道这个key有没有,或者有,我也不知道value取值多少,即dict1.get(key)有可能输出None,也有可能输出0如果我对这个key进行判断,例如:ifdict1.get(key)这种判断,可能对于None和0的条件都是一样的,因此,如果我只是想判断是否存在这个key,我需要ifdict1......
  • Linux下卸载python,并安装pyenv管理python版本
    一、卸载已安装的python版本查找已安装的Python3版本:运行以下命令以获取已安装的Python3版本列表:dpkg-l|greppython3找到列出所有以python3开头的已安装软件包。可能会有多个Python3相关的软件包,因此仔细检查输出的内容。2.卸载Python3软件包:从步骤1......
  • python字典访问不存在的key
    当你使用一个不存在的键(key)去访问一个Python字典(dict)时,会触发一个KeyError异常。这是Python提供的一种机制,用于指示你正在尝试访问一个字典中不存在的键。以下是一个简单的示例,演示了当使用一个不存在的键去访问字典时会发生的情况:my_dict={"apple":3,"banana":6,"orange......
  • Python中的pickle模块:对象序列化与反序列化
    在Python中,对象的序列化和反序列化是一项常见的任务。pickle模块提供了一种简单且强大的方法来实现对象的序列化和反序列化,使得开发者能够方便地将复杂的Python对象转化为字节流并在需要时重新还原。本文将详细介绍pickle模块的使用方法和原理,并探讨其在数据持久化和跨进程通信中......
  • 软件测试|超好用超简单的Python GUI库——tkinter(四)
    前言之前我们介绍了label控件,本篇文章我们将介绍button控件。Button控件是Tkinter中常用的窗口部件之一,同时也是实现程序与用户交互的主要控件。通过用户点击按钮的行为来执行回调函数,是Button控件的主要功用。首先自定义一个函数或者方法,然后将函数与按钮关联起来,最后,当用......
  • 软件测试|超好用超简单的Python GUI库——tkinter(五)
    前言在之前,我们介绍了tkinter的button控件,label控件,今天我们介绍一下entry控件,entry控件我们可以理解为界面的内容输入框,实现GUI界面与用户的信息交互,最典型的场景就是我们在登录时需要输入的账号密码。获取更多技术资料,请点击!Entry控件使用起来非常简单,下面对该控件做简单的......
  • 三秒看懂Python yield
    业务场景:一个FastAPI构建的网关,数据进来时立即给予一次响应,表示:“收到,我已开始执行。”,然后分发任务另起一个线程异步执行。原本代码写的在异步里又起了一个异步等任务执行,这样不影响下面的return立刻响应。逻辑看起很繁琐,那有没有办法,能让函数在"return":“收到”之后,继续执行呢?......
  • python如何用openpyxl 创建表格,写入数据
    1.安装openpyxl库,可以选择豆瓣源,直接可执行,是一次性的.不需要设置.pipinstallopenpyxl-ihttp://pypi.douban.com/simple--trusted-hostpypi.douban.com 2.我们这里创建一个表(不是打开本地),并插入数据'sandx'是设置表中单表sheet的标题栏.插入数......
  • python代码-基于深度强化学习的微能源网能量管理与优化策略研究 关键词:微能源网;能量管
    python代码-基于深度强化学习的微能源网能量管理与优化策略研究关键词:微能源网;能量管理;深度强化学习;Q-learning;DQN内容::面向多种可再生能源接入的微能源网,提出一种基于深度强化学习的微能源网能量管理与优化方法。该方法使用深度Q网络(deepQnetwork,DQN)对预测负荷、风光等可......