“Módulo ssl em Python não está disponível” ao instalar o pacote com pip3

122

Instalei o Python 3.4 e o Python 3.6 em minha máquina local com sucesso, mas não consigo instalar os pacotes com pip3.

Quando executo pip3 install <package>, recebo o seguinte erro relacionado ao SSL :

pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
Collecting <package>
  Could not fetch URL https://pypi.python.org/simple/<package>/: There was a problem confirming the ssl certificate: Can't connect to HTTPS URL because the SSL module is not available. - skipping
  Could not find a version that satisfies the requirement <package> (from versions: )
No matching distribution found for <package>

Como posso corrigir minha instalação do Python3.x para poder instalar os pacotes pip install <package>?

Harukaze
fonte
4
Você instalou explicitamente o pip3 em seu ubuntu com o comando sudo apt-get install python3-pip??
Sidahmed
2
Por favor, tente pip3 install --upgrade pipver se você recebe a mesma mensagem ou não.
herry

Respostas:

92

Guia passo a passo para instalar Python 3.6 e pip3 no Ubuntu

  1. Instale os pacotes necessários para Python e ssl: $ sudo apt-get install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev

  2. Baixe e descompacte "Python-3.6.8.tar.xz" de https://www.python.org/ftp/python/ em seu diretório inicial.

  3. Abra o terminal nesse diretório e execute: $ ./configure

  4. Construir e instalar: $ sudo make && sudo make install

  5. Instale pacotes com: $ pip3 install package_name

arsho
fonte
4
Trabalhou no "Raspbian GNU / Linux 9 (esticar)"
Oktay
2
Obrigado! Eu estava andando em círculos colocando o python3 funcionando no Ubuntu 14.04 até encontrar esta lista de comandos.
jerrylogansquare
2
Meu salvador Ubuntu.
markroxor
6
Isso funcionou para mim. Muito Obrigado. Uma coisa que eu não conseguia entender, por que não começar com a etapa 4 e apenas "make; make install" uma vez?
Avestruz Parafiliac
1
Trabalhou no Ubuntu Beaver. Eu estava usando python3.7 e pip 19, sempre com problema de SSL .....
eduardosufan
62

Se você estiver no Red Hat / CentOS:

# To allow for building python ssl libs
yum install openssl-devel
# Download the source of *any* python version
cd /usr/src
wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tar.xz
tar xf Python-3.6.2.tar.xz 
cd Python-3.6.2

# Configure the build w/ your installed libraries
./configure

# Install into /usr/local/bin/python3.6, don't overwrite global python bin
make altinstall
The Aelfinn
fonte
funcionou para o python 2.7 também. basta adicionar make e fazer altinstall
Jabda
Se precisar do virtualenv, você deve executar sudo /usr/local/bin/pip3.7 install virtualenv. Obrigado por esta resposta!
tecnocrata
excelente, eu estava tendo problemas para instalar o python 2.7.13 para uma imagem docker legada e precisava openssl-develexecutá-lopython2.7 get-pip.py
Felipe
59

Se você estiver no Windows e usar o anaconda, isso funcionou para mim:

Eu tentei muitas outras soluções que não funcionaram (Mudanças na variável de ambiente PATH ...)

O problema pode ser causado por DLLs na pasta Windows \ System32 (por exemplo, libcrypto-1_1-x64.dll ou libssl-1_1-x64.dll ou outros) colocados lá por outro software.

A correção era instalar openSSL de https://slproweb.com/products/Win32OpenSSL.html que substitui as dlls por versões mais recentes.

Juergi
fonte
2
Acabei de instalar. Na lista de programas instalados em meu sistema, tenho três versões do OpenSSL (duas versões de 64 bits e uma versão de 32 bits, embora esteja em um sistema de 64 bits). Não estou ciente de ter instalado todos eles, então os deixei lá.
julho de
1
Esta foi a solução mais direta que encontrei depois de muita pesquisa. Pip não estava funcionando devido a um erro de OpenSSL. O Spyder também travou na inicialização devido a um erro "não é possível importar o nome 'HTTPSHandler' de 'urllib.request'". Isso foi isolado para o windows 10 python 3 para mim. Comentando para ajudar a conectar a solução para as pessoas pesquisando no Google, a maioria dos resultados principais eram soluções antigas e complexas.
Dick McManus
8
Se você estiver no Windows e usar o Anaconda, apenas use o Prompt do Anaconda em vez do cmd para executar o "pip install". Nenhuma alteração adicional de DLL / SSL será necessária.
FatihAkici
1
@FatihAkici - Muito obrigado. Isso me ajudou.
Raju Penumatsa
2
Eu estava prestes a quebrar meu computador, usei o pycharm em várias máquinas e sistemas operacionais, mas neste novo Windows instalei o anaconda e parece que quebrou o pip. Fiquei navegando por umas 2 horas, muito obrigado cara. <3
Benoit F
35

Tive um problema semelhante no OSX 10.11 devido à instalação do memcached, que instalou o python 3.7 no topo do 3.6.

AVISO: o pip é configurado com locais que exigem TLS / SSL, mas o módulo ssl em Python não está disponível.

Gastei horas para desvincular o openssl, reinstalar, mudar caminhos ... e nada ajudou. Mudar a versão do openssl de volta para a versão mais antiga funcionou:

brew switch openssl 1.0.2e

Não vi essa sugestão em nenhum lugar da internet. Espero que sirva a alguém.

dsomnus
fonte
3
Tive o mesmo problema com o MacOS Catalina 10.5.4 (Beta), agora funciona. Obrigado!
Peter Rosemann
14
Para mim foi brew switch openssl 1.0.2s. Mas foi só isso. Você me salvou, obrigado!
antonio
3
Estou tentando fazer isso, mas continua me dizendo que o openssl não tem uma versão "1.0.2e" na adega. O openssl não tem uma versão "1.0.2s" na Adega.
James Parker
Antonio, James: qualquer versão mais antiga que você tiver. Minha adega tinha 1.0.2e, então usei isso. Estou feliz que ajudou.
dsomnus
4
Muito obrigado! Para mim, sua solução de mudar para uma versão mais antiga opensslfuncionou: brew switch openssl 1.0.2t estou no Mac OS Catalina 10.15.3. Espero que ajude.
viraj.kulkarni
25

Concordo com a resposta da mastaBlasta. Funcionou para mim. Encontrei o mesmo problema da descrição do tópico.

Ambiente: MacOS Sierra. E eu uso o Homebrew.

Minha solução:

  1. Reinstale o openssl por brew uninstall openssl; brew install openssl
  2. De acordo com as dicas fornecidas pelo Homebrew, faça o seguinte:

    echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.bash_profile
    export LDFLAGS="-L/usr/local/opt/openssl/lib"
    export CPPFLAGS="-I/usr/local/opt/openssl/include"
nathanyu
fonte
3
Obrigado, o truque é brew uninstall openssl, brew install openssl. Eu tentei, brew reinstall opensslmas não teve efeito. Mas a desinstalação / instalação funciona!
Jeff Tian
6
teve que correrbrew uninstall --ignore-dependencies openssl
elad silver
16

No Ubuntu, isso pode ajudar:

cd Python-3.6.2
./configure --with-ssl
make
sudo make install
Tingtinghuang
fonte
4
Por que realmente temos que construir python a partir da fonte para isso? não há uma solução que funcione com distribuições python padrão? Eu esperava ingenuamente que adicionar este módulo fosse possível sem substituir o binário do python, para o qual nem sempre sabemos facilmente o local de origem correspondente, em um sistema ativo que não foi instalado recentemente.
matanster
Tentei fazer isso, não mudou nada
usuário
9
Recebo um aviso dizendo que esta opção não é reconhecida
ma3oun
Tive que anexar vários 'sudo' a esses comandos, mas eles funcionaram onde outras respostas falharam!
Paco Abato
6

O downgrade do openssl funcionou para mim,

brew switch openssl 1.0.2s
Nishant Nawarkhede
fonte
1
funcionou para mim, muito obrigado
Mazhar Ahmed
5

O problema provavelmente foi causado pela ausência da biblioteca.

Antes de instalar o python 3.6, certifique-se de instalar todas as bibliotecas necessárias para o python.

$ sudo apt-get install build-essential checkinstall 
$ sudo apt-get install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev

Mais informações em Como instalar o Python 3.6.0 no Ubuntu e LinuxMint

PengShaw
fonte
5

Se você estiver no OSX e compilou o python da fonte:

Instale o openssl usando o brew brew install openssl

Certifique-se de seguir as instruções fornecidas pela mistura sobre como configurar seu CPPFLAGSe LDFLAGS. No meu caso, estou usando a [email protected]fórmula de preparação e preciso dessas 3 configurações para o processo de compilação do python vincular corretamente à minha biblioteca SSL:

export LDFLAGS="-L/usr/local/opt/[email protected]/lib"
export CPPFLAGS="-I/usr/local/opt/[email protected]/include"
export PKG_CONFIG_PATH="/usr/local/opt/[email protected]/lib/pkgconfig"

Supondo que a biblioteca esteja instalada naquele local.

mastaBlasta
fonte
ainda o mesmo problema
Gaurav Paliwal
Tente reinstalar pip
mastaBlasta
@GauravPaliwal, @mastaBlasta: Para mim, mudar para uma versão mais antiga opensslfuncionou: brew switch openssl 1.0.2t estou no Mac OS Catalina 10.15.3. Espero que ajude.
viraj.kulkarni
5

Eu encontrei o mesmo problema no Windows 10. Meu problema específico é devido à minha instalação do Anaconda. Instalei o Anaconda e sob o caminho Path/to/Anaconda3/, aí vem o python.exe. Portanto, não instalei o python porque o Anaconda inclui o python. Ao usar o pip para instalar pacotes, encontrei o mesmo relatório de erro pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.,.

A solução foi a seguinte:

1) você pode baixar o python novamente no site oficial ;

2) Navegue até o diretório onde "Python 3.7 (64-bit).lnk"está localizado

3) import ssleexit()

4) digite cmd, "Python 3.7 (64-bit).lnk" -m pip install tensorflowpor exemplo.

Aqui, está tudo pronto.

Yanqi Huang
fonte
Não é uma solução, mas definitivamente dá conta do recado. Pelo menos ajuda você a instalar dependências ausentes. O que percebi em minha máquina local é que havia entradas conflitantes em minha variável PATH para python (ou seja, Anaconda 2.7 de 64 bits e Python 3.7 de 32 bits)
AP.
Também para melhorar essa resposta, você pode armazenar o caminho absoluto em uma variável e executá-lo como: cmd /c $py .\main.py( Powershell ) ou cmd /c %py% .\main.py( Dos ). Isso irá executá-lo em seu shell existente e pode ser programado
AP.
5

Se você estiver no Windows e usar o Anaconda, você pode tentar executar o comando "pip install ..." no prompt do Anaconda em vez de cmd.exe, como o usuário willliu1995 sugere aqui . Esta foi a solução mais rápida para mim, que não requer instalação de componentes adicionais.

Borboleta
fonte
4

Tentei MUITAS maneiras de resolver este problema e nenhuma resolveu. Atualmente estou no Windows 10.

A única coisa que funcionou foi:

  • Desinstalar Anaconda
  • Desinstale o Python (eu estava usando a versão 3.7.3)
  • Instale o Python novamente (lembre-se de marcar a opção para adicionar automaticamente ao PATH)

Então baixei todas as bibliotecas de que precisava usando o PIP ... e funcionou!

Não sei por que, ou se o problema estava de alguma forma relacionado ao Anaconda.

João ignacio
fonte
3

para usuários osx brew

meu problema apareceu relacionado à minha instalação do python e foi rapidamente resolvido reinstalando o python3 e o pip. Acho que começou a funcionar mal após uma atualização do sistema operacional, mas quem sabe (no momento estou no Mac OS 10.14.6)

brew reinstall python3 --force
# setup pip
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python3 get-pip.py
# installa pkg successfully 
pip install pandas
lfender6445
fonte
Obrigado por esta resposta! No meu caso, os problemas começaram após a atualização para o Catalina (10.15.3), e descobri que o seu primeiro passo brew reinstall python3 --forcefoi suficiente: pipfuncionou novamente depois disso, não precisei reinstalar pip.
PLL
3

Você pode fazer um dos dois:

  1. Ao instalar o Anaconda, selecione a opção para adicionar o Anaconda ao caminho .

ou

  1. Encontre esses caminhos (completos) na pasta de instalação do Anaconda e adicione-os à variável de ambiente :

\ Anaconda

\ Anaconda \ Library \ mingw-w64 \ bin

\ Anaconda \ Library \ usr \ bin

\ Anaconda \ Library \ bin

\ Anaconda \ Scripts

\ anaconda \ Library

\ anaconda \ condabin

Adicione os caminhos acima à variável de sistema "Path" e ele não deve mais mostrar o erro :)

Aymusbond
fonte
1
Uma alternativa é usar o 'prompt do anaconda' específico, que possui essas variáveis ​​de ambiente configuradas corretamente.
Tuula
2

Eu estava tendo o mesmo problema e fui capaz de resolver com as seguintes etapas:

sudo yum install -y libffi-devel
sudo yum install openssl-devel
cd /usr/src
sudo wget https://www.python.org/ftp/python/3.7.1/Python-3.7.1.tar.xz
sudo tar xf Python-3.7.1.tar.xz
cd Python-3.7.1
sudo ./configure --enable-optimizations
# Install into /usr/local/bin/python3.7, don't overwrite global python bin
sudo make altinstall

dependendo das permanências, você pode não precisar do sudo.

Results:
Collecting setuptools
Collecting pip
Installing collected packages: setuptools, pip
Successfully installed pip-10.0.1 setuptools-39.0.1

agora deve ser capaz de executar

python3.7 -V 

e

pip3.7 -V

Ao instalar pacotes:

pip3.7 install pandas

ou dependendo das permanências, você também pode adicionar o sinalizador --user assim:

pip3.7 install pandas --user
RubenD
fonte
2

O sslmódulo é um wrapper TLS / SSL para acessar o soquete do Sistema de Operação (OS) ( Lib / ssl.py ). Portanto, quando o sslmódulo não está disponível, é provável que você não tenha as bibliotecas do OS OpenSSL instaladas ou que essas bibliotecas não tenham sido encontradas ao instalar o Python. Suponhamos que seja um caso posterior (também conhecido como: você já tem o OpenSSL instalado, mas eles não estão vinculados corretamente ao instalar o Python).

Também assumirei que você está instalando a partir da fonte. Se você estiver instalando a partir de um binário (por exemplo: arquivo Window .exe) ou pacote (Mac .dmg ou Ubuntu apt), não há muito que você possa fazer com o processo de instalação.

Durante a etapa de configuração da instalação do Python, você precisa especificar onde o OS OpenSSL será usado para vinculação:

# python 3.8 beta
./configure --with-openssl="your_OpenSSL root"

Então, onde você encontrará o diretório OpenSSL instalado?

# ubuntu 
locate ssl.h | grep '/openssl/ssl.h'

/home/user/.linuxbrew/Cellar/openssl/1.0.2r/include/openssl/ssl.h
/home/user/envs/py37/include/openssl/ssl.h
/home/user/miniconda3/envs/py38b3/include/openssl/ssl.h
/home/user/miniconda3/include/openssl/ssl.h
/home/user/miniconda3/pkgs/openssl-1.0.2s-h7b6447c_0/include/openssl/ssl.h
/home/user/miniconda3/pkgs/openssl-1.1.1b-h7b6447c_1/include/openssl/ssl.h
/home/user/miniconda3/pkgs/openssl-1.1.1c-h7b6447c_1/include/openssl/ssl.h
/usr/include/openssl/ssl.h

Seu sistema pode ser diferente do meu, mas como você pode ver aqui, tenho muitas bibliotecas openssl diferentes instaladas. No momento em que este livro foi escrito, o python 3.8 espera o openssl 1.0.2 ou 1.1:

Python requer um libssl compatível com OpenSSL 1.0.2 ou 1.1 com X509_VERIFY_PARAM_set1_host ().

Portanto, você precisa verificar qual dessas bibliotecas instaladas pode usar para vincular, por exemplo

/usr/bin/openssl version

OpenSSL 1.0.2g  1 Mar 2016
./configure --with-openssl="/usr"
make && make install

Você pode precisar tentar alguns, ou instalar um novo, para encontrar a biblioteca que funcionaria para seu Python e seu sistema operacional.

bizi
fonte
1

No meu caso com o uso do Mac, eu apaguei /Applications/Python 3.7. porque eu já tinha o Python3.7 por brew install python3.

Mas foi o gatilho da mensagem

pip é configurado com locais que requerem TLS / SSL, no entanto, o módulo ssl em Python não está disponível.

O que eu fiz na minha situação

  1. Eu fiz o download do instalador MacOS 64-bit novamente, e instalado.
  2. Clique duas vezes /Applications/Python3.6/Install Certificates.commande /Applications/Python3.6/Update Shell Profile.command.
  3. Reiniciar mac
  4. E eu não tenho certeza, mas possivelmente contribuiu para o sucesso é pip.conf. Veja as falhas de instalação do pip .
araya
fonte
1

Eu finalmente resolvi esse problema. Estes são os detalhes do meu env:
Versão do Python para instalar: 3.6.8
OS: Ubuntu 16.04.6 LTS
Acesso à raiz: Não

Algumas pessoas sugerem instalar libssl-dev, mas não funcionou para mim. Eu sigo este link e consertei!
Resumindo, eu faço download, extraio, construo e instalo o OpenSSL (openssl-1.1.1b.tar.gz). Então, eu modifico o .bashrcarquivo seguindo este link .
Em seguida, faço o download e extraio o Python-3.6.8.tgz. Eu edito Modules / Setup.dist para modificar o caminho SSL (linhas em torno de # 211). Eu fiz ./configure --prefix=$HOME/opt/python-3.6.8, makee make install. Por último, eu modifico meu .bashrc. Observe que eu não incluo --enable-optimizationsem ./configure.

Donto
fonte
0

No macos, configure o python 3.8.1 com o comando abaixo para resolver o problema, acho que também funcionaria no Linux.

./configure --enable-optimizations --with-openssl=/usr/local/opt/openssl@1.1/

mude o parâmetro dir com base em seu sistema.

user3857893
fonte
0

Se você estiver no OSX e no caso de as outras soluções não funcionarem para você (assim como eu).

Você pode tentar desinstalar o python3 e atualizar o pip3

brew uninstall --ignore-dependencies python3
pip3 install --upgrade pip   

Isso funcionou para mim;)

Inishchith
fonte
0

(NÃO no Windows!)

Isso me fez arrancar o cabelo por uma semana, então espero que isso ajude alguém

Tentei de tudo, exceto reinstalar o Anaconda e / ou Jupyter.

Configuração

  • AWS Linux
  • Anaconda 3-5.3.0 instalado manualmente
  • Python3 (3.7) estava rodando dentro do anaconda (ie, ./anaconda3/bin/python)
  • havia também /usr/bin/pythone /usr/bin/python3(mas eles não estavam sendo usados, pois a maior parte do trabalho foi feito no terminal de Jupyter)

Consertar

No terminal de Jupyter:

cp /usr/lib64/libssl.so.10 ./anaconda3/lib/libssl.so.1.0.0

cp /usr/lib64/libcrypto.so.10 ./anaconda3/lib/libcrypto.so.1.0.0

O que desencadeou isso?

Então, tudo isso estava funcionando até que tentei fazer um conda install conda-forge

Não tenho certeza do que aconteceu, mas conda deve ter atualizado opensslna caixa (eu estou supondo) então depois disso, tudo quebrou.

Basicamente, sem que eu saiba, conda atualizou o openssl, mas de alguma forma excluiu as bibliotecas antigas e as substituiu por libssl.so.1.1e libcrypto.so.1.1.

Python3, eu acho, foi compilado para procurar libssl.so.1.0.0

No final, a chave para o diagnóstico era esta:

python -c "import ssl; print (ssl.OPENSSL_VERSION)"

deu a pista library "libssl.so.1.0.0" not found

A grande suposição que fiz é que a yumversão de ssl é a mesma que a condaversão, então apenas renomear o objeto compartilhado pode funcionar, e funcionou.

Minha outra solução foi recompilar o python, reinstalar o anaconda, etc, mas no final estou feliz por não precisar.

Espero que isso ajude vocês.

Oz nevado
fonte
0

No caso de usar pyenvpara gerenciar instalações de python no Mac OS Catalina, tive que instalar opensslcom brew primeiro e depois executar o pyenv install 3.7.8que parecia construir a instalação de python usando o opensslhomebrew (até disse isso na saída da instalação). Então pyenv global 3.7.8e eu fui embora.

ProperBritish
fonte
0

Consegui consertar isso atualizando a versão do Python neste arquivo. pyenv: a versão `3.6.5 'não está instalada (definida por /Users/taruntarun/.python-version) Embora eu tivesse a versão mais recente instalada, meu comando ainda estava usando a versão 3.6.5 anterior

Mudando para a versão 3.7.3

Tarun Singh
fonte
-1

Eu estava tendo o mesmo problema nos últimos dois dias e só resolvi agora.

Tentei usar a --trust-hostopção com o DigiCert_High_Assurance_EV_Root_CA.pemnão funcionou, não consegui instalar o módulo ssl (indica que não pode ser instalado para versões de python superiores a 2.6), definir a $PIP_CERTvariável também não corrigiu libssl1.0.2e libssl1.0.0instalei. Também vale a pena mencionar que não tinha um ~/.pip/pip.confarquivo, e criá-lo também não resolveu o bug.

O que finalmente resolveu foi instalar o python3.6 makenovamente. Baixe o Python-3.6.0.tgz a partir do site, executar configure, em seguida make, make teste make install. Espero que funcione para você.

EC Lobo
fonte
2
Desculpe, mas tive que votar negativamente devido a isso simplesmente dizendo para repetir os mesmos passos que causaram este erro. Não sei como você esperaria executar os mesmos comandos na mesma fonte Python e obter resultados diferentes!
Jamie Lindsey
-1

A documentação do Python é realmente muito clara, e seguir as instruções funcionou, enquanto outras respostas que encontrei aqui não corrigiam esse problema.

  1. primeiro, instale o python 3.xx da fonte usando, por exemplo, com a versão 3.6.2 https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tar.xz

  2. certifique-se de ter o openssl instalado executando brew install openssl

  3. descompacte-o e mova para o diretório python: tar xvzf Python-3.6.2.tar.xz && cd Python-3.6.2

  4. então, se a versão do python for <3.7, execute

CPPFLAGS="-I$(brew --prefix openssl)/include" \ LDFLAGS="-L$(brew --prefix openssl)/lib" \ ./configure --with-pydebug 5. finalmente, execute make -s -j2( -sé o sinalizador silencioso, -j2diz à sua máquina para usar 2 tarefas)

pglaser
fonte
j é o mnemônico para “jobs”, que é o número de processos executados em paralelo na construção. Quanto ao sinalizador s, ele ainda exibe avisos, mas sem o ruído adicional dos níveis de informação / depuração. Esses sinalizadores são usados ​​nas instruções de documentação do python.
pglaser
-1

Eu tive o mesmo problema ao tentar instalar o python3.7 em uma máquina ubuntu14.04. O problema era que eu tinha algumas pastas personalizadas em meu PKG_CONFIG_PATH e em meu LD_LIBRARY_PATH, o que impedia o processo de construção do python de encontrar as bibliotecas do sistema openssl.

então tente eliminá-los e ver o que acontece:

export PKG_CONFIG_PATH=""
export LD_LIBRARY_PATH=""
Loki
fonte
2
Isso na verdade arruinaria o dia de alguém se eles tivessem coisas úteis nessas variáveis ​​de ambiente
matanster
-1

Ok, a última resposta para isso, a partir de agora não use Python 3.8 , use apenas 3.7 ou menos, porque a maioria das bibliotecas falham ao instalar com o erro acima

Ujju
fonte
Pelo que eu sei, o python usa pacotes subjacentes do sistema operacional. Coisas como gcc, openssle zlib. Portanto, é importante instalar esses pré-requisitos antes de compilar o python, especialmente quando usado no Linux.
stephen
@ surfer190 Eu uso windows, mas o que você disse pode ser verdade para ambos, eu acho
Ujju