Je ne parviens pas à utiliser fetch_california_housing() pour télécharger un exemple d'ensemble de données. Il semble que le certificat ait expiré ?
print('La version de scikit-learn est {}.'.format(sklearn.__version__))
à partir de sklearn.datasets importer fetch_california_housing
logement = fetch_california_housing()
Downloading Cal. housing from https://ndownloader.figshare.com/files/5976036 to /Users/test/scikit_learn_data
The scikit-learn version is 0.19.1.
---------------------------------------------------------------------------
SSLError Traceback (most recent call last)
/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py in do_open(self, http_class, req, **http_conn_args)
1317 h.request(req.get_method(), req.selector, req.data, headers,
-> 1318 encode_chunked=req.has_header('Transfer-encoding'))
1319 except OSError as err: # timeout error
/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/http/client.py in request(self, method, url, body, headers, encode_chunked)
1238 """Send a complete request to the server."""
-> 1239 self._send_request(method, url, body, headers, encode_chunked)
1240
/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/http/client.py in _send_request(self, method, url, body, headers, encode_chunked)
1284 body = _encode(body, 'body')
-> 1285 self.endheaders(body, encode_chunked=encode_chunked)
1286
/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/http/client.py in endheaders(self, message_body, encode_chunked)
1233 raise CannotSendHeader()
-> 1234 self._send_output(message_body, encode_chunked=encode_chunked)
1235
/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/http/client.py in _send_output(self, message_body, encode_chunked)
1025 del self._buffer[:]
-> 1026 self.send(msg)
1027
/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/http/client.py in send(self, data)
963 if self.auto_open:
--> 964 self.connect()
965 else:
/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/http/client.py in connect(self)
1399 self.sock = self._context.wrap_socket(self.sock,
-> 1400 server_hostname=server_hostname)
1401 if not self._context.check_hostname and self._check_hostname:
/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/ssl.py in wrap_socket(self, sock, server_side, do_handshake_on_connect, suppress_ragged_eofs, server_hostname, session)
400 server_hostname=server_hostname,
--> 401 _context=self, _session=session)
402
/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/ssl.py in __init__(self, sock, keyfile, certfile, server_side, cert_reqs, ssl_version, ca_certs, do_handshake_on_connect, family, type, proto, fileno, suppress_ragged_eofs, npn_protocols, ciphers, server_hostname, _context, _session)
807 raise ValueError("do_handshake_on_connect should not be specified for non-blocking sockets")
--> 808 self.do_handshake()
809
/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/ssl.py in do_handshake(self, block)
1060 self.settimeout(None)
-> 1061 self._sslobj.do_handshake()
1062 finally:
/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/ssl.py in do_handshake(self)
682 """Start the SSL/TLS handshake."""
--> 683 self._sslobj.do_handshake()
684 if self.context.check_hostname:
SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:749)
During handling of the above exception, another exception occurred:
URLError Traceback (most recent call last)
<ipython-input-18-dc07bc139b51> in <module>()
1 print('The scikit-learn version is {}.'.format(sklearn.__version__))
2 from sklearn.datasets import fetch_california_housing
----> 3 housing = fetch_california_housing()
/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/sklearn/datasets/california_housing.py in fetch_california_housing(data_home, download_if_missing)
99 ARCHIVE.url, data_home))
100
--> 101 archive_path = _fetch_remote(ARCHIVE, dirname=data_home)
102
103 with tarfile.open(mode="r:gz", name=archive_path) as f:
/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/sklearn/datasets/base.py in _fetch_remote(remote, dirname)
872 file_path = (remote.filename if dirname is None
873 else join(dirname, remote.filename))
--> 874 urlretrieve(remote.url, file_path)
875 checksum = _sha256(file_path)
876 if remote.checksum != checksum:
/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py in urlretrieve(url, filename, reporthook, data)
246 url_type, path = splittype(url)
247
--> 248 with contextlib.closing(urlopen(url, data)) as fp:
249 headers = fp.info()
250
/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py in urlopen(url, data, timeout, cafile, capath, cadefault, context)
221 else:
222 opener = _opener
--> 223 return opener.open(url, data, timeout)
224
225 def install_opener(opener):
/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py in open(self, fullurl, data, timeout)
524 req = meth(req)
525
--> 526 response = self._open(req, data)
527
528 # post-process response
/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py in _open(self, req, data)
542 protocol = req.type
543 result = self._call_chain(self.handle_open, protocol, protocol +
--> 544 '_open', req)
545 if result:
546 return result
/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py in _call_chain(self, chain, kind, meth_name, *args)
502 for handler in handlers:
503 func = getattr(handler, meth_name)
--> 504 result = func(*args)
505 if result is not None:
506 return result
/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py in https_open(self, req)
1359 def https_open(self, req):
1360 return self.do_open(http.client.HTTPSConnection, req,
-> 1361 context=self._context, check_hostname=self._check_hostname)
1362
1363 https_request = AbstractHTTPHandler.do_request_
/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/urllib/request.py in do_open(self, http_class, req, **http_conn_args)
1318 encode_chunked=req.has_header('Transfer-encoding'))
1319 except OSError as err: # timeout error
-> 1320 raise URLError(err)
1321 r = h.getresponse()
1322 except:
URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:749)>
Eh bien, j'espère que c'est très temporaire... Est-ce toujours un problème ?
Salut Jnothman
J'ai remarqué ce problème pour la première fois vendredi. Je reçois toujours la même erreur
Erreur d'URL : Sincères amitiés Andy
Je n'ai pas ce problème. Êtes-vous sûr que votre horloge n'est pas réglée
incorrectement ou quelque chose?
Salut Jnothman
J'utilise un mac book pro. Il semble que l'heure affichée sur mon ordinateur puisse être correcte. Je viens de relancer le code et j'obtiens la même erreur
Avez-vous une idée de la façon dont je vérifie si mon horloge est correctement réglée ?
Andy
J'ai oublié de mentionner. Je n'ai pas regardé le code mais je parie que si vous avez déjà téléchargé l'ensemble de données sur votre disque local, il ne récupère jamais réellement, alors c'est peut-être pourquoi cela fonctionne pour vous
Bizarre, je ne peux certainement pas reproduire, et je me suis assuré d'avoir supprimé les données cal_housing de ~/scikit_learn_data
donc cela ne semble pas être un problème dans scikit-learn. Je vais fermer celui-ci, @AEDWIP veuillez fournir plus d'informations au cas où vous parviendriez à résoudre votre problème.
Je rencontre un problème similaire - Mac Book Pro, High Sierra.
Je ne suis pas un expert dans ce domaine des certificats SSL, mais je ne pense pas que cela soit lié à scikit-learn comme je l'ai mentionné ci-dessus.
Obtenez-vous la même erreur avec cet extrait ?
from six.moves.urllib.request import urlretrieve
urlretrieve('https://ndownloader.figshare.com/files/5976036')
POUAH!
J'ai trouvé le problème. python 3.6 sur mac nécessite une étape post-installation
$ less /Applications/Python\ 3.6/ReadMe.rtf
" Contrairement aux versions précédentes, les bibliothèques OpenSSL obsolètes fournies par Apple ne sont plus utilisées. Cela signifie également que les certificats de confiance dans les trousseaux système et utilisateur gérés par l'application Keychain Access et l'utilitaire de ligne de commande de sécurité ne sont plus utilisés par défaut "
La solution est
$ sudo /Applications/Python\ 3.6/Install\ Certificates.command
J'ai le même problème avec python 3.6 sur Ubuntu 16.04
Solution trouvée ici : http://blog.pengyifan.com/how-to-fix-python-ssl-certificate_verify_failed/
import os, ssl
if (not os.environ.get('PYTHONHTTPSVERIFY', '') and
getattr(ssl, '_create_unverified_context', None)):
ssl._create_default_https_context = ssl._create_unverified_context
Merci, le code de nfrik a fonctionné
Commentaire le plus utile
POUAH!
J'ai trouvé le problème. python 3.6 sur mac nécessite une étape post-installation
$ less /Applications/Python\ 3.6/ReadMe.rtf
" Contrairement aux versions précédentes, les bibliothèques OpenSSL obsolètes fournies par Apple ne sont plus utilisées. Cela signifie également que les certificats de confiance dans les trousseaux système et utilisateur gérés par l'application Keychain Access et l'utilitaire de ligne de commande de sécurité ne sont plus utilisés par défaut "
La solution est
$ sudo /Applications/Python\ 3.6/Install\ Certificates.command