pip always fails ssl verification
即使我执行
无论如何,输出总是相同的:
Collecting dedupe
Retrying (Retry(total=4, connect=None, read=None,
redirect=None, status=None)) after connection broken by
'SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate
verify failed (_ssl.c:777)'),)': /simple/dedupe/
Retrying...skipping
Could not find a version that satisfies the requirement dedupe (from versions: ) No matching distribution found for dedupe
所以我卸载了anaconda并重新安装了它。 一样。
你认为问题是我的_ssl.c文件(我不知道它在哪里)必须是腐败的还是什么? 如果我告诉它绕过ssl验证,为什么pip需要引用呢?
它可能与2018年PyPI域的变化有关。
请确保您的防火墙/代理允许访问/来自:
所以你可以尝试一下这样的事情:
$ python -m pip
install --trusted-host files.pythonhosted.org --trusted-host pypi.org --trusted-host pypi.python.org [--proxy ...] [--user]Ok.
有关
一些企业代理甚至可能会动态替换HTTPS连接的证书。如果您的系统时钟不同步,它也可能会破坏SSL验证过程。
如果防火墙/代理/时钟不是问题,那么请检查pip的SSL握手中使用的SSL证书。事实上,你可以获得一个当前的cacert.pem(来自curl的Mozilla的CA捆绑包)并使用pip选项
$ pip --cert ~/cacert.pem install --user
where--cert argument is system path to your alternate CA bundle in PEM format. (regarding the --user option, please see below).
Or, it's possible to create a custom config ~/.pip/pip.conf and point the option at a valid system cert (or your cacert.pem) as a workaround, for example:
[global]
cert = /etc/pki/tls/external-roots/ca_bundle.pem
(or another pem file)Ok.
甚至可以用您可靠的CA捆绑包手动替换pip中的原始cacert.pem(例如,如果您的点数非常老)。较旧的pip版本知道在pip / _vendor / requests / cacert.pem和系统存储(如
基本上,pip包使用
OP使用anaconda,所以他们可以尝试:
或者,可以单独使用conda来直接安装/管理python包:它是一个完全独立于pip的工具,但在包和venv管理方面提供了类似的功能。它的包不是来自PyPI,而是来自anaconda自己的存储库。
问题是,如果你混合使用并在
在没有conda的普通Linux Python安装上:
如果您使用的是OS分发版提供的pip版本,则使用供应商提供的升级进行系统范围的pip更新:
由于发行版通常落后于PyPI,因此可能无法获得一些更新。在这种情况下,可以在用户级别(在$ HOME目录中)或者在virtualenv内升级pip,例如:
<5233>
(如果在virtualenv中省略
或者(也在用户级别)您可以尝试:
PyPA脚本包含一个从pip._vendor.certifi中提取.pem SSL包的包装器。
否则,如果仍然不行,请尝试使用
好。
上面的错误或类似错误是由于虚拟机(VM)没有时间同步,我的客户Ubuntu VM过去几天。
我运行此命令让VM获取正确的网络时间:
1 | sudo timedatectl set-ntp on |
这使得Ubuntu客户操作系统获得了网络时间。 (您可能需要提供网络时间源...我使用过这篇文章:数字海洋 - 如何在Ubuntu上设置时间)
检查时间是否正确:
1 | timedatectl |
重新运行失败的pip命令。