pip install fails with “connection error: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:598)”
我对python非常陌生,尝试在Windows7上使用
- 无论软件包是什么,PIP安装都会失败。例如,
> pip install scrapy 也会导致SSL错误。 - python 3.4.1的普通安装包括pip 1.5.6。我尝试做的第一件事是安装LinkChecker。python 2.7已经安装,它附带了Arcgis。在我安装3.4.1之前,命令行没有提供
python 和pip 。 > pip search linkchecker 工程。也许这是因为PIP搜索不验证站点的SSL证书。- 我在一家公司的网络中,但我们不通过代理来连接互联网。
- 每个公司计算机(包括我的)都有一个受信任的根证书颁发机构,用于各种原因,包括启用到https://google.com的TLS流量监控。不确定这与否有关。
下面是运行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | 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:\Users\jcook\AppData\Local\Temp\pip_build_jcook... No distributions at all found for linkchecker Exception information: Traceback (most recent call last): File"C:\Python34\lib\site-packages\pip\basecommand.py", line 122, in main status = self.run(options, args) File"C:\Python34\lib\site-packages\pip\commands\install.py", line 278, in run requirement_set.prepare_files(finder, force_root_egg_info=self.bundle, bundle=self.bundle) File"C:\Python34\lib\site-packages\pip eq.py", line 1177, in prepare_files url = finder.find_requirement(req_to_install, upgrade=self.upgrade) File"C:\Python34\lib\site-packages\pip\index.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 |
通过将
1 | $ pip install --trusted-host pypi.org --trusted-host files.pythonhosted.org <package_name> |
注:在2018年4月的某个时候,python包索引从
由于PIP 10.0的发布,您应该能够通过升级
1 | $ pip install --trusted-host pypi.org --trusted-host files.pythonhosted.org pip setuptools |
或者只需重新安装即可获得最新版本:
1 | $ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py |
(然后使用相关的python解释器运行
之后,
您可能需要将受信任的主机和代理添加到配置文件中。
1 2 3 4 | [global] trusted-host = pypi.python.org pypi.org files.pythonhosted.org |
替代解决方案(不太安全)
大多数答案都可能造成安全问题。
帮助轻松安装大多数python包的两个解决方法是:
- 使用简易安装:如果你真的很懒惰,不想浪费太多时间,使用
easy_install 。请注意,有些包找不到或会出现小错误。 - 使用wheel:下载python包的wheel并使用pip命令
pip install wheel_package_name.whl 安装包。
可以使用此参数指定证书:
1 | pip --cert /etc/ssl/certs/FOO_Root_CA.pem install linkchecker |
看到了吗?参考指南?匹普
如果指定您公司的根证书不起作用,那么curl-one可能会起作用:http://curl.haxx.se/ca/cacert.pem
您必须使用PEM文件而不是CRT文件。如果您有一个CRT文件,您将需要将该文件转换为PEM,在注释中有报告说,这现在可以与一个CRT文件一起使用,但我还没有验证。
另请检查:SSL证书验证。
Kenorb的回答非常有用(非常好!).在他的解决方案中,也许这是最简单的一个:
例如,在这种情况下,您可以
1 | pip install --trusted-host pypi.python.org linkchecker |
PEM文件(或其他任何文件)是不必要的。
答案很相似,有点混乱。在我的案例中,我公司网络中的证书就是问题所在。我可以用以下方法解决这个问题:
1 | pip install --trusted-host files.pythonhosted.org --trusted-host pypi.org --trusted-host pypi.python.org oauthlib -vvv |
如这里所见。如果不需要详细输出,则可以省略-vvv参数
我发现最简单的方法是从digicert下载并使用"digicert high assurance ev root ca",网址为:https://www.digicert.com/digicert root certificates.htm roots
您可以访问https://pypi.python.org/通过单击地址栏中的锁定图标来验证证书颁发者,或者通过使用openssl来增加您的geek cred:
1 2 3 4 5 6 7 8 9 10 11 | $ 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的名称。
对于一次性工作,请执行以下操作:
(最后一行假设您正在使用bash shell)在运行pip之前。
1 2 3 | 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 |
要使其重新可用,请将digicerthighasuranceevrootca.crt放在常见的地方,并在~/.bashrc中相应地导出pip-cert。
为了一次性解决这个问题,您可以验证您有一个
根据文件,您的
On Unix the default configuration file is:
$HOME/.config/pip/pip.conf which respects the XDG_CONFIG_HOME environment variable.On macOS the configuration file is
$HOME/Library/Application Support/pip/pip.conf if directory$HOME/Library/Application Support/pip exists else$HOME/.config/pip/pip.conf On Windows the configuration file is
%APPDATA%\pip\pip.ini .
在virtualenv中:
On Unix and macOS the file is
$VIRTUAL_ENV/pip.conf On Windows the file is:
%VIRTUAL_ENV%\pip.ini
您的
1 2 | [global] trusted-host = pypi.python.org |
创建
您可以通过以下方法来解决
- 使用HTTP而不是HTTPS。
使用
--cert 或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 将主机标记为受信任。 - 在python中,将
verify=False 用于requests.get (请参见:ssl cert verification)。 - 使用
--proxy 避免证书检查。
在:tls/ssl wrapper for socket objects-verifying certificates上阅读更多信息。
对我来说,通过创建文件夹解决了这个问题。
oaming\
1 2 | C:\Users\<username>\AppData oaming\pip\pip.ini |
在里面我写道:
1 2 3 4 | [global] trusted-host = pypi.python.org pypi.org files.pythonhosted.org |
我重新启动了python,然后pip永久信任这些站点,并使用它们从下载包。
我最近遇到这个问题是因为我公司的Web内容过滤器使用它自己的证书颁发机构来过滤SSL流量。在我的例子中,PIP似乎没有使用系统的CA证书,从而产生了您提到的错误。将pip降级到1.2.1版以后会出现自己的一组问题,所以我回到了Python3.4附带的原始版本。
我的解决方法很简单:使用
如果这不起作用,并且您可以访问没有问题的网络或计算机,那么您可以始终设置自己的个人PYPI服务器:如何在不使用镜像的情况下创建本地自己的PYPI存储库索引?
我几乎做到了这一点,直到我试图用
您可以尝试使用HTTP而不是HTTPS来绕过SSL错误。当然,这在安全性方面不是最佳的,但是如果您赶时间的话,它应该做到以下几点:
1 | pip install --index-url=http://pypi.python.org/simple/ linkchecker |
使用的答案
1 | pip install --trusted-host pypi.python.org <package> |
工作。但是您必须检查是否有重定向或缓存
1 2 3 4 5 | pip install \ --trusted-host pypi.python.org \ --trusted-host pypi.org \ --trusted-host files.pythonhosted.org \ <package> |
您可以在详细标志中找到这些。
我安装了PIP 1.2.1,安装简单,升级到最新版本的PIP(当时为6.0.7),在我的情况下,它可以安装软件包。
1 2 | easy_install pip==1.2.1 pip install --upgrade pip |
正确设置时间和日期!
梅比,我回答得有点晚了,
对我来说,我的日期和时间在覆盆子圆周率上配置错误。结果是,使用https://files.pythonhosted.org/服务器,所有SSL和HTTPS连接都失败。
更新如下:
1 2 | sudo date -s"Wed Aug 23 11:12:00 GMT+1 2018" dpkg-reconfigure tzdata |
您有4个选项:
使用证书作为参数1 | $ pip install --cert /path/to/mycertificate.crt linkchecker |
在
创建此文件:
1 2 3 | $HOME/.pip/pip.conf (Linux) %HOME%\pip\pip.ini (Windows) |
并添加这些行:
1 2 | [global] cert = /path/to/mycertificate.crt |
忽略证书并使用HTTP
1 | $ pip install --trusted-host pypi.python.org linkchecker |
忽略证书并在pip.conf中使用http
创建此文件:
1 2 3 | $HOME/.pip/pip.conf (Linux) %HOME%\pip\pip.ini (Windows) |
并添加这些行:
1 2 | [global] trusted-host = pypi.python.org |
来源
- https://pip.pypa.io/en/latest/user_-guide/配置
首先,
1 | pip install --trusted-host pypi.python.org <package name> |
不适合我。我一直在获取证书"验证失败"错误。但是,我在错误消息中注意到它们引用了"pypi.org"站点。所以,我使用这个作为可信主机名,而不是pypi.python.org。这几乎把我带到了那里;装载仍然失败,证书验证失败,但在后来的一点上。找到对失败网站的引用后,我将其作为受信任的主机包含进来。最终对我起作用的是:
1 | pip install --trusted-host pypi.org --trusted-host files.pythonhosted.org <package name> |
在64位Windows7Enterprise上使用ActivePython2.7.8、ActivePython3.4.1和"stock"python3.4.2尝试
通过降级到pip 1.2.1:
2013年3月报告的bug仍然存在:https://github.com/pypa/pip/issues/829。
在我使用--verbose选项查看它想要访问files.pythonhosted.org而不是pypi.python.org之前,此页面上的任何内容都对我无效:
1 | pip install --trusted-host files.pythonhosted.org <package_name> |
因此,通过--verbose选项检查它实际失败的URL。
您可以尝试忽略"https":
1 | pip install --index-url=http://pypi.python.org/simple/ --trusted-host pypi.python.org [your package..] |
我通过删除我的PIP并安装旧版本的PIP解决了这个问题:https://pypi.python.org/pypi/pip/1.2.1
对我来说,这是因为以前我运行的脚本设置了代理(到fiddler),重新打开控制台或重新启动修复了问题。
最近,我在使用Visual Studio 2015的python 3.6中遇到了同样的问题。花了2天时间后,我得到了解决方案,它对我来说工作得很好。
尝试使用pip或从Visual Studio安装numpy时出现以下错误收集麻木无法获取url https://pypi.python.org/simple/numpy/:确认SSL证书时出现问题:[ssl:certificate_verify_failed]certificate verify failed(_ssl.c:748)-跳过找不到满足要求numpy的版本(来自版本:)找不到与numpy匹配的分发
决议:
对于Windows操作系统
一种解决方案(对于Windows)是在
1 2 3 | [global] cert = C:/certs/python_root.pem proxy = http://my_user@my_company.com:my_password@proxy_ip:proxy_port |
…然后我们可以执行安装指令:
1 | pip3 install PyQt5 |
另一个选项是使用代理和证书的参数安装包…
1 2 | $ pip3 install --proxy http://my_user@my_company.com:my_password@proxy_ip:proxy_port \ --cert C:/certs/python_root.pem PyQt5 |
要将证书
1 | $ openssl x509 -inform der -in python_root.cer -out python_root.pem |
希望这能帮助别人!
沃斯坦的回答帮助了我。
我在电脑上的任何地方都找不到pip.ini文件。下面也找不到。
或者只需在Windows资源管理器中键入%appdata%。
在该appdata文件夹中创建一个名为pip的文件夹。
在刚才创建的pip文件夹中,创建一个名为pip.ini的简单文本文件
使用您选择的简单编辑器,通过该文件中的以下配置设置。
PIP.IN文件:
1 2 3 4 5 | [list] format=columns [global] trusted-host = pypi.python.org pypi.org |
你现在该走了。
如果您已经使用
在我的例子中,我运行的是最小阿尔卑斯Docker映像中的python。它缺少根CA证书。修复:
如果系统中缺少某些证书,则可能会出现此问题。例如,在OpenSUSE上,安装CA证书Mozilla
到目前为止,当pip升级到10时,他们已经将路径从pypi.python.org改为files.pythonhosted.org。请将命令更新为pip--trusted host files.pythonhosted.org install python_包
对我来说,所有建议的方法都不起作用——使用cert、http和可信主机。
在我的例子中,切换到不同版本的包是有效的(本例中是paho mqtt 1.3.1,而不是paho mqtt 1.3.0)。
看来问题是特定于该包版本的。