목차
seaborn에서 데이터를 불러오는 코드를 작성하던 중 평소 윈도우에서 잘 발생하지 않는 에러를 만나게 되어 조금 당황했었습니다. 윈도우와 맥북을 오가며 파이썬을 다루고 있는데 환경이 조금 다르다 보니 가끔 이런 에러가 발생하면 어떻게 처리해야 할지 난감할 때가 더러 있습니다. 해당 에러가 발생했을 때 문제를 해결한 과정을 기록해 보려고 합니다.
1. SSL: CERTIFICATE_VERIFY_FAILED 에러를 만나다
보통 sklearn에서 데이터 셋을 불러왔는데 오늘은 seaborn에서도 데이터 셋을 로딩할 수 있다는 정보를 얻고 해당 기능을 코드에 넣어 봤습니다.
import seaborn as sns
# iris 데이터셋 로드
iris = sns.load_dataset("iris")
위의 코드에서 에러가 발생했다는 마킹 없이 그냥 에러를 발생시키는데 문제가 뭔지 인터넷을 검색해도 잘 나오지 않더군요. 아래는 vscode의 interpreter 창에서 발생된 에러 내용이었습니다.
---------------------------------------------------------------------------SSLCertVerificationError Traceback (most recent call last)File /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/urllib/request.py:1348, in AbstractHTTPHandler.do_open(self, http_class, req, **http_conn_args) 1347 try:-> 1348 h.request(req.get_method(), req.selector, req.data, headers, 1349 encode_chunked=req.has_header('Transfer-encoding')) 1350 except OSError as err: # timeout error
File /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/http/client.py:1282, in HTTPConnection.request(self, method, url, body, headers, encode_chunked) 1281 """Send a complete request to the server."""-> 1282 self._send_request(method, url, body, headers, encode_chunked)
File /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/http/client.py:1328, in HTTPConnection._send_request(self, method, url, body, headers, encode_chunked) 1327 body = _encode(body, 'body')-> 1328 self.endheaders(body, encode_chunked=encode_chunked)
File /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/http/client.py:1277, in HTTPConnection.endheaders(self, message_body, encode_chunked) 1276 raise CannotSendHeader()-> 1277 self._send_output(message_body, encode_chunked=encode_chunked)
File /Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/http/client.py:1037, in HTTPConnection._send_output(self, message_body, encode_chunked) 1036 del self._buffer[:]-> 1037 self.send(msg) 1039 if message_body is not None: 1040
...
-> 1351 raise URLError(err) 1352 r = h.getresponse() 1353 except:
URLError:
Output is truncated. View as a scrollable element or open in a text editor. Adjust cell output settings...
2. 터미널에서 테스트를 해보다
딱히 어느 부분을 에러 코드로 인식해야 하나 고민하다 터미널에서 확인해 보고자 아래와 같이 코드를 입력했습니다.
%python
>>>import seaborn as sns
>>>sns.get_dataset_names()
터미널에서는 조금 다른 에러가 발생했습니다.
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/urllib/request.py", line 1348, in do_open
h.request(req.get_method(), req.selector, req.data, headers,
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/http/client.py", line 1282, in request
self._send_request(method, url, body, headers, encode_chunked)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/http/client.py", line 1328, in _send_request
self.endheaders(body, encode_chunked=encode_chunked)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/http/client.py", line 1277, in endheaders
self._send_output(message_body, encode_chunked=encode_chunked)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/http/client.py", line 1037, in _send_output
self.send(msg)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/http/client.py", line 975, in send
self.connect()
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/http/client.py", line 1454, in connect
self.sock = self._context.wrap_socket(self.sock,
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/ssl.py", line 513, in wrap_socket
return self.sslsocket_class._create(
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/ssl.py", line 1071, in _create
self.do_handshake()
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/ssl.py", line 1342, in do_handshake
self._sslobj.do_handshake()
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:997)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/seaborn/utils.py", line 512, in get_dataset_names
with urlopen(url) as resp:
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/urllib/request.py", line 216, in urlopen
return opener.open(url, data, timeout)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/urllib/request.py", line 519, in open
response = self._open(req, data)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/urllib/request.py", line 536, in _open
result = self._call_chain(self.handle_open, protocol, protocol +
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/urllib/request.py", line 496, in _call_chain
result = func(*args)
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/urllib/request.py", line 1391, in https_open
return self.do_open(http.client.HTTPSConnection, req,
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/urllib/request.py", line 1351, in do_open
raise URLError(err)
urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:997)>
맨 아래줄에 [SSL: CERTIFICATE_VERIFY_FAILED]가 눈에 보여 검색에 들어갔습니다. 인증서 관련 문제로 보여 검색에 들어가 봤습니다.
3. 맥북에서 파이썬 인증
Finder에서 Python을 찾아보면 그 안에 아래와 같이 보일 겁니다. 아래 하이라이트 되어 있는 파일 'install Certification.command'를 더블클릭하면 터미널이 실행되면서 설치를 진행합니다. 그 이후 인증 관련 에러가 사라집니다.
4. 마치며
파이썬의 라이브러리를 설치하고 실행할 때 발생되는 에러에 대해 단순히 코딩의 실수에서만 나타나는 오류가 아닌 이런 시스템적인 에러를 만나게 되면 난감한 경우가 있습니다. 특히, 윈도우에서는 잘 발생하진 않지만 맥북에서는 이러한 오류가 종종 나타나서 맥북을 사용하는 유저한테는 조금의 불편함이 있을 수 있습니다. 저도 이러한 오류가 발생할 때마다 잘 정리해서 맥북의 사용성을 좀 더 높여보려고 합니다
댓글