Porém, se o curl
próprio comando falhar com erro ou a "versão do protocolo de alerta tlsv1" persistir mesmo após a atualização pip
, significa que a versão da biblioteca OpenSSL subjacente do sistema operacional < 1.0.1
ou a versão Python < 2.7.9
(ou < 3.4
no Python 3) não suporta o protocolo TLS 1.2 mais recente que pip
precisa se conectar ao PyPI desde cerca de um ano atrás . Você pode verificá-lo facilmente no interpretador Python:
>>> import ssl
>>> ssl.OPENSSL_VERSION
'OpenSSL 0.9.8o 01 Jun 2010'
>>> ssl.PROTOCOL_TLSv1_2
AttributeError: 'module' object has no attribute 'PROTOCOL_TLSv1_2'
O AttributeError
(em vez do esperado '5') significa que o ssl
módulo stdlib do Python , compilado com a antiga openssl lib, não possui suporte para o protocolo TLSv1.2 (mesmo que a biblioteca openssl possa ou possa ser atualizada posteriormente).
Felizmente, ele pode ser resolvido sem a atualização do Python (e de todo o sistema), instalando manualmente pacotes extras do Python - o guia detalhado passo a passo está disponível aqui no Stackoverflow .
Note, curl
e pip
e wget
todos dependem da mesma lib OpenSSL para estabelecer conexões SSL (uso $ openssl version
de comando). A libcurl suporta o TLS 1.2 desde a versão curl 7.34 , mas as versões curl mais antigas devem poder se conectar se você tiver o OpenSSL versão 1.0.2 (ou posterior).
PS
Para Python 3 , use python3
e em pip3
qualquer lugar (a menos que você esteja em um venv / virtualenv), incluindo o curl
comando acima :
$ curl https://bootstrap.pypa.io/get-pip.py | python3 --user