SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:852)')
pip 명령어로 패키지를 설치하려고 하는데 다음과 같은 오류가 발생한 경우 해결방법입니다.
필자와 같이 내부망, 외부망이 나누어져 있는 환경 또는 인터넷망이 일반적이지 않고 특정 망을 타고 나가는 등 경우에는 아래와 같은 오류를 심심치 않게 만날 수 있습니다.
특정 주소에 있는 파일을 다이렉트로 설치하려고 할 때 보통 발생합니다.
SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:852)') |
위 오류 원인은 방화벽에서 pip 패키지 사이트들을 허용하지 않을 경우 발생할 수 있습니다.
예를 들면 회사 내부의 인터넷 망일 경우 그 회사에서 사이트를 막아 두거나 방화벽 정책 등에 의해서 막혀있을 수 있고
사용하는 서버? 컴퓨터 자체에 정책일 수 도 있습니다.
간편하게 해결하는 방법은 pip install 시 옵션을 사용하는 방식입니다.
pip install certifi --trusted-host pypi.python.org --trusted-host files.pythonhosted.org --trusted-host pypi.org |
[--trusted-host pypi.python.org --trusted-host files.pythonhosted.org --trusted-host pypi.org] 옵션을 사용하여 패키지 도메인들을 신뢰하는 방법입니다.
패키지 도메인은 이 밖에 다른 주소가 존재할 수 있습니다.
대부분의 블로그는 위와 같은 방식을 설명합니다.
위 방법이 한두번 사용하기에는 편리합니다.
예를 들면 pytorch 를 설치할 때 download.pytorch.org 주소에 있는 whl 파일을 설치하는 경우는 초반에 한번이면 됩니다.
이럴 경우에는 trusted-host 옵션을 활용하면 좋습니다.
혹은 미리 적어놓고 패키지 설치때마다 그냥 복사해서 사용해도 무관합니다.
하지만 위 방법은 단점이 존재합니다.
매번 옵션을 써줘야 하는 번거러움이 있습니다.
패키지를 초기에 설치하고 다시 추가될 것이 많이 않으면 상관이 없지만
새로운 패키지를 자주 설치해야 한다면 꽤 부담스러울 수 있습니다.
또한 패키지 서버마다 도메인이 다르기 때문에 해당 도메인을 작성해 줘야 합니다.
사실 패키지를 자주 설치하는 사람이라면 위 옵션정도는 그때그때 쓸 수 있지만
자주 사용하지 않는 사람들은 trusted-host 옵션이 잘 떠오르지 않아서 늘 검색하곤 합니다.
그래서 한번 설정하고 계속 사용할 수 있는 방법을 작성해 보았습니다.
그래서 global 설정을 해두면 다음부터는 항상 신뢰할 수 있습니다.
pip.conf (윈도우는 pip.ini)파일을 만들어야 합니다.
내용은 다음과 같습니다.
[global] trusted-host=pypi.python.org pypi.org files.pythonhosted.org |
해당 파일을 만들고 다음 위치에 복사해 두면 됩니다.
이렇게 등록해두면 한번 등록된 주소는 항상 신뢰하게 되고 다시 물어보는 일이 없습니다.
단 모든 사이트를 산발적으로 등록하게 된다면 추후에 보안문제가 발생할 수 있으니 조심해야 합니다.
신뢰할 수 없는 사이트를 등록해서는 안됩니다.
유닉스 계열 : $HOME/.config/pip/pip.conf
맥 : $HOME/Library/Application Support/pip/pip.conf 또는 $HOME/.config/pip/pip.conf
윈도우 : %UserProfile%\pip\pip.ini
끝