urllib和“ SSL:CERTIFICATE_VERIFY_FAILED”错误


279

我收到以下错误:

Exception in thread Thread-3:
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/threading.py", line 810, in        __bootstrap_inner
self.run()
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/threading.py", line 763, in  run
self.__target(*self.__args, **self.__kwargs)
File "/Users/Matthew/Desktop/Skypebot 2.0/bot.py", line 271, in process
info = urllib2.urlopen(req).read()
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 154, in urlopen
return opener.open(url, data, timeout)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 431, in open
response = self._open(req, data)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 449, in _open
'_open', req)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 409, in _call_chain
result = func(*args)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 1240, in https_open
context=self._context)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 1197, in do_open
raise URLError(err)
URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581)>

这是导致此错误的代码:

if input.startswith("!web"):
    input = input.replace("!web ", "")      
    url = "https://domainsearch.p.mashape.com/index.php?name=" + input
    req = urllib2.Request(url, headers={ 'X-Mashape-Key': 'XXXXXXXXXXXXXXXXXXXX' })
    info = urllib2.urlopen(req).read()
    Message.Chat.SendMessage ("" + info)

我使用的API要求我使用HTTPS。如何使其绕过验证?


2
URL没有任何问题,可以使用常见的受信任证书成功验证它。因此,您最好不要尝试绕过证书验证,而要对其进行修复。您正在使用哪个版本的python?
斯特芬·乌尔里希

这可能与stackoverflow.com/a/27826829/3081018有关。服务器使用具有多种信任路径的相同类型的证书链。查看在那里您可能需要使用哪个cafile进行验证。
斯特芬·乌尔里希

7
升级到
优胜美地


4
“我如何使其绕过验证?” 是错误的问题。您可能应该问如何验证域提供的证书。
jww

Answers:


296

如果只想绕过验证,则可以创建一个新的SSLContext。默认情况下,新创建的上下文使用CERT_NONE

请注意第17.3.7.2.1节中所述的内容

直接调用SSLContext构造函数时,默认值为CERT_NONE。由于它不对另一个对等方进行身份验证,因此它可能是不安全的,尤其是在客户端模式下,在大多数情况下,您希望确保与之对话的服务器的真实性。因此,在客户端模式下,强烈建议使用CERT_REQUIRED。

但是,如果您只是希望它由于其他原因而现在可以工作,则可以执行以下操作,则还必须这样import ssl做:

input = input.replace("!web ", "")      
url = "https://domainsearch.p.mashape.com/index.php?name=" + input
req = urllib2.Request(url, headers={ 'X-Mashape-Key': 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' })
gcontext = ssl.SSLContext()  # Only for gangstars
info = urllib2.urlopen(req, context=gcontext).read()
Message.Chat.SendMessage ("" + info)

这应该可以解决您的问题,但是您并没有真正解决任何问题,但是您不会看到,[SSL: CERTIFICATE_VERIFY_FAILED]因为您现在不在验证证书!

除了上述内容之外,如果您想更多地了解为什么会看到这些问题,则需要查看PEP 476

该PEP建议默认情况下启用X509证书签名的验证以及Python HTTP客户端的主机名验证,具体取决于每次呼叫的选择退出。此更改将应用​​于Python 2.7,Python 3.4和Python 3.5。

有一个建议的退出选项,与我上面的建议没有什么不同:

import ssl

# This restores the same behavior as before.
context = ssl._create_unverified_context()
urllib.urlopen("https://no-valid-cert", context=context)

它还通过Monkeypatching提供了一个不鼓励使用的选项,这在python中并不常见:

import ssl

ssl._create_default_https_context = ssl._create_unverified_context

它将使用创建未验证上下文的功能覆盖用于上下文创建的默认功能。

请注意,如PEP中所述:

本指南主要针对希望采用较新版本的Python的系统管理员,这些版本的Python在尚不支持HTTPS连接证书验证的传统环境中实现此PEP。例如,管理员可以通过在其Python标准操作环境中将上述Monkeypatch添加到sitecustomize.py中来选择退出。应用程序和库不应在整个更改过程中进行更改(除非响应系统管理员控制的配置设置)。

如果您想阅读有关为什么不通过软件验证证书不好的论文,可以在这里找到


1
因此,如果此错误使我无法使用setup.py upload该怎么解决的?
pyCthon'3

5
ssl._create_default_https_context = ssl._create_unverified_context这对我有用,正如Noelkd快要结束了。由于我们的网站是HP打印机的Intranet站点,仅用于刮擦,因此使用此方法没有问题。
ihightower15年

您最不希望使用的第一种方法-旁路验证。为什么没有首先列出实际验证证书的证书?
jww

1
如果您使用的是过时的openSSL版本,也会发生这种情况。因此,对我来说,有效的方法是更新到最新版本certifi 并更新包装盒上的openssl。
myusuf3

1
context 这就是我所需要的
1997年

382

这不是解决您的特定问题的方法,但我将其放在此处,因为此线程是“ SSL:CERTIFICATE_VERIFY_FAILED”在Google上的最高搜索结果,它使我陷入了困境。

如果您在OSX上安装了Python 3.6,并且在尝试连接到https://站点时收到“ SSL:CERTIFICATE_VERIFY_FAILED”错误,则可能是因为OSX上的Python 3.6根本没有证书,并且无法验证任何SSL连接。这是OSX 3.6的更改,并且需要安装后步骤,该步骤将安装certifi证书包。自述文件中对此进行了记录,您可以从以下网站找到该文件:/Applications/Python\ 3.6/ReadMe.rtf

自述文件将让您运行以下安装后脚本,该脚本将进行安装certifi/Applications/Python\ 3.6/Install\ Certificates.command

发行说明中包含更多信息:https : //www.python.org/downloads/release/python-360/


105
直接运行/ Applications / Python \ 3.6 / Install \ Certificates.command解决了我在OSX上的问题。谢谢。
muyong

2
我使用的是OS X El Capitan 10.11.6,Python 3.6.0,因此该解决方案非常有效。
y2knoproblem '17

2
我使用的是macOS Sierra 10.12.5,Python 3.6.1,并且此解决方案运行完美。
詹姆斯,

4
这解决了我/Applications/Python\ 3.7/Install\ Certificates.command 直接在其中运行它的问题terminal!谢谢@CraigGlennie和@muyong,感谢您out-of-the-box-thinking将它放在这里!
JayRizzo

6
macOS Mojave上的Python 3.7:在这里不起作用。我已经卸载/重新安装/运行安装证书,重新启动等。对我不起作用
Thomas

71

扩展Craig Glennie的答案:

在MacOs Sierra上的Python 3.6.1中

在bash终端中输入以下内容即可解决问题:

pip install certifi
/Applications/Python\ 3.6/Install\ Certificates.command

3
sudo /Applications/Python\ 3.6/Install\ Certificates.command如果权限被拒绝,请尝试。
KingKongCoder

实际上,这不能解决Python 3.6上的问题。-1
hyperum

1
如果使用命令行吓到了您(可能不在这里,但是,嘿),您还可以找到Python在安装时创建的Applications文件夹(或其他操作系统上的等效文件夹),然后双击打开脚本。文件夹的具体名称取决于您安装的Python版本。
埃德斯·培根

像Python 3.7.3一样具有魅力。谢谢。
klbytec

谢谢。我从字面上搜索了100多种解决方案,而您的方法却奏效了。
NND

43

在Windows上,Python不会查看系统证书,而是使用位于的证书?\lib\site-packages\certifi\cacert.pem

解决问题的方法:

  1. 将域验证证书下载为* .crt或* pem文件
  2. 在编辑器中打开文件并将其内容复制到剪贴板
  3. 找到您的cacert.pem位置:from requests.utils import DEFAULT_CA_BUNDLE_PATH; print(DEFAULT_CA_BUNDLE_PATH)
  4. 编辑cacert.pem文件,然后将域验证证书粘贴到文件末尾。
  5. 保存文件并享受请求!

6
lib\site-packages\certifi\cacert.pem在Python 2.7.10中不存在。问题是关于urllib2不是requests
Kevin Smyth

2
到目前为止最好的解决方案,twitter API使用DigiCert证书,该证书不在我的python的cacert.pem文件中。我在那加了VOILA!
digz6666 '16

2
在Debian上工作。对于记录,我系统上的文件路径为:/usr/local/lib/python2.7/dist-packages/certifi-2015.09.06.2-py2.7.egg/certifi/cacert.pem。谢谢!
ofavre

不幸的是,python请求不使用任何操作系统的CA信任库。github.com/requests/requests/issues/2966。您必须设置 REQUESTS_CA_BUNDLE github.com/bloomreach/s4cmd/issues/111#issuecomment-406839514
jamshid

通常可在Windows 10和Python 3.6上使用Google和Twitter API以及请求模块。
brittenb

36

我的Mac OS X解决方案:

1)使用从官方Python语言网站https://www.python.org/downloads/下载的本机应用程序Python安装程序升级到Python 3.6.5。

我发现该安装程序正在处理更新新Python的链接和符号链接要比自制软件好得多的事情。

2)使用刷新的Python 3.6目录中的“ ./Install Certificates.command”安装新证书

> cd "/Applications/Python 3.6/"
> sudo "./Install Certificates.command"

在Mac OS X中的工作就像魅力
马努马修

31

您可以尝试将其添加到环境变量中:

PYTHONHTTPSVERIFY=0 

请注意,这将禁用所有 HTTP验证,因此有点像大锤,但是,如果不需要验证,则可能是有效的解决方案。


17
我怀疑禁用所有python的所有HTTP验证对于处理验证中的一个错误来说有点多余。在许多情况下,默认情况下可能需要验证。
trevorKirkby,2013年

在python 2.7.13的Windows Server 2016上为我工作。我通常没有在Windows服务器上安装python,但是将其从Nexus 1000v迁移到VDS进行vCenter升级时需要使用python,这暂时解决了自签名vCenter证书的问题(将使用VMCA和有效的证书)升级的环境)。我很不幸运,可以通过在python请求程序包中编辑cacert.pem来使证书被接受
Christopher Thorjussen

3
另外,我在运行脚本之前直接在命令行窗口中设置了变量,因此它不会禁用所有检查,例如@ someone-or-other害怕,我也不建议这样做。
Christopher Thorjussen '17

这对我的用例来说是完美的:测试。我永远不会在生产中这样做,但是对于运行与SSL无关的测试,这是一个不错的选择。
索林

谢谢,这个解决方案对我有用:import os os.environ [“ PYTHONHTTPSVERIFY”] =“ 0”
mbello

28

urllib.request.urlopenPython 3.4、3.5和3.6中使用了一个类似的问题。(urllib2根据Python 2 urllib2文档页面顶部的注释,这是Python 3等效项的一部分。)

我的解决方案是pip install certifi安装certifi,它具有:

...精心挑选的根证书集合,用于在验证TLS主机身份的同时验证SSL证书的可信赖性。

然后,在我之前的代码中:

import urllib.request as urlrq

resp = urlrq.urlopen('https://example.com/bar/baz.html')

我将其修改为:

import urllib.request as urlrq
import certifi

resp = urlrq.urlopen('https://example.com/bar/baz.html', cafile=certifi.where())

如果我正确阅读了urllib2.urlopen文档,那么它也会有一个cafile参数。因此,urllib2.urlopen([...], certifi.where())可能也适用于Python 2.7。


UPDATE(2020年1月1日): Python的3.6的为,所述cafile参数urlopen已经被废弃,用context假定参数来代替指定。我发现以下内容在3.5到3.8上同样适用:

import urllib.request as urlrq
import certifi
import ssl

resp = urlrq.urlopen('https://example.com/bar/baz.html', context=ssl.create_default_context(cafile=certifi.where()))

1
load_verify_locations修改SSLContext实例并返回None。您应该context=ssl.create_default_context(cafile=certifi.where())改用。有关更多信息,请参阅ssl文档
ostrokach

1
@ostrokach呵呵,我尝试过类似的方法,但是我一定使用了错误的ssl函数。参见编辑;好?
hBy2Py

13
import requests
requests.packages.urllib3.disable_warnings()

import ssl

try:
    _create_unverified_https_context = ssl._create_unverified_context
except AttributeError:
    # Legacy Python that doesn't verify HTTPS certificates by default
    pass
else:
    # Handle target environment that doesn't support HTTPS verification
    ssl._create_default_https_context = _create_unverified_https_context

从这里获取https://gist.github.com/michaelrice/a6794a017e349fc65d01


在Jenkins环境,个人环境中测试了此解决方案,此方法有效!
rapport89年

2
这是非常不安全的,因为它绕过所有证书验证,使用后果自负,并且出于对ANYBODY的热爱,请勿在生产代码中使用此方法。
dragon788

谢谢。终于成功了。在Mac OS上的/ Applications下没有必要安装Python 3.6。这应该是公认的答案。
Biranchi

您永远都不要做这种猴子补丁。这非常危险,并且会影响代码的所有下游使用。
Acumenus

10

就像我在评论中所写的那样,这个问题可能与此SO答案有关

简而言之:有多种验证证书的方法。OpenSSL使用的验证与您在系统上拥有的受信任的根证书不兼容。Python使用OpenSSL。

您可以尝试获取Verisign 3类公共主要证书颁发机构缺少的证书,然后cafile根据Python文档使用该选项:

urllib2.urlopen(req, cafile="verisign.pem")

您能帮我PLZ解决python和ssl验证链接中的

8

我的一台Linux机器上也有类似的问题。生成新证书并导出指向证书目录的环境变量为我修复了该问题:

$ sudo update-ca-certificates --fresh
$ export SSL_CERT_DIR=/etc/ssl/certs

7

我需要添加另一个答案,因为就像Craig Glennie一样,由于网络上有很多帖子都提到了这个问题,所以我大肆追赶。

我正在使用MacPorts,我最初认为的Python问题实际上是MacPorts问题:它没有在安装openssl时安装根证书。解决的办法是port install curl-ca-bundle,在提到这个博客帖子


5

我在这里找到了

我找到了此解决方案,将以下代码插入源文件的开头:

import ssl

try:
   _create_unverified_https_context = ssl._create_unverified_context
except AttributeError:
    # Legacy Python that doesn't verify HTTPS certificates by default
    pass
else:
    # Handle target environment that doesn't support HTTPS verification
    ssl._create_default_https_context = _create_unverified_https_context

此代码取消了验证,因此未验证ssl认证。


看到这个视频,它帮助我了解了ssl是什么。视频URL:youtu.be/dsuVPxuU_hc
Ganesh Chowdhary Sadanala

4

对于Centos 6/7,Fedora上的Python 3.4+,只需通过以下方式安装受信任的CA:

  1. 将CA.crt复制到 /etc/pki/ca-trust/source/anchors/
  2. update-ca-trust force-enable
  3. update-ca-trust extract

2
可能是愚蠢的问题,但是什么是CA.crt?在哪里可以找到它?
伊克巴尔(Iqbal)

4

Anaconda解决方案

我的设置是在MacOS上使用代理的Anaconda Python 3.7。路径是不同的。

  • 这是您获取正确证书路径的方式:
import ssl
ssl.get_default_verify_paths()

在我的系统上产生了

Out[35]: DefaultVerifyPaths(cafile='/miniconda3/ssl/cert.pem', capath=None,
 openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/miniconda3/ssl/cert.pem',
 openssl_capath_env='SSL_CERT_DIR', openssl_capath='/miniconda3/ssl/certs')

一旦知道证书的去向,就可以将代理使用的证书连接到该文件的末尾。

我已经通过运行以下命令将conda设置为与代理一起使用:

conda config --set ssl_verify <pathToYourFile>.crt

如果您不记得自己的证书在哪里,可以在~/.condarc以下位置找到它:

ssl_verify: <pathToYourFile>.crt

现在将文件连接到末尾,/miniconda3/ssl/cert.pem 请求应该可以正常工作,特别是sklearn.datasets类似的工具也应该可以正常工作。

进一步警告

其他解决方案无效,因为Anaconda的设置略有不同:

  • 该路径Applications/Python\ 3.X根本不存在。

  • 以下命令提供的路径是WRONG路径

from requests.utils import DEFAULT_CA_BUNDLE_PATH
DEFAULT_CA_BUNDLE_PATH

3

我半丢脸,因为我遇到了同样的问题,除了我所碰到的URL是有效的,证书是有效的之外。无效的是我与网络的连接。我未能将代理详细信息添加到浏览器(在本例中为IE)。这阻止了验证过程的正确进行。
添加了代理详细信息,然后我的python很高兴。


1
不要因忘记某事然后弄清楚并共享而感到羞耻,有人可能会发现这很有用。虽然使用IE ...可惜:p
达沃斯

3

Python 2.7.12(默认,2016年7月29日,15:26:22)解决了上述问题。此信息可能会对其他人有所帮助。


3
我在Mac上的2.7.12上使用urllib2库遇到了它,但是使用了requets库似乎很好
marcadian 16'Aug

@marcadian安装和使用certifi,这显然是由持有该证书的刮requests固定的问题,我对Python的3.4至3.6
hBy2Py

3

我很惊讶所有这些说明都没有解决我的问题。尽管如此,诊断是正确的(顺便说一句,我正在使用Mac和Python3.6.1)。因此,总结正确的部分:

  • 在Mac上,Apple放弃了OpenSSL
  • Python现在使用它自己的一套CA根证书
  • 二进制Python安装提供了安装Python所需的CA Root证书的脚本(“ / Applications / Python 3.6 / Install Certificates.command”)
  • 阅读“ / Applications / Python 3.6 / ReadMe.rtf”以了解详细信息

对我来说,脚本不起作用,所有那些certifi和openssl安装也无法修复。也许是因为我安装了多个python 2和3,以及许多virtualenv。最后,我需要手工修复它。

pip install certifi   # for your virtualenv
mkdir -p /Library/Frameworks/Python.framework/Versions/3.6/etc/openssl
cp -a <your virtualenv>/site-package/certifi/cacert.pem \
  /Library/Frameworks/Python.framework/Versions/3.6/etc/openssl/cert.pem

如果那仍然使您失败。然后也重新/安装OpenSSL。

port install openssl

2

像您一样,我在旧的iMac(OS X 10.6.8)上使用python 2.7,我也使用urllib2.urlopen遇到了问题:

urlopen error [SSL: CERTIFICATE_VERIFY_FAILED]

我的程序运行良好,没有SSL证书问题,并且突然(在下载程序后),由于该SSL错误而崩溃。

问题是使用的python版本:

  1. https://www.python.org/downloads和python-2.7.9-macosx10.6.pkg 没问题

  2. Homebrew工具安装的一个问题:“ brew install python”,版本位于/ usr / local / bin。

一章,叫Certificate verification and OpenSSL [CHANGED for Python 2.7.9],在/Applications/Python 2.7/ReadMe.rtf解释了很多细节问题。

因此,请检查,下载并在PATH中放入正确版本的python。


2

具有centOS 7的Amazon EC2上的Python 2.7

我必须将env变量设置SSL_CERT_DIR为指向ca-bundle位于/etc/ssl/certs/ca-bundle.crt


您的回答使我走上了正确的道路。在ubuntu上,我必须设置SSL_CERT_DIR/etc/ssl/certs,并且还确保该ca-certificates软件包已安装并且是最新的。
诺曼·布劳


1

尝试

pip install --trusted-host pypi.python.org软件包名称

它为我工作。



1

就我而言,由于requestsurllib3版本不兼容,导致出现此错误,安装过程中出现以下错误:

ERROR: requests 2.21.0 has requirement urllib3<1.25,>=1.21.1, but you'll have urllib3 1.25 which is incompatible.
pip install 'urllib3<1.25' --force-reinstall

做到了。


1

另一个Anaconda解决方案。我在macOS的Python 2.7环境中获得了CERTIFICATE_VERIFY_FAILED。事实证明,conda路径很糟糕:

基本(3.7)环境:

>>> import ssl
>>> ssl.get_default_verify_paths()
DefaultVerifyPaths(cafile='/usr/local/anaconda3/ssl/cert.pem', capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/anaconda3/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/anaconda3/ssl/certs')

2.7环境(路径不存在!):

DefaultVerifyPaths(cafile='', capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/anaconda3/envs/py27/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/anaconda3/envs/py27/ssl/certs')

解决方法:

cd /usr/local/anaconda3/envs/py27/
mkdir ssl
cd ssl
ln -s ../../../ssl/cert.pem

1

SSL:CERTIFICATE_VERIFY_FAILED错误也可能发生,因为ca-certificatesLinux上的软件包中缺少中间证书。例如,在我的情况下,即使Firefox浏览器包含中间证书“ DigiCert SHA2 Secure Server CA ”,该ca-certificates软件包也没有。您可以通过直接wget在导致此错误的URL上运行命令来找出缺少的证书。然后,您可以从证书颁发机构的官方网站(例如https://www.digicert.com/digicert-root-certificates.htm)中搜索与该证书对应的CRT文件链接。现在,要包括您所缺少的证书,您可以改为使用CRT文件下载链接运行以下命令:

wget https://cacerts.digicert.com/DigiCertSHA2SecureServerCA.crt

mv DigiCertSHA2SecureServerCA.crt DigiCertSHA2SecureServerCA.der

openssl x509 -inform DER -outform PEM -in DigiCertSHA2SecureServerCA.der -out DigicertSHA2SecureServerCA.pem.crt

sudo mkdir /usr/share/ca-certificates/extra

sudo cp DigicertSHA2SecureServerCA.pem.crt /usr/share/ca-certificates/extra/

sudo dpkg-reconfigure ca-certificates

之后,您可以再次使用wget以及python urllib包来测试您的URL 。有关更多详细信息,请参阅:https : //bugs.launchpad.net/ubuntu/+source/ca-certificates/+bug/1795242


0

如果您在vCenter 6上,则应将vCenter的vmware证书颁发机构cert添加到操作系统的受信任CA列表中。要下载您的证书,请执行以下操作

  1. 打开您的Web浏览器。
  2. 导航到https://
  3. 在右下角,单击“下载受信任的根CA”链接

在Fedora上

  1. 解压缩并将扩展名从.0更改为.cer
  2. 将其复制到/ etc / pki / ca-trust / source / anchors /
  3. 运行update-ca-trust命令。

链接:

  1. https://virtualizationreview.com/articles/2015/04/02/install-root-self-signed-certificate-vcenter-6.aspx?m=1
  2. http://forums.fedoraforum.org/showthread.php?t=293856

他说他使用的是OS X,而不是
vCenter6。– jww

0

nltk的安装步骤(我已经在MAC OS X中安装了python3(3.6.2)

sudo easy_install pip

使用“忽略已安装”选项来忽略卸载先前的六个版本,否则,它会在卸载时出现错误并且不进行电影前移

sudo pip3 install -U nltk --ignore-installed six

检查pip和python的安装,使用“ 3”版本

which python python2 python3
which pip pip2 pip3

检查是否安装了NLTK

python3
import nltk
nltk.__path__
['/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/nltk']

请先安装SSL证书,然后再安装示例书,否则在安装示例时我们将证书错误

/Applications/Python\ 3.6/Install\ Certificates.command
python3 -m nltk.downloader book

本书示例成功完成了nltk和nltk_ata的安装


0

PyOpenSSL使用安装pip对我有用(无需转换为PEM):

pip install PyOpenSSL

0

我通过关闭Fiddler(HTTP调试代理)来解决此问题,方法是检查您是否启用了代理,然后重试。


0

在python 2.7中,最后在文件C:\ Python27 \ lib \ site-packages \ certifi \ cacert.pem中添加受信任的根CA详细信息

之后,我确实运行了(使用管理员权限)pip install --trusted-host pypi.python.org --trusted-host pypi.org --trusted-host files.pythonhosted.org packageName

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.