pip ProxyError (Cannot connect to proxy)

1. 问题

在打开科学上网(xx)后,pip 安装 python 库失败(此时xx设置的直连)pip报错了,报错信息如下

Looking in indexes: http://pypi.tuna.tsinghua.edu.cn/simple
WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ProxyError('Cannot connect to proxy.', NewConnectionError('<pip._vendor.urllib3.connection.HTTPSConnection object at 0x000001F1239A2A70>: Failed to establish a new connection: [WinError 10061] 由于目标计算机积极拒绝,无法连接。'))': /simple/langchain/
WARNING: Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ProxyError('Cannot connect to proxy.', NewConnectionError('<pip._vendor.urllib3.connection.HTTPSConnection object at 0x000001F1239A2B90>: Failed to establish a new connection: [WinError 10061] 由于目标计算机积极拒绝,无法连接。'))': /simple/langchain/
WARNING: Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ProxyError('Cannot connect to proxy.', NewConnectionError('<pip._vendor.urllib3.connection.HTTPSConnection object at 0x000001F1239A2C50>: Failed to establish a new connection: [WinError 10061] 由于目标计算机积极拒绝,无法连接。'))': /simple/langchain/
WARNING: Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ProxyError('Cannot connect to proxy.', NewConnectionError('<pip._vendor.urllib3.connection.HTTPSConnection object at 0x000001F1239A2D10>: Failed to establish a new connection: [WinError 10061] 由于目标计算机积极拒绝,无法连接。'))': /simple/langchain/
WARNING: Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ProxyError('Cannot connect to proxy.', NewConnectionError('<pip.

2. 尝试

看到报错信息和代理有关,因此退出xx,没问题,pip不会经常用,但是就是想找到 一个让 xx始终运行的方法,经过上网检索,找到了以下方法

2.1 设置环境变量

设置环境变量如下

HTTP_PROXY        http://127.0.0.1:7890
HTTPS_PROXY       http://127.0.0.1:7890

确实有效,但是很多博主并未给出原因,因为环境变量影响比较广,所以暂不考虑此方法。

2.2 修改注册表(非常不建议使用)

因为开启此功能后,xx发挥不了作用,这样还不如将xx退出

2.3 pip的代理设置

为pip 做相应的代理 设置

  • 使用 pip 的 --proxy选项设置代理:pip install libname --proxy http://127.0.0.1:7890

  • 直接编辑pip的配置文件pip.ini 在其中 [global]下面添加
    proxy=http://127.0.0.1:7890

3. 问题的根源

  • 代理服务器只支持 http,且pip安装库使用的 urllib3 在以前是不支持 https 的,这样一来,尽管我们的源可能是 https的,但走的还是 http

  • 后来 新版本的 urlib3 支持 https 了,但代理服务器不支持, pip 通过 https 去找,但是代码服务器只支持 http, 没法处理请求

3.1 解决方法

个人推荐方法

既然 xx不支持 https,我们可以设置成 http的

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

[install]
trusted-host = mirrors.aliyun.com

值得一提的是,不使用安全HTTP协议时,我们要告诉pip我们信任该源(trusted-host

这种方法操作简单,且完全不会影响到pip之外