pip 安装失败,显示“连接错误:[SSL:CERTIFICATE_VERIFY_FAILED] 证书验证失败 (_ssl.c:598)”
- 2024-11-26 08:37:00
- admin 原创
- 347
问题描述:
我对 Python 还很陌生,正在尝试> pip install linkchecker
在 Windows 7 上使用。一些注意事项:
pip install 不管什么包都会失败。例如,
> pip install scrapy
也会导致 SSL 错误。Python 3.4.1 的 Vanilla 安装包含 pip 1.5.6。我尝试做的第一件事是安装 linkchecker。Python 2.7 已经安装,它随 ArcGIS 一起提供。直到我安装 3.4.1 后才
python
从命令行pip
可用。> pip search linkchecker
有效。可能是因为 pip search 没有验证站点的 SSL 证书。我在公司网络中,但我们不通过代理来访问互联网。
每台公司计算机(包括我的计算机)都有一个受信任的根证书颁发机构,用于各种目的,包括启用对https://google.com的 TLS 流量的监控。不确定这是否与此有关。
以下是运行后我的pip.log的内容pip install linkchecker
:
Downloading/unpacking linkchecker
Getting page https://pypi.python.org/simple/linkchecker/
Could not fetch URL https://pypi.python.org/simple/linkchecker/: connection error: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:598)
Will skip URL https://pypi.python.org/simple/linkchecker/ when looking for download links for linkchecker
Getting page https://pypi.python.org/simple/
Could not fetch URL https://pypi.python.org/simple/: connection error: HTTPSConnectionPool(host='pypi.python.org', port=443): Max retries exceeded with url: /simple/ (Caused by <class 'http.client.CannotSendRequest'>: Request-sent)
Will skip URL https://pypi.python.org/simple/ when looking for download links for linkchecker
Cannot fetch index base URL https://pypi.python.org/simple/
URLs to search for versions for linkchecker:
* https://pypi.python.org/simple/linkchecker/
Getting page https://pypi.python.org/simple/linkchecker/
Could not fetch URL https://pypi.python.org/simple/linkchecker/: connection error: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:598)
Will skip URL https://pypi.python.org/simple/linkchecker/ when looking for download links for linkchecker
Could not find any downloads that satisfy the requirement linkchecker
Cleaning up...
Removing temporary dir C:UsersjcookAppDataLocalTemppip_build_jcook...
No distributions at all found for linkchecker
Exception information:
Traceback (most recent call last):
File "C:Python34libsite-packagespipasecommand.py", line 122, in main
status = self.run(options, args)
File "C:Python34libsite-packagespipcommandsinstall.py", line 278, in run
requirement_set.prepare_files(finder, force_root_egg_info=self.bundle, bundle=self.bundle)
File "C:Python34libsite-packagespip
eq.py", line 1177, in prepare_files
url = finder.find_requirement(req_to_install, upgrade=self.upgrade)
File "C:Python34libsite-packagespipindex.py", line 277, in find_requirement
raise DistributionNotFound('No distributions at all found for %s' % req)
pip.exceptions.DistributionNotFound: No distributions at all found for linkchecker
对于您自己的代码中的此错误消息(使用urllib
、urllib2
等requests
尝试使用 SSL 建立连接),请参阅urllib 和“SSL:CERTIFICATE_VERIFY_FAILED”错误。
解决方案 1:
更新:2024-04:此解决方案不安全,可能会导致其他问题,例如 mitm。此解决方案是针对尝试访问公司防火墙后面的软件包存储库的。在将其视为解决方案之前,请先进行评估。
trusted-host
在 pip.conf 或命令行参数中使用
pypi.org
您可以通过设置和files.pythonhosted.org
以及较旧的pypi.python.org
受信任主机来忽略 SSL 错误。
$ pip install --trusted-host pypi.org --trusted-host pypi.python.org --trusted-host files.pythonhosted.org <package_name>
注意:2018 年 4 月期间,Python 包索引从 迁移pypi.python.org
到pypi.org
。这意味着使用旧域的“受信任主机”命令不再有效,但您可以同时添加这两个命令。
永久修复
自 pip 10.0 发布以来,您只需升级pip
自身即可永久解决此问题:
$ pip install --trusted-host pypi.org --trusted-host pypi.python.org --trusted-host files.pythonhosted.org pip setuptools
或者只需重新安装即可获取最新版本:
$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
(...然后get-pip.py
使用相关的 Python 解释器运行)。
pip install <otherpackage>
完成此操作后应该就可以正常工作了。如果不行,则需要执行更多操作,如下所述。
您可能想要将受信任的主机和代理添加到您的配置文件中。
pip.ini
(Windows)或pip.conf
(unix)
[global]
trusted-host = pypi.python.org
pypi.org
files.pythonhosted.org
替代解决方案(不太安全)
对这个问题的所有答案都存在安全风险,无论是禁用 SSL 验证、添加受信任域、使用自签名证书等。只有当您在公司防火墙后面并且了解风险得到处理时才使用此解决方案。
有助于轻松安装大多数 Python 包的两个解决方法是:
使用 easy_install:如果你真的很懒,不想浪费太多时间,就使用
easy_install <package_name>
。请注意,有些包将无法找到或会出现小错误。使用 Wheel:下载python 包的 Wheel并使用 pip 命令
pip install wheel_package_name.whl
安装该包。
解决方案 2:
使用--cert
以下论点:
您可以使用以下方式指定证书:
pip --cert <path/to/cert>.pem install <package list>
例如:
pip --cert /etc/ssl/certs/FOO_Root_CA.pem install linkchecker
或者,您可以设置/导出环境变量,如官方文档 export PIP_CERT=path/to/self-signed-cert.pem
中所述,然后使用不带任何特殊标志的 pip,即pip install <package>
参见:文档 » 参考指南 » pip
如果指定贵公司的根证书不起作用,也许 cURL 证书可以起作用:http ://curl.haxx.se/ca/cacert.pem
您必须使用 PEM 文件,而不是 CRT 文件。如果您有 CRT 文件,则需要将文件转换为 PEM。评论中有报告称这现在适用于 CRT 文件,但我尚未验证。
另请检查:SSL 证书验证。
解决方案 3:
永久修复 - pip 配置
由于与netscope相关的公司网络安全,我遇到了 SSL 问题。我的机器是Windows 10,装有 Python 3.9,以下命令对我有用。
pip config set global.trusted-host \n "pypi.org files.pythonhosted.org pypi.python.org" \n --trusted-host=pypi.python.org \n --trusted-host=pypi.org \n --trusted-host=files.pythonhosted.org
到这里,pip 就永久信任了这些站点,现在我们可以使用它们来下载任何包了。
解决方案 4:
对于我来说,这个问题是通过创建一个文件夹来解决的pip
,其中包含一个文件:pip.ini
例如 C:Users<username>AppDataRoaming
:
C:Users<username>AppDataRoamingpippip.ini
我在里面写道:
[global]
trusted-host = pypi.python.org
pypi.org
files.pythonhosted.org
我重新启动了 python,然后 pip 永久信任这些站点,并使用它们下载包。
如果您在 Windows 上找不到 AppData 文件夹,请%appdata%
在文件资源管理器中写入,它就会出现。
解决方案 5:
kenorb 的答案非常有用(而且很棒!)。
在他的解决方案中,也许这是最简单的一个: --trusted-host
例如,在这种情况下你可以这样做
pip install --trusted-host pypi.python.org linkchecker
pem 文件(或其他任何东西)是不必要的。
解决方案 6:
答案非常相似,而且有点令人困惑。就我而言,问题出在我公司网络中的证书。我能够使用以下方法解决该问题:
pip install --trusted-host files.pythonhosted.org --trusted-host pypi.org --trusted-host pypi.python.org oauthlib -vvv
如此处所示。如果不需要详细输出,可以省略 -vvv 参数
解决方案 7:
我尝试了这个答案博客中提供的大多数解决方案,但是都没有用,我ssl certificant error
在尝试安装 python 包时遇到了这个问题。
我通过以下命令成功:
python -m pip install PACKAGENAME --trusted-host=pypi.python.org --trusted-host=pypi.org --trusted-host=files.pythonhosted.org
解决方案 8:
永久修复
pip install --upgrade pip --trusted-host pypi.org --trusted-host files.pythonhosted.org
例如:
pip install <package name> --trusted-host pypi.org --trusted-host files.pythonhosted.org
解决方案 9:
我发现最直接的方法是从 DigiCert 下载并使用“DigiCert High Assurance EV Root CA”,网址为https://www.digicert.com/digicert-root-certificates.htm#roots
您可以访问https://pypi.python.org/,通过单击地址栏中的锁定图标来验证证书颁发者,或者使用 openssl 来提高您的极客信誉:
$ openssl s_client -connect pypi.python.org:443
CONNECTED(00000003)
depth=1 /C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert SHA2 Extended Validation Server CA
verify error:num=20:unable to get local issuer certificate
verify return:0
---
Certificate chain
0 s:/businessCategory=Private Organization/1.3.6.1.4.1.311.60.2.1.3=US/1.3.6.1.4.1.311.60.2.1.2=Delaware/serialNumber=3359300/street=16 Allen Rd/postalCode=03894-4801/C=US/ST=NH/L=Wolfeboro,/O=Python Software Foundation/CN=www.python.org
i:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert SHA2 Extended Validation Server CA
1 s:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert SHA2 Extended Validation Server CA
i:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert High Assurance EV Root CA
证书链中的最后一个CN值是您需要下载的CA的名称。
对于一次性的努力,请执行以下操作:
从 DigiCert下载CRT
将 CRT 转换为 PEM 格式
将 PIP_CERT 环境变量导出到 PEM 文件的路径
(最后一行假设您正在使用 bash shell)在运行 pip 之前。
curl -sO http://cacerts.digicert.com/DigiCertHighAssuranceEVRootCA.crt
openssl x509 -inform DES -in DigiCertHighAssuranceEVRootCA.crt -out DigiCertHighAssuranceEVRootCA.pem -text
export PIP_CERT=`pwd`/DigiCertHighAssuranceEVRootCA.pem
为了使其可重复使用,请将 DigiCertHighAssuranceEVRootCA.crt 放在常见位置,并在 ~/.bashrc 中相应地导出 PIP_CERT。
解决方案 10:
为了一劳永逸地解决这个问题,您可以验证您是否有一个pip.conf
文件。
pip.conf
根据文档,您应该在这里:
在 Unix 上,默认配置文件是:
$HOME/.config/pip/pip.conf
它尊重 XDG_CONFIG_HOME 环境变量。在 macOS 上,配置文件为
$HOME/Library/Application Support/pip/pip.conf
if 目录$HOME/Library/Application Support/pip
存在,否则$HOME/.config/pip/pip.conf
在 Windows 上,配置文件是
%APPDATA%pippip.ini
。
在虚拟环境中:
在 Unix 和 macOS 上,该文件
$VIRTUAL_ENV/pip.conf
在 Windows 上,该文件为:
%VIRTUAL_ENV%pip.ini
你pip.conf
看起来应该是这样的:
[global]
trusted-host = pypi.python.org
pip install linkchecker
在我创建文件后,安装linkchecker
没有任何问题pip.conf
。
解决方案 11:
您可以通过以下方式解决问题CERTIFICATE_VERIFY_FAILED
:
使用 HTTP 而不是 HTTPS(例如
--index-url=http://pypi.python.org/simple/
)。使用
--cert <trusted.pem>
或CA_BUNDLE
变量来指定替代 CA 包。
例如,您可以从 Web 浏览器转到失败的 URL,并将根证书导入您的系统。
运行
python -c "import ssl; print(ssl.get_default_verify_paths())"
以检查当前的(验证是否存在)。OpenSSL 有一对环境(
SSL_CERT_DIR
,SSL_CERT_FILE
),可用于指定不同的证书数据库PEP-476。用于
--trusted-host <hostname>
将主机标记为受信任。在 Python 中使用
verify=False
(requests.get
参见:SSL 证书验证)。用于
--proxy <proxy>
避免证书检查。
更多内容请阅读:套接字对象的 TLS/SSL 包装器 - 验证证书。
解决方案 12:
设置正确的时间和日期!
对我来说,结果是我的 Raspberry Pi 上的日期和时间配置错误。结果导致使用https://files.pythonhosted.org/服务器的所有 SSL 和 HTTPS 连接都失败了。
像这样更新它:
sudo date -s "Wed Thu 23 11:12:00 GMT+1 2018"
sudo dpkg-reconfigure tzdata
或者直接使用例如 Google 的时间:
参考: https: //superuser.com/a/635024/935136
sudo date -s "$(curl -s --head http://google.com | grep ^Date: | sed 's/Date: //g')"
sudo dpkg-reconfigure tzdata
解决方案 13:
总结:
pip install --trusted-host pypi.org --trusted-host pypi.python.org --trusted-host files.pythonhosted.org -r requirements.txt -vvv
pip install --trusted-host pypi.org --trusted-host pypi.python.org --trusted-host files.pythonhosted.org <packageName> -vvv
因此,我已经有 30 多个答案了,但在 2020 年 6 月(封锁期间),没有一个对我有用。
所有这些都是在过去的不同时刻给出的。我会尝试让这个答案在未来的所有时间都有效。问题是当 pip 安装包时,它会尝试连接到存储包的主机 URL,并且在下载时不信任该 URL。
我们可以用两种方法解决这个问题: 简单但不安全: 1. 检查 pip 点击了哪个 URL 来下载包。
pip install <packageName> -vvv
如果你仔细检查输出,你会发现它可能会转到某个 URL,如 pypi.org 或者可能是 pypi.python.org。
如果是,只需在命令中添加受信任的主机选项,如下所示:
pip install --trusted-host pypi.org --trusted-host pypi.python.org --trusted-host files.pythonhosted.org <packageName> -vvv
或者如果您使用需求文件:
pip install --trusted-host pypi.org --trusted-host pypi.python.org --trusted-host files.pythonhosted.org -r requirements.txt -vvv
安全方式:
转到每个 URL 并下载其公共证书(只需谷歌如何下载),创建一个链,将其存储为 .pem 文件并运行以下命令:
pip --cert YourPemFile.pem install <packageName>
解决方案 14:
我最近遇到了这个问题,因为我公司的 Web 内容过滤器使用自己的证书颁发机构来过滤 SSL 流量。在我的案例中,PIP 似乎没有使用系统的 CA 证书,从而产生了您提到的错误。将 PIP 降级到版本 1.2.1 后来出现了一系列问题,所以我回到了 Python 3.4 附带的原始版本。
我的解决方法很简单:使用easy_install
。它要么不检查证书(如旧 PIP 版本),要么知道使用系统证书,因为它每次都对我有效,而且我仍然可以使用 PIP 卸载使用 easy_install 安装的软件包。
如果这不起作用,并且您可以访问没有问题的网络或计算机,您可以随时设置您自己的个人 PyPI 服务器:如何在没有镜像的情况下创建本地自己的 pypi 存储库索引?
我几乎就这样做了,直到我尝试用它easy_install
作为最后的努力。
解决方案 15:
您可以尝试使用 http 而不是 https 来绕过 SSL 错误。当然,从安全性角度来看,这不是最佳选择,但如果您很着急,这应该可以解决问题:
pip install --index-url=http://pypi.python.org/simple/ linkchecker
解决方案 16:
不要错过!找到了适用于 Linux 的安全解决方案
pypi.org
所有添加到受信任站点的解决方案--trusted-host
都不安全,基本上跳过了 https,并没有真正解决问题。
使用此方法的每个人,请尝试以这种方式更新您的证书并删除--trusted-host
标志:
sudo yum -y update ca-certificates
export PIP_CERT=/etc/ssl/certs/ca-bundle.crt
安全很重要!
解决方案 17:
您有 4 个选择:
使用证书作为参数
$ pip install --cert /path/to/mycertificate.crt linkchecker
在pip.conf
创建此文件:
$HOME/.pip/pip.conf (Linux)
%HOME%pippip.ini (Windows)
并添加以下几行:
[global]
cert = /path/to/mycertificate.crt
忽略证书并使用 HTTP
$ pip install --trusted-host pypi.python.org linkchecker
忽略证书并在 pip.conf 中使用 HTTP
创建此文件:
$HOME/.pip/pip.conf (Linux)
%HOME%pippip.ini (Windows)
并添加以下几行:
[global]
trusted-host = pypi.python.org
来源
解决方案 18:
使用的答案
pip install --trusted-host pypi.python.org <package>
可以工作。但你必须检查是否存在重定向或缓存pip
命中。在 Windows 7 上pip 9.0.1
,我必须运行
pip install \n --trusted-host pypi.python.org \n --trusted-host pypi.org \n --trusted-host files.pythonhosted.org \n <package>
您可以使用详细标志找到这些。
解决方案 19:
我使用 easy_install 安装了 pip 1.2.1,并将 pip 升级到最新版本(当时是 6.0.7),它可以在我的情况下安装软件包。
easy_install pip==1.2.1
pip install --upgrade pip
解决方案 20:
首先,
pip install --trusted-host pypi.python.org <package name>
对我来说不起作用。我一直收到 CERTIFICATE_VERIFY_FAILED 错误。但是,我注意到错误消息中引用了“pypi.org”站点。因此,我将其用作受信任的主机名,而不是 pypi.python.org。这几乎让我成功了;加载仍然因 CERTIFICATE_VERIFY_FAILED 而失败,但发生在稍后。找到对失败网站的引用,我将其作为受信任的主机。最终对我有用的是:
pip install --trusted-host pypi.org --trusted-host files.pythonhosted.org <package name>
解决方案 21:
就我的情况而言,这是由于 SSL 证书由我公司的内部 CA 签名。使用类似的解决方法pip --cert
没有帮助,但以下软件包有帮助:
pip install pip_system_certs
请参阅:https://pypi.org/project/pip-system-certs/
此软件包修补 pip 并在运行时请求使用来自默认系统存储的证书(而不是捆绑的证书 ca)。
这将允许 pip 验证与系统安装信任其证书的服务器的 tls/ssl 连接。
解决方案 22:
对于 Python 3.10
添加/更新文件内容
[global]
trusted-host = pypi.python.org
pypi.org
files.pythonhosted.org
文件位置
MacOS——$HOME/Library/Application Support/pip/pip.conf
Unix——$HOME/.config/pip/pip.conf
Windows - %APPDATA%\pip\pip.ini
解决方案 23:
我尝试使用公司代理但失败了。
我正在使用Python 3.6
。
pip.conf
文件丢失。
以下是解决该问题的步骤:
安装证书包:
-pip --trusted-host pypi.python.org --trusted-host files.pythonhosted.org --trusted-host pypi.org install certifi
创建一个
pip.conf
文件,如下所示:
$ cd ~/.config
$ mkdir pip
$ cd pip
$ nano pip.conf
将以下内容添加到新创建的.conf
文件中,然后保存。
[global]
trusted-host = pypi.python.org files.pythonhosted.org pypi.org pypi.io
一切完成并且开始工作。
解决方案 24:
pip install ftputil
在 64 位 Windows 7 Enterprise 上尝试使用 ActivePython 2.7.8、ActivePython 3.4.1 和“原版”Python 3.4.2 时遇到了同样的问题。所有尝试都失败,并出现与 OP 相同的错误。
通过降级到 pip 1.2.1 解决了 Python 3.4.2 的问题:(easy_install pip==1.2.1
请参阅https://stackoverflow.com/a/16370731/234235 )。同样的修复也适用于 ActivePython 2.7.8。
该漏洞于 2013 年 3 月报告,目前仍未解决:https://github.com/pypa/pip/issues/829。
解决方案 25:
在我使用 --verbose 选项看到它想要访问 files.pythonhosted.org 而不是 pypi.python.org 之前,此页面上的任何内容对我都不起作用:
pip install --trusted-host files.pythonhosted.org <package_name>
因此,请通过 --verbose 选项检查实际失败的 URL。
解决方案 26:
我不确定这是否相关,但我遇到了类似的问题,通过将这些文件从 Anaconda3/Library/bin 复制到 Anaconda3/DLLs 解决了该问题:
libcrypto-1_1-x64.dll
libssl-1_1-x64.dll
解决方案 27:
一种解决方案(对于 Windows)是创建一个名为pip.ini
该%AppData%pip
文件夹的文件(如果不存在则创建该文件夹)并插入以下详细信息:
[global]
cert = C:/certs/python_root.pem
proxy = http://my_user@my_company.com:my_password@proxy_ip:proxy_port
...然后我们可以执行安装指令:
pip3 install PyQt5
另一个选择是使用代理和证书的参数来安装包...
$ pip3 install --proxy http://my_user@my_company.com:my_password@proxy_ip:proxy_port \n --cert C:/certs/python_root.pem PyQt5
要将证书*.cer
文件转换为所需的*.pem
格式,请执行以下指令:
$ openssl x509 -inform der -in python_root.cer -out python_root.pem
希望这对某人有帮助!
解决方案 28:
简短解决方案:
easy_install <package name>
例如:
easy_install pandas
替代解决方案:
pip install <package_name> --trusted-host pypi.org --trusted-host files.pythonhosted.org
例子:
pip install pandas --trusted-host pypi.org --trusted-host files.pythonhosted.org
解决方案 29:
我只是把它放在这里,因为我没有看到其他人提及它。
您可以像这样将全局可信主机设置为 pip:
py -m pip config set global.trusted-host pypi.org
最重要的是,它将返回放置 pip.ini/pip.conf 的正确位置
解决方案 30:
最近我在使用 Visual Studio 2015 的 Python 3.6 中遇到了同样的问题。花了两天时间后,我找到了解决方案,并且它对我来说运行良好。
尝试使用 pip 或从 Visual Studio 安装 numpy 时出现以下错误 收集 numpy 无法获取 URL https://pypi.python.org/simple/numpy/:确认 ssl 证书时出现问题:[SSL:CERTIFICATE_VERIFY_FAILED] 证书验证失败(_ssl.c:748)-跳过找不到满足要求 numpy 的版本(来自版本:)未找到与 numpy 匹配的分发
解决 :
对于Windows操作系统
打开 -> “%appdata%”如果不存在则创建“pip”文件夹。
在 pip 文件夹中创建“pip.ini”文件。
编辑文件并写入
[global]
trust-host = pypi.python.org 保存并关闭文件。现在使用 pip/visual studio 安装,它运行良好。