pip error: ProtocolError('Connection aborted.', FileNotFoundError(2, 'No such file or directory'))

2024年6月21日服务端开发15,872字数 1857阅读6分11秒阅读模式

Ethan_2024-06-21_14-03-29

本文记录了我解决问题的尝试及思路,所以会比较啰嗦,如果只是为了寻找解决答案的,可以直接跳到最后一段查看。

This document records my attempts and thought process in solving the problem, so it may be somewhat verbose. If you are just looking for the solution, you can skip directly to the last section.

出现问题

昨天还能愉快的使用pip安装依赖,今天就突然都不行了,全部都提示连接错误。尝试更新pip依然如此。

Ethan_2024-06-21_13-55-46

WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ProtocolError('Connection aborted.', FileNotFoundError(2, 'No such file or directory'))': /simple/beautifulsoup4/

找出问题

网上搜了一圈,挺多人提出这个问题的,但都没有很好的解决方法。

以为是国内特殊网路环境原因导致的,于是换回百度搜索,尝试配置使用了国内镜像源,依然有问题。

意外的是,在尝试的过程中,一条使用了阿里家的镜像命令,竟然可以正常下载:

install requests -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com

于是对比网上那些使用了清华,豆瓣镜像源的命令,发现这条命令多了个参数--trusted-host

这是不是意味着只需要把其它镜像源加入到信任的host就可以了?

添加配置可以通过config set命令,于是我尝试把pypi的镜像源加入信任:

pip config set global.trusted-host "pypi.org files.pythonhosted.org pypi.python.org"

再次尝试安装,失败……

难道是源头的问题,换成豆瓣试试:

pip install requests -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

失败……

这也就意味着不仅仅是--trusted-host这个配置的问题了。

于是我尝试使用阿里源但不加这个配置:

pip install selenium -i http://mirrors.aliyun.com/pypi/simple/  

依然报错了,但不是提示网络错误了,而是新的错误:

Ethan_2024-06-21_14-35-01

注意最后一行,显示错误:文件或者目录没找到。

这个文件路径我熟悉啊,昨天用wireshark调试时,曾经用过这个文件,通过设置环境变量SSLKEYLOGFILE,来获取 SSL 证书的密钥,以监控 SSL 的内容,后面wireshark总是特别卡我就把这个文件及目录删了。

原来是这里出了问题呀,难怪今天突然不行了,最后发现,还真是自己的锅。

解决问题 Solving

如果你也定义了SSLKEYLOGFILE环境变量,请确保该环境变量的目录及文件存在,你可以通过env命令查看是否有该环境变量。

如果你不需要SSLKEYLOGFILE这个环境变量,只需要通过下列命令就可以去掉:

unset SSLKEYLOGFILE

你可以删掉,或者正确配置环境变量SSLKEYLOGFILE,之后就可以正常使用pip 下载依赖包了。

If you have also defined the SSLKEYLOGFILE environment variable, please ensure that the directory and file specified by this environment variable exist. You can check if this environment variable is set by using the env command.

If you do not need the SSLKEYLOGFILE environment variable, you can remove it with the following command:

unset SSLKEYLOGFILE

after which you should be able to use pip to download dependencies without any issues.

记一次 Python 应用开发频繁假死的问题 服务端开发

记一次 Python 应用开发频繁假死的问题

问题背景 最近在开发一款自动化的应用,其中有一个自动化任务会由下面这三个按钮控制: 逻辑也很简单,我大概画下图就是这样的: 但是,在测试时,却发现了问题: 当我点击暂停任务后,此时子线程被阻塞。如果我...