Eu estava tentando instalar o pycurl em um virtualenv usando pip e recebi este erro
ImportError: pycurl: libcurl link-time ssl backend (openssl) is different from compile-time ssl backend (none/other)
Eu li alguma documentação dizendo que "Para consertar isso, você precisa dizer ao setup.py qual backend SSL é usado" (fonte), embora não tenha certeza de como fazer isso, pois instalei o pycurl usando pip.
Como posso especificar o back-end SSL ao instalar o pycurl com pip?
obrigado
Respostas:
Depois de ler o arquivo INSTALLATION, consegui resolver o meu problema definindo uma variável de ambiente e fiz uma reinstalação
remover
pycurl
instalação existentepip uninstall pycurl
variável de exportação com seu back-end SSL de tempo de link (que é openssl acima)
export PYCURL_SSL_LIBRARY=openssl
em seguida, re-instalar
pycurl
com sem cachepip install pycurl --no-cache-dir
Não poderia haver outra solução lá fora, mas isso funciona perfeitamente para mim em um
virtualenv
epip
instalação.fonte
PYCURL_SSL_LIBRARY=openssl
funciona perfeitamente!set -x PYCURL_SSL_LIBRARY openssl
vez deexport PYCURL_SSL_LIBRARY=openssl
se usar o console do fish em vez do bash .A resposta de helloworld2013 está correta, mas a chave corresponde à biblioteca SSL que pycurl espera. O erro será algo como:
pycurl: backend ssl de tempo de link libcurl ( <library> ) é diferente do backend ssl de tempo de compilação ( <library> ou " nenhum / outro ")
Para consertar, você deve usar a biblioteca que pycurl está esperando. No meu caso, meu erro foi " pycurl: libcurl link-time ssl backend ( nss ) é diferente do tempo de compilação ssl backend (openssl) ", então minha correção foi:
fonte
PYCURL_SSL_LIBRARY
está sendo completamente ignorado. O backend ssl de tempo de compilação é sempre "(nenhum / outro)" para mim, emboraecho PYCURL_SSL_LIBRARY
dêopenssl
.pycurl
e instalei com os sinalizadores:pip install --global-option="--with-openssl" --global-option=build_ext --global-option="-L/usr/local/opt/openssl/lib" --global-option="-I/usr/local/opt/openssl/include" pycurl
pip install pycurl --compile --no-cache-dir
no CentOS 7.3.Com OSX 10.13, um openSSL instalado e virtualenv, tive sucesso com:
fonte
brew reinstall openssl
Com o pip 7.1, você pode colocar o seguinte em seu arquivo de requisitos:
pycurl==7.19.5.1 --global-option="--with-nss"
Basta substituir o nss pela biblioteca de back-end ssl relevante.
fonte
O método para corrigir o pycurl após a atualização do Mac OS High Sierra:
Reinstale as bibliotecas curl para usar OpenSSL em vez de SecureTransport
brew install curl --with-openssl
Instale o pycurl com ambiente e caminhos de tempo de construção corretos
export PYCURL_SSL_LIBRARY=openssl pip uninstall pycurl pip install --no-cache-dir --global-option=build_ext --global-option="-L/usr/local/opt/openssl/lib" --global-option="-I/usr/local/opt/openssl/include" --user pycurl
fonte
--user
bandeira como acima, recebi:Can not perform a '--user' install. User site-packages are not visible in this virtualenv.
Isso funcionou para mim:
Nada disso funcionou para mim (observe que a diferença é simplesmente easy_install vs pip):
pip uninstall pycurl export PYCURL_SSL_LIBRARY=[nss|openssl|ssl|gnutls] pip install pycurl #xor curl -O https://pypi.python.org/packages/source/p/pycurl/pycurl-7.19.3.1.tar.gz #... python setup.py --with-[nss|openssl|ssl|gnutls] install
fonte
easy_install
opção foi a única que funcionou. Não entendo por que isso é tão complicado. Eu precisavaexport PYCURL_SSL_LIBRARY=openssl
. Meu um relatou "nenhum / outro" para a biblioteca compilada.Eu tive esse problema por dias. Finalmente, com a ajuda de outras respostas aqui (principalmente de Alexander Tyapkov), fiz funcionar para o AWS Elastic Beanstalk.
Instalação manual (conectando com SSH):
sudo pip uninstall pycurl curl -O https://pypi.python.org/packages/source/p/pycurl/pycurl-7.43.0.tar.gz sudo pip install pycurl-7.43.0.tar.gz --global-option="--with-nss"
IMPORTANTE: Observe que você deve ter certeza de que está usando a versão atual do Python e do PIP, caso contrário, você pode estar compilando para Python 2.xe usando v3.x.
Instalação automática no Elastic Beanstalk:
files: "/usr/local/share/pycurl-7.43.0.tar.gz" : mode: "000644" owner: root group: root source: https://pypi.python.org/packages/source/p/pycurl/pycurl-7.43.0.tar.gz commands: 01_download_pip3: # run this before PIP installs requirements as it needs to be compiled with OpenSSL command: 'curl -O https://bootstrap.pypa.io/get-pip.py' 02_install_pip3: # run this before PIP installs requirements as it needs to be compiled with OpenSSL command: 'python3 get-pip.py' 03_pycurl_uninstall: # run this before PIP installs requirements as it needs to be compiled with OpenSSL command: '/usr/bin/yes | sudo pip uninstall pycurl' 04_pycurl_download: # run this before PIP installs requirements as it needs to be compiled with OpenSSL command: 'curl -O https://pypi.python.org/packages/source/p/pycurl/pycurl-7.43.0.tar.gz' 05_pycurl_reinstall: # run this before PIP installs requirements as it needs to be compiled with OpenSSL command: 'sudo pip install pycurl-7.43.0.tar.gz --global-option="--with-nss"' container_commands: 09_pycurl_reinstall: # run this before PIP installs requirements as it needs to be compiled with OpenSSL # the upgrade option is because it will run after PIP installs the requirements.txt file. # and it needs to be done with the virtual-env activated command: 'source /opt/python/run/venv/bin/activate && pip3 install /usr/local/share/pycurl-7.43.0.tar.gz --global-option="--with-nss" --upgrade'
Tive esse problema porque estava tentando configurar o Celery 4 com Django 1.10 no Elastic Beanstalk. Se for esse o seu caso, escrevi um post completo no blog sobre isso .
fonte
Estou no CentOS 7. Tentei todas as opções acima e não consegui fazer nada funcionar. Acontece que eu precisava executá-los como usuário root. Portanto, se você estiver tendo problemas, tente qualquer uma das soluções acima como usuário root. Por exemplo, aqui está o que funcionou para mim:
Claro, todas as isenções de responsabilidade usuais sobre a execução como um usuário root se aplicam.
Nota: [nss | openssl | ssl | gnutls] no código acima significa escolher um, e não inclui os colchetes ou tubos. A pessoa que fez a pergunta original teria escolhido o opensl. No meu caso particular, escolhi nss. Sua mensagem de erro deve informar qual escolha fazer.
Edição 2019: Fazer um
sudo pip install
pode causar um problema com a instalação do Python no sistema da máquina. Talvez tente trabalhar em um ambiente virtual Python e instalar os pacotes lá. Se isso não funcionar, o truque do sudo em minha resposta é provavelmente uma das últimas opções a serem consideradas.fonte
Você pode baixar o arquivo tar.gz aqui . Em seguida, extraia-o em uma pasta. Você encontrará um arquivo setup.py lá. Execute o comando ali que o site mencionou. Por exemplo:
python setup.py --with-[ssl|gnutls|nss] install
Para sua informação: Tentei instalar o pycurl nas minhas janelas, mas não consegui. Mas fiz no meu linux.
fonte
Estou executando isso no OS X e algumas das soluções acima não estavam funcionando. Semelhante ao comentário de Edward Newell, a
PYCURL_SSL_LIBRARY
variável parecia ter sido completamente ignorada.A leitura posterior do documento de instalação do PycURL revelou o seguinte:
Portanto, tive que forçá-lo a compilar com:
pip install --compile pycurl
Isso funciona em vários casos. No entanto, encontrei alguns sistemas que continuaram a ignorar a variável, então, semelhante à resposta de maharg101 , recorri às opções de instalação que por meio do pip podem ser definidas assim:
pip install pycurl --global-option="--with-[ssl|gnutls|nss]"
onde você seleciona uma das três opções dentro dos colchetes. Observe que a opção disponível é
ssl
e nãoopenssl
. Se você especificar,--with-openssl
receberá um erro. Observe também que se você estivesse mexendo com aPYCURL_SSL_LIBRARY
variável e mudando-a para valores estranhos para ver o que aconteceria, esse último comando definitivamente o pegará e gerará um erro se o valor estiver definido, mas não for válido.fonte
pip install pycurl --global-option="--with-nss"
trabalhos para mim. Para registro, meu erro éImportError: pycurl: libcurl link-time ssl backend (nss) is different from compile-time ssl backend (openssl)
Reinstalação do curl
Tentei todas as sugestões desta discussão, mas ninguém trabalhou para mim. Como solução, reinstalei o curl e o curlib. Depois disso, fui capaz de instalar o pycurl com suporte a ssl dentro do ambiente.
No início:
Parte 1. Re/Instalação com pip
Em primeiro lugar, removi o pycurl do virtualenv usando o pip, conforme sugerido nas respostas anteriores:
pip uninstall pycurl export PYCURL_SSL_LIBRARY=openssl pip install pycurl --global-option="--with-openssl"
A ideia aqui é que o pacote foi armazenado em cache e nós apenas o reinstalamos com a opção openssl.
Também tentei recompilar pycurl com pip usando:
..mas teve o mesmo erro após executar:
python import pycurl pycurl.version
Parte 2. Instalação do alcatrão
Depois que o método anterior não funcionou, decidi instalar o pycurl do tar com:
curl -O https://pypi.python.org/packages/source/p/pycurl/pycurl-7.43.0.tar.gz sudo tar -xzvf pycurl-7.43.0.tar.gz cd pycurl-7.43.0/ sudo python setup.py --with-ssl install
Ele instalou o pycurl globalmente, mas não no virtualenv. Também não verifiquei se foi instalado com suporte SSL ou não mas acho que ainda sem SSL.
Parte 3. Reinstalação de curl e curllib
Finalmente entendi que o pycurl não é instalado normalmente no ambiente porque o global curl e o libcurl são compilados com o gnutls.
Antes de começar, verifique com:
Uma das linhas de saída será
Para recompilar:
Em primeiro lugar, remova o curl:
Instale todas as dependências de compilação necessárias para curl
Obtenha o libcurl mais recente (em 20 de dezembro de 2016)
mkdir ~/curl wget http://curl.haxx.se/download/curl-7.51.0.tar.bz2 tar -xvjf curl-7.51.0.tar.bz2 cd curl-7.51.0
As etapas usuais para construir um aplicativo a partir da fonte
Se o openssl estiver instalado corretamente, o configure o encontrará automaticamente. O resultado será:
Resolva quaisquer problemas de caches de localização lib de nível C ("cache de biblioteca compartilhada")
Agora tente reinstalar o pycurl no ambiente:
curl -O https://pypi.python.org/packages/source/p/pycurl/pycurl-7.43.0.tar.gz pip install pycurl-7.43.0.tar.gz --global-option="--with-openssl"
O resultado deve ser:
python import pycurl pycurl.version
fonte
Para qualquer um que tenha problemas dentro do PyCharm CE no macOS Mojave, veja como eu o fiz funcionar no venv:
fonte
Isso funcionou para mim:
fonte
Tentei de tudo aqui no macOS 10.13 sem sucesso. Então encontrei https://gist.github.com/webinista/b4b6a4cf8f158431b2c5134630c2cbfe que funcionou:
brew install curl --with-openssl pip uninstall pycurl export PYCURL_SSL_LIBRARY=openssl export LDFLAGS=-L/usr/local/opt/openssl/lib;export CPPFLAGS=-I/usr/local/opt/openssl/include; pip install pycurl --compile --no-cache-dir
Isso funcionou para mim quando não estava usando um virtualenv e dentro de um virtualenv.
fonte
Não tenho certeza se é por causa da execução em um virtualenv, mas no CentOS 7 essas soluções não estavam funcionando para mim; os objetos compilados ainda estavam sendo obtidos do diretório de cache quando eu estava reinstalando. Se você tiver o mesmo problema depois de tentar outras soluções aqui, tente o seguinte:
fonte
--no-cahe-dir
opção. Só quero mencionar ainda que ele só conseguiu rodar sob rootsu -
como @alfonso sugeriu. Fazersudo pip3 ...
não era bom o suficiente. Provavelmente necessário para que a variável de ambiente seja selecionada.Erro:
Isso funcionou para mim, Mac 10.13, python 3.5, importação de pycurl funcionou depois de instalar assim
pip3 uninstall pycurl; pip3 install --compile --install-option="--with-openssl" pycurl
fonte
Depois de ficar preso nisso por um longo tempo, descobri que a apple parou de incluir cabeçalhos OpenSSL desde o OS X 10.11 El Capitan. como consertar?
1) brew install openssl 2) echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.bash_profile (or .zshrc for zsh, etc) 3) pip uninstall pycurl 4) pip install --install-option="--with-openssl" --install-option="--openssl-dir=/usr/local/opt/openssl" pycurl
fonte
Mesmo problema no amazonlinux - resolvido
, tive esse problema ao criar uma imagem docker baseada no amazonlinux, instalar o python3.7 e adicionar o módulo pycurl. Todos os outros módulos python foram instalados corretamente, exceto pycurl. Depois de tentar muitas das soluções propostas nos tópicos ligados a este problema, finalmente resolvi meu problema usando os seguintes comandos para instalação de todas as peças.
yum -y install python3 python3-devel gcc libcurl-devel aws-cli openssl-static.x86_64
em seguida, instalei outros módulos, como psycopg2-binary, requests, certifi usando:
pip3 install --user --no-cache-dir -r requirements.txt
e finalmente instalei o módulo pycurl usando:
pip3 install --user --global-option="--with-openssl" --no-cache-dir pycurl
e passando aqui a opção global openssl. A instalação da biblioteca estática openssl-static.x86_64 resolveu o problema no meu caso ao usar a opção global usada pelo segundo comando pip3.
fonte
Para python 2.7
Para python 3.5 também instale o seguinte:
sudo apt-get install python3.5-dev
Baixe a última fonte pycurl-7.43.0.tar.gz (md5) de pypi https://pypi.python.org/pypi/pycurl/7.43.0#downloads e execute o próximo comando:
python setup.py --with-openssl install
Além disso, você pode fazer isso no ambiente Python:
(test_env)user@pc:~/Downloads/pycurl-7.43.0$ python setup.py --with-openssl install
fonte
pip install -U pip if [ "$(curl --version | grep NSS 2>/dev/null)" ]; then pip install --compile --install-option="--with-nss" pycurl else pip install --compile --install-option="--with-openssl" pycurl fi
fonte
Eu encontrei esse problema e a resposta de Sanket Jagtap funcionou para mim. Tentei responder com a maioria dos votos, mas não funcionou.
Minha versão antiga do openssl é 1.0.1t, acho que reinstalar o openssl pode resolver esse problema.
--- pycurl's openssl backend time....
Eu reconstruí o último openssl e tentei esta resposta. Veja isso.
pip install --compile --install-option="--with-openssl" pycurl
Isso funcionou para mim.
Eu recomendo que devemos reinstalar nosso openssl para tentar ..
fonte
Seguir funcionou para mim com Python3.6
MacOS High-Sierra
sudo pip3 uninstall pycurl sudo pip3 install --compile --install-option="--with-openssl" pycurl
CentOS 7
sudo pip3 uninstall pycurl sudo pip3 install --compile --install-option="--with-nss" pycurl
fonte
Este link resume a razão pela qual os erros ocorrem e fornece uma instrução clara para corrigir o problema.
https://cscheng.info/2018/01/26/installing-pycurl-on-macos-high-sierra.html
Para mim, o problema ocorreu quando fiz um upgrade do El Captain para High-Sierra.
fonte
FWIW, encontrei muitos problemas para fazer isso funcionar por meio do AWS Elastic Beanstalk e, finalmente, consegui fazê-lo funcionar com:
packages: yum: openssl-devel: [] libcurl-devel: [] container_commands: # Reinstall PyCurl with correct ssl backend 05_reinstall_pycurl: command: | pip install --upgrade pip pip uninstall -y pycurl pip install --global-option='--with-openssl' pycurl
fonte
Recentemente, ao atualizar um projeto Django, tive um erro semelhante. Mas desta vez a configuração da variável de ambiente não funcionou. Então eu tive que definir ambas as variáveis de ambiente
export PYCURL_SSL_LIBRARY=openssl
e passar o sinalizador--global-option="with-openssl"
.A resposta original foi postada nesta página
fonte
export CPPFLAGS=-I/usr/local/opt/openssl/include export LDFLAGS=-L/usr/local/opt/openssl/lib pip install pycurl --global-option="--with-openssl"
fonte