企业代理环境下使用pip安装Python包出现ProxyError报错如何解决
你遇到的报错核心是pip无法与指定代理服务器建立正常连接,和pypi服务本身可用性无关:你本地浏览器能正常访问pypi路径,是因为浏览器和pip的代理配置互相独立,二者没有关联。
报错中提到的No such file or directory是底层网络库连接代理失败时抛出的通用错误,不是真的存在文件缺失,90%以上的情况都是代理配置有误导致的,常见触发原因如下:
- 代理协议写错:你配置的代理前缀是
https://,但绝大多数企业内网代理都是HTTP协议,协议不匹配会直接导致连接失败 - 代理地址、端口、账号密码有误:如果账号密码中包含
@、:、/、空格等特殊字符,没有做URL转义的话会被pip错误解析,导致代理地址识别异常 - 系统全局代理环境变量和命令行指定的代理参数冲突,pip优先读取了错误的环境变量配置
- 企业代理启用了SSL中间人拦截,pip没有导入企业代理的自签名根证书,导致SSL握手失败
第一步:先验证代理本身可用性
用curl工具测试代理是否能正常访问pypi,执行命令:curl -x https://user:pass@name:port https://pypi.org/simple/numpy/ -v
如果该命令返回200状态码,说明代理本身正常,问题出在pip配置侧;如果该命令也报错,先修正代理的协议、地址、账号密码信息。第二步:修正代理参数配置
优先尝试把代理前缀改为http://,绝大多数企业代理都用HTTP协议,修改后的安装命令参考:pip install --proxy=http://user:pass@name:port --trusted-host pypi.org --trusted-host pypi.python.org --trusted-host files.pythonhosted.org numpy如果你的账号密码中有特殊字符,需要做URL编码,比如
@转义为%40、:转义为%3A、空格转义为%20。第三步:清理冲突的环境变量
执行对应命令清空当前会话的全局代理环境变量,避免和命令行参数冲突:
Windows系统:set http_proxy= set https_proxy=Linux/macOS系统:
unset http_proxy unset https_proxy清理完成后再重新执行pip安装命令。
第四步:添加企业代理根证书
如果以上步骤都无效,说明企业代理做了SSL中间人拦截,找企业IT索要代理的自签名根证书(一般是.cer或.pem格式),在安装命令中新增--cert参数指定证书路径即可:pip install --proxy=http://user:pass@name:port --trusted-host pypi.org --trusted-host files.pythonhosted.org --cert /path/to/your/proxy_root_cert.pem numpy备选方案:使用国内镜像源
暂时不需要走代理的话,可以直接用国内pypi镜像源安装,多数企业内网对国内镜像的访问限制更少:pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn
内容的提问来源于stack exchange,提问作者the_dude

