踩坑

好久没用 python,最近重新下载安装好 python 后发现用 pip 安装第三方包一直失败。经过一番折腾发现,如果报错信息符合下面两种,一般都是因为网络连接时 SSL 认证失败导致的

  1. check_hostname requires server_hostname

    raise ValueError("check_hostname requires server_hostname")

    ValueError: check_hostname requires server_hostname

  2. EOF occurred in violation of protocol

    Could not fetch URL https://pypi.org/simple/xxx/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.org', port=443): Max retries exceeded with url: /simple/xxx/ (Caused by SSLError(SSLEOFError(8, 'EOF occurred in violation of protocol (_ssl.c:997)'))) - skipping

什么是 SSL ?

传输层安全性协议(英语:Transport Layer Security,TLS)及其前身安全套接层(英语:Secure Sockets Layer,SSL)是现在的 HTTPS 协议中的一种安全协议,目的是为互联网通信提供安全及数据完整性保障

而较新版本的 python 内置的 pip 以及用于网络请求的 requests、urllib3 包也较新,并且会使用 HTTPS 协议来下载新的软件包

为什么会报错

根据报错信息可以发现错误的根源就在于 SSL,也就是没有通过该安全协议的认证,通常是由于开启了网络代理、VPN 或者网络抓包等软件的导致的

解决办法

1. 临时关闭代理、VPN 或者网络抓包等软件

最推荐的办法是临时关闭代理、VPN 或者网络抓包等软件,但是如果关闭后下载速度过慢可以尝试后面两种解决办法

2. 通过镜像的 HTTP 源来避免 SSL 认证问题

由于是 SSL 是 HTTPS 协议需要的,因此我们可以切换至 HTTP 的镜像站来进行安装下载

HTTPS 现在已经比较普及,有不少镜像源也早已经切换至 HTTPS 协议,但部分镜像源在支持 HTTPS 协议的而同时也还支持 HTTP 协议,下面简单罗列几个 pip 镜像源

# 清华,仅支持 HTTPS
https://pypi.tuna.tsinghua.edu.cn/simple/ # 阿里,HTTP 和 HTTPS 均支持
http://mirrors.aliyun.com/pypi/simple/
https://mirrors.aliyun.com/pypi/simple/ # 豆瓣,HTTP 和 HTTPS 均支持
http://pypi.doubanio.com/simple/
https://pypi.doubanio.com/simple/

安装时第三方包时可以参考如下命令:

pip install xxx-package -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
pip install xxx-package -i http://pypi.doubanio.com/simple/ --trusted-host pypi.doubanio.com

如果想永久使用镜像站,则需要修改配置文件,以 Linux 为例:

vim ~/.pip/pip.conf

修改文件内容如下

[global]
index-url = http://mirrors.aliyun.com/pypi/simple/ [install]
trusted-host = mirrors.aliyun.com

3. 切换至低版本 pip

经过测试,当 pip 版本高于 20.3 后才会出现此错误,因此我们可以手动将 pip 版本降级至 20.2.4 或者 20.3b1 等较低版本即可

python -m pip install pip==20.2.4 -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
python -m pip install pip==20.2.4 -i http://pypi.doubanio.com/simple/ --trusted-host pypi.doubanio.com

参考资料

本文作者: ywang_wnlo

本文链接: https://ywang-wnlo.github.io/posts/2e7aa01a.html

版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

【日常踩坑】解决 pip 安装第三方包时因 SSL 报错的更多相关文章

  1. 解决pip安装第三方包编码错误:UnicodeDecodeError: 'ascii' codec can't decode byte....

    .../python27/Lib/mimetypes.py 在 import之后添加下列内容 if sys.getdefaultencoding() != 'gbk': reload(sys) sys ...

  2. 解决Python pip安装第三方包慢的问题

    解决Python pip安装第三方包慢的问题 主要是修改源,国内的源有几个 阿里云 http://mirrors.aliyun.com/pypi/simple/ 中国科技大学 https://pypi ...

  3. 解决Windows下运行php Composer出现SSL报错的问题

    解决Windows下运行php Composer出现SSL报错的问题 2015-01-14 20:05   在windows下运行composer却出现SSL报错: E:\www>php -f  ...

  4. 解决Win7下运行php Composer出现SSL报错的问题

    以前都在linux环境使用php composer.今天尝试在win7下运行composer却出现SSL报错: D:\data\www\mmoyu\symapp>php -f %phprc%\c ...

  5. pip安装第三方包总失败

    第一步:升级pip python -m pip install -U pip 第二布:安装想下载的第三方包 python -m pip install xx 一般来说pip安装不会失败的,失败的话就尝 ...

  6. 解决 pip 安装opendr包 卡住的问题

    使用豆瓣的源(已经确认过了该源中有opendr包),pip安装opendr,结果卡在了下载完成的位置,什么提示也没有.(如下图) 既然安装包已经下载下来了又安装不上,则应该是安装代码中有什么问题,只不 ...

  7. pip安装第三方包超时

    1. pip安装requests模块超时 [root@2 zabbix_agentd.d]# pip install requests Collecting requests /usr/lib/pyt ...

  8. python 安装第三方包时 read timed out

    记录下安装python第三方包超时报错,解决方法:(以安装numpy为例) pip install numpy 报错:raise ReadTimeoutError(self._pool, None, ...

  9. Python用pip安装第三方库时换源下载

    pip默认是从Python官网下载第三方库,从国外下载当然不如从国内下载来得快 豆瓣:https://pypi.doubanio.com/simple 还有其它源,阿里云等等,一个就够用了 用pip安 ...

  10. Python:在cmd中使用pip安装第三方库时出现SyntaxError

    原因:pip安装库时不需要进入Python环境,在Python环境下安装就会出现SyntaxError 解决方法:输入exit(),退出Python环境,然后就可以pip安装了

随机推荐

  1. java中this的内存原理以及成员变量和局部变量

    this的内存原理 1.this的作用: 区分局部变量和成员变量 eg: public class Student{ private int age; public void method(){ in ...

  2. vue全家桶进阶之路35:Vue3 传递参数query和params

    在 Vue.js 3.x 中,可以通过路由的 params 和 query 属性来传递参数. 通过 params 传递参数 我们可以在路由跳转时通过 params 传递参数.具体方法如下: // 在组 ...

  3. 深入 Hyperf:HTTP 服务启动时发生了什么?

    当我们创建 Hyperf 项目之后,只需要在终端执行 php bin/hyperf.php start 启动命令,等上几秒钟,就可以看到终端输出的 Worker 进程已启动,HTTP 服务监听在 95 ...

  4. react-router-dom 6.0路由详解

    React react-router-dom 6.0路由使用 由于react路由版本的更新迭代,记录路由知识点 新react-router-dom地址,点击查看详情. 下面为使用的例子 Install ...

  5. AcWing 3956. 截断数组

    给定一个长度为 n 的数组 a1,a2,-,an. 现在,要将该数组从中间截断,得到三个非空子数组. 要求,三个子数组内各元素之和都相等. 请问,共有多少种不同的截断方法? 输入格式 第一行包含整数 ...

  6. 计算机网络 ACL和ANT

    目录 一.ACL概况 二.ACL工作过程 三.ACL实验 四.ANT概况 五.ANT工作过程 六.ANT实验 一.ACL概况 概念:主要是对报文进行区分,路由器会对报文进行检查,查看是否符合通过标准或 ...

  7. PE 结构的三种地址

    三种地址   (一)VA(虚拟地址):PE 文件被 Windows 加载到内存后的地址.   (二) RVA(相对虚拟地址):PE 文件虚拟地址相对于映射基地址(对于 EXE 文件来说,映射基地址是 ...

  8. HttpURLConnection调用webservice,c#、java、python等HTTP调用webservice,简单的webservice调用

    以前调用webservice一般使用axis.axis2先生成java类后,直接引用,多方便.但是有的webservice接口非常的函数,生成的java类非常多,有没有一种非常简化的方法. axis2 ...

  9. 逍遥自在学C语言 | 多级指针探秘

    前言 多级指针在C语言中是一种特殊的指针类型,它可以指向其他指针的指针. 通过多级指针,我们可以间接地访问或修改存储在内存中的数据. 在本文中,我们将讨论多级指针的概念.使用方法.使用场景以及常见错误 ...

  10. Java 判断一个字符串是否是对称字符串 例如"abc"不是对称字符串,"aba"、"abba"、"aaa"、"mnanm"是对称字符串

    代码如下: public static void main(String[] args) { String str = "1QabcdcbaQ"; StringBuilder sb ...