【问题标题】:sklearn.datasets fetch_olivetti_faces IOError: [Errno socket error] [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:661)sklearn.datasets fetch_olivetti_faces IOError: [Errno socket error] [SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败 (_ssl.c:661)
【发布时间】:2017-12-10 00:05:11
【问题描述】:

我尝试使用 sklearn 中的 fetch_olivetti_faces 数据集,但由于某些原因,如果您能帮助我,我无法解决此 IOError:

这是我运行的代码:

from sklearn import datasets
data = datasets.fetch_olivetti_faces()

这是我得到的 IOError:

IOError: [Errno socket error] [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:661)

这是我得到的所有错误:

File "/anaconda3/lib/python2.7/site-packages/sklearn/datasets/olivetti_faces.py", line 120, in fetch_olivetti_faces
mat_path = _fetch_remote(FACES, dirname=data_home)

File "/anaconda3/lib/python2.7/site-packages/sklearn/datasets/base.py", line 874, in _fetch_remote
urlretrieve(remote.url, file_path)

File "/anaconda3/lib/python2.7/urllib.py", line 98, in urlretrieve
return opener.retrieve(url, filename, reporthook, data)

File "/anaconda3/lib/python2.7/urllib.py", line 245, in retrieve
fp = self.open(url, data)

File "/anaconda3/lib/python2.7/urllib.py", line 213, in open
return getattr(self, name)(url)

File "/anaconda3/lib/python2.7/urllib.py", line 443, in open_https
h.endheaders(data)

File "/anaconda3/lib/python2.7/httplib.py", line 1038, in endheaders
self._send_output(message_body)

File "/anaconda3/lib/python2.7/httplib.py", line 882, in _send_output
self.send(msg)

File "/anaconda3/lib/python2.7/httplib.py", line 844, in send
self.connect()

File "/anaconda3/lib/python2.7/httplib.py", line 1263, in connect
server_hostname=server_hostname)

File "/anaconda3/lib/python2.7/ssl.py", line 363, in wrap_socket
_context=self)

File "/anaconda3/lib/python2.7/ssl.py", line 611, in __init__
self.do_handshake()

File "/anaconda3/lib/python2.7/ssl.py", line 840, in do_handshake
self._sslobj.do_handshake()

IOError: [Errno socket error] [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:661)

【问题讨论】:

  • 通过直接从https网页而不是http网页下载数据找到了解决方案

标签: sockets scikit-learn dataset ssl-certificate errno


【解决方案1】:

你可以通过导入ssl包并通过行执行以下命令来解决问题:

import ssl
ssl._create_default_https_context = ssl._create_unverified_context

请注意,这会禁用证书验证,从而有效地关闭 SSL。此解决方案在开发环境中很好,但在将其用于任何面向公众的地方之前,必须整理好您的证书。

【讨论】:

    【解决方案2】:

    您似乎在网络中使用自定义 SSL 证书。 在这种情况下,您应该将您的证书添加到受信任的证书列表中。

    另一种方法是手动下载文件。并更改sklearn/datasets/olivetti_faces.py 文件:

    FACES = RemoteFileMetadata(
        filename='olivettifaces.mat',
        url='https://ndownloader.figshare.com/files/5976027',
        checksum=('b612fb967f2dc77c9c62d3e1266e0c73'
                  'd5fca46a4b8906c18e454d41af987794'))
    

    您可以手动将文件复制到本地网络服务器并将此参数更改为:http://yourhost/yourfile.tar.gz

    在烦人的过程之后,这对我有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-29
      • 2017-06-01
      • 2017-02-05
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      • 2018-03-15
      相关资源
      最近更新 更多