Não é possível instalar os pacotes Python [SSL: TLSV1_ALERT_PROTOCOL_VERSION]

167

Estou tentando instalar uma biblioteca Python usando pip, obtendo um erro SSL:

~/projects/base  pre-master±  pip install xdict

Collecting xdict
  Could not fetch URL https://pypi.python.org/simple/xdict/: There was a problem confirming the ssl certificate: [SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 alert protocol version (_ssl.c:590) - skipping
  Could not find a version that satisfies the requirement xdict (from versions: )
No matching distribution found for xdict

versão do pip: pip 9.0.1

Como corrijo esse erro?

Nishant Nawarkhede
fonte
1
Siga esta resposta stackoverflow.com/a/46808948/2419644
Mitul Shah

Respostas:

443

Atualize o pip da seguinte maneira:

curl https://bootstrap.pypa.io/get-pip.py | python

Nota: Pode ser necessário usar sudo pythonacima, se não estiver em um ambiente virtual.

(Observe que a atualização pipusando pipie pip install --upgrade piptambém não a atualizará corretamente. É apenas um problema de galinha e ovo. pipNão funcionará a menos que você use TLS> = 1.2.)

Conforme mencionado nesta resposta detalhada , isso ocorre devido à recente descontinuação do TLS para o pip. Os sites Python.org interromperam o suporte às versões 1.0 e 1.1 do TLS.

Na página de status do Python:

Concluído - os brownouts contínuos estão concluídos e o TLSv1.0 e o TLSv1.1 foram desativados. 11 de abr, 15:37 UTC


Para usuários do PyCharm (virtualenv):

  1. Execute o ambiente virtual com shell. (substitua "./venv/bin/activate" pelo seu próprio caminho)

    source ./venv/bin/activate
  2. Executar atualização

    curl https://bootstrap.pypa.io/get-pip.py | python
  3. Reinicie sua instância do PyCharm e verifique seu intérprete Python em Preference .

Anupam
fonte
2
Isso funcionou para mim! Eu tive que adicionar sudona frente por causa de erros de permissão negada. Obrigado!
Simar
34
Requer o sudo para funcionar: curl https://bootstrap.pypa.io/get-pip.py | sudo python
Wallace
2
@Simar @Wallace sim, pode exigir sudose não estiver em um ambiente virtual. Adicionado esse bit também na resposta agora.
Anupam
1
Se você não estiver em um ambiente virtual pode ser necessário especificar o caminho para o binário python, como Ilya menciona abaixo
Chris
2
No OSX isso funcionou melhor para mimcurl https://bootstrap.pypa.io/get-pip.py | sudo -H python3
Nick Fox
26

Porém, se o curlpró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.1ou a versão Python < 2.7.9(ou < 3.4no Python 3) não suporta o protocolo TLS 1.2 mais recente que pipprecisa 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 sslmó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, curle pipe wgettodos dependem da mesma lib OpenSSL para estabelecer conexões SSL (uso $ openssl versionde 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 python3e em pip3qualquer lugar (a menos que você esteja em um venv / virtualenv), incluindo o curlcomando acima :
$ curl https://bootstrap.pypa.io/get-pip.py | python3 --user

Alex C.
fonte
4
Também percebi que tinha que executar pip3, não apenas pip- verificar a versão com o comando -Vpara ter certeza de que você está executando o pip certo !!
Jan
9

A resposta da @ Anupam no OS X resultou no seguinte erro, independentemente das permissões em que o executei:

Não foi possível instalar os pacotes devido a um EnvironmentError: [Erro 13] Permissão negada: ...

O que acabou por funcionar foi baixar um pacote pip (9.0.3) mais recente do PyPI diretamente do meu navegador - https://pypi.org/simple/pip/ , extrair o conteúdo e instalar o pacote localmente:

pip install ./pip-9.0.3/

Isso corrigiu meus [SSL: TLSV1_ALERT_PROTOCOL_VERSION]erros.

T Dub
fonte
7

A solução da @Anupam funcionou para mim. No entanto, eu tive que usar sudoe especificar a localização exata do meu ambiente Python virtual:

curl https://bootstrap.pypa.io/get-pip.py | sudo /Users/{your user name}/{path to python}/bin/python
Ilya Gazman
fonte
6

Para atualizar a versão local, usei uma pequena variante:

curl https://bootstrap.pypa.io/get-pip.py | python - --user

Esse problema surge se você mantiver seu pip e pacotes no diretório inicial, conforme descrito nesta lista .

Hbar
fonte
5

A seguinte solução funcionou para mim:

brew install python2

Também foi atualizado pippara a versão 1.10.1

Monish Lalchandani
fonte
^ este para aqueles de nós que não usam o python padrão no OSX. Eu acho que a pergunta não era específica para OSX, mas de qualquer maneira, se você não estiver executando o Linux, isso funcionará - a menos que você esteja escrevendo conteúdo sobre o Python instalado no sistema.
jar
Este funcionou para mim, eu uso o python no OSX. Minha situação: passei uma semana tentando instalar qualquer pacote pip e ele falhou. Desinstalei o pip e, a partir desse momento, não posso fazer nada até obter esse comando que instalou o pip para mim. Obrigado!
AMM
3

Verifique sua versão do TLS:

python2 -c "import urllib2,json; print(json.loads(urllib2.urlopen('https://www.howsmyssl.com/a/check').read())['tls_version'])"

Se sua versão do TLS for menor que 1.2, será necessário atualizá-la, pois o repositório PyPI está em um período de indisponibilidade de descontinuação do TLS inicial.

Source - Hora de atualizar seu Python: o TLS v1.2 em breve será obrigatório

Você pode atualizar a versão TLS usando o seguinte comando:

sudo apt-get update && sudo apt-get install openssl libssl-dev

Isso deve solucionar seu problema. Boa sorte!

EDIT: Você pode baixar pacotes usando seu próprio repositório de pacotes python, independentemente da versão do TLS. Repositório Privado de Pacotes Python

Vithulan
fonte
2

Isso funcionou para mim. Adicione sudo antes do python

curl https://bootstrap.pypa.io/get-pip.py |sudo python
Sugoi Reed
fonte
2

Para usuários do Python2 WIN10:

1. Desinstale o python completamente, inclua todas as pastas.

2. Busque e instale o último python-2.7.msi (versão 2.7.15)

3.Após o passo 2, você também pode encontrar o pip instalado.

4.Agora, se o sistema não foi alterado, você pode usar o pip para instalar pacotes agora. A "versão do protocolo de alerta tlsv1" não aparecerá.

Optimus Prime
fonte
2

Tentei todas as correções existentes e não funcionou para mim

Eu reinstalei o python 2.7 (também instalará o pip) baixando .pkg em https://www.python.org/downloads/mac-osx/

funciona para mim após a instalação baixado pkg

ponto chave
fonte
2

Também encontrei esse problema. O problema subjacente é que a biblioteca ssl nas versões Python 2.7 <2.7.9 não é mais compatível com o mecanismo pip.

Se você estiver executando o Windows e você (como nós) não puder atualizar facilmente de uma versão incompatível do 2.7, FWIW, descobri que se você copiar os seguintes arquivos de outra instalação da versão mais recente do Python (por exemplo, Python 2.7. 15) em outra máquina para sua instalação:

    Lib\ssl.py
    libs\_ssl.lib
    DLLs\_ssl.dll

efetivamente "atualizará" sua camada SSL para uma que seja suportada; pudemos usar o pip novamente, mesmo para atualizar o pip.

W. Sadkin
fonte
2

As respostas da instalação do pip via:

  1. curl https://bootstrap.pypa.io/get-pip.py |sudo python ou
  2. curl https://bootstrap.pypa.io/get-pip.py | python

não funcionou para mim, pois eu continuava recebendo o erro:

Could not fetch URL https://pypi.org/simple/pip/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.org', port=443): Max retries exceeded with url: /simple/pip/ (Caused by SSLError("Can't connect to HTTPS URL because the SSL module is not available.",)) - skipping
ERROR: Could not find a version that satisfies the requirement pip (from versions: none)
ERROR: No matching distribution found for pip

Eu tive que instalar pipmanualmente via:

  1. Acesse o site depip distribuição
  2. Baixe a tar.gzversão
  3. Descompacte o arquivo localmente e cdno diretório
  4. corre python setup.py install
pokkie
fonte
1

Isso funcionou para mim, instalei a versão mais recente do pip e instalei a biblioteca ( ciscoconfparse ).

Atualizando pip:

curl https://bootstrap.pypa.io/get-pip.py | sudo /Users/{your user name}/{path to python}/bin/python
user9825640
fonte
1

myenv:

python 2.7.14

pip 9.0.1

mac osx 10.9.4


mysolution:

  1. faça o download get-pip.pymanualmente em https://packaging.python.org/tutorials/installing-packages/

  2. corre python get-pip.py


refs:

https://github.com/pypa/warehouse/issues/3293#issuecomment-378468534

https://packaging.python.org/tutorials/installing-packages/

Faça o download com segurança de get-pip.py [1]

Execute python get-pip.py. [2] Isso instalará ou atualizará o pip. Além disso, ele instalará as ferramentas de configuração e a roda, se ainda não estiverem instaladas.

Certifique-se de que pip, setuptools e wheel estejam atualizados

Enquanto o pip sozinho é suficiente para instalar a partir de arquivos binários pré-criados, cópias atualizadas dos projetos setuptools e wheel são úteis para garantir que você também possa instalar a partir dos arquivos de origem:

python -m pip install --upgrade pip setuptools wheel

Nick Dong
fonte
1

Eu também bati esse problema no meu windows10 e tentei todas as respostas, mas não resolvi o meu problema.

C: \ python367 \ Scripts> frasco de instalação do pip

Coletando o Flask Não foi possível encontrar uma versão que atenda ao requisito Flask (das versões:) Nenhuma distribuição correspondente encontrada para o Flask

Depois disso, acho que o arquivo de configuração do pip foi modificado. Então, defino pip.inicomo a configuração padrão original, execute novamente o comando pip e funcione para mim!

Em resumo da solução minha:

  1. Verifique se o pip.ini (geralmente no caminho C:\ProgramData\pip) foi modificado;

  2. Se sim na etapa 1, tente redefini-la para uma configuração padrão.

Lyn
fonte
1

Ou simplesmente a biblioteca necessária simplesmente não está no repositório. Sou novato em Python e todos os conselhos sobre a atualização do pip finalmente são mostrados como enganosos. Eu só tinha que olhar em https://pypi.org/ , encontrando a biblioteca (fluxo de ar no meu caso) parada em alguma versão antiga, após a qual ela foi renomeada. Sim, também essa solução boba também é possível :-).

Tomáš Záluský
fonte
1

Para todos os usuários python3e pip3usuários por aí:

curl https://bootstrap.pypa.io/get-pip.py | sudo python3

e então suponha que você queira instalar pandas

pip3 install pandas --user
HoKy22
fonte