erro ao instalar psycopg2, biblioteca não encontrada para -lssl

127

eu corro

sudo pip install psycopg2

e obtenho um monte de resultados que se parecem com:

cc -DNDEBUG -g -fwrapv -Os .....
.....
cc -DNDEBUG -g -fwrapv -Os .....
.....

E no final diz:

ld: library not found for -lssl

clang: error: linker command failed with exit code 1 (use -v to see invocation)

error: command 'cc' failed with exit status 1

----------------------------------------
Cleaning up...
Command /usr/bin/python -c "import setuptools, tokenize;__file__='/private/var/folders/bz/pvj1g9xj16d10pjjgbrfl3fw0000gn/T/pip_build_root/psycopg2/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /var/folders/bz/pvj1g9xj16d10pjjgbrfl3fw0000gn/T/pip-uE3thn-record/install-record.txt --single-version-externally-managed --compile failed with error code 1 in /private/var/folders/bz/pvj1g9xj16d10pjjgbrfl3fw0000gn/T/pip_build_root/psycopg2
Storing debug log for failure in /Users/Tyler/Library/Logs/pip.log

Executar easy_install ou fazê-lo a partir do código-fonte me dá o mesmo erro no final (a parte sobre a biblioteca não encontrada para -lssl).


Executar a instalação do brew (ou atualização) openssl produz o seguinte

$ brew upgrade openssl
Error: openssl-1.0.1h already installed

Alguém pode me ajudar?

tscizzle
fonte
Possível duplicata de python install lxml no mac os 10.10.1
IamAshay

Respostas:

285

Para quem procura uma solução para isso no macOS Sierra 10.12 (ou posterior, provavelmente): Corrigi isso instalando as ferramentas de linha de comando:

xcode-select --install

Depois disso, pip install psycopg2deve funcionar.

Caso contrário, você também pode tentar fazer um link com o openssl do brew:

env LDFLAGS="-I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib" pip install psycopg2

com o openssl instalado via brew. Observe que o brew link openssl --forcenão funciona mais:

$ brew link openssl --force                                                                                 17.5s
Warning: Refusing to link: openssl
Linking keg-only openssl means you may end up linking against the insecure,
deprecated system OpenSSL while using the headers from Homebrew's openssl.
Instead, pass the full include/library paths to your compiler e.g.:
  -I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib

Como @macho aponta abaixo, se isso ainda não funcionar, você pode precisar usar a --no-cacheopção de pip, por exemplo

env LDFLAGS="-I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib" pip --no-cache install psycopg2
sas
fonte
5
Na verdade, xcode-select --installpode ser suficiente, isso deve usar o sistema fornecido ssl. Vou atualizar meu comentário acima.
sas
13
xcode-select install é bom o suficiente para o sistema python. Mas não funciona para ambientes virtuais.
Andrew Martin
3
Acabei de obter o macOS Sierra 10.12, acabei de fazer pip install psycopg2e recebi a mesma mensagem de erro: 'ld: biblioteca não encontrada para -lssl'. xcode-select --installcorrigiu o problema.
webtweakers
4
xcode-select --installcorrigiu o problema no Sierra para mim, também para ambientes virtuais
Danra
4
você pode precisar usar a opção --no-cache do pip. por exemploenv LDFLAGS="-I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib" pip --no-cache install psycopg2
machow 01 de
58

Eu tinha OpenSSL instalado a partir do brew ( brew install openssl)

O seguinte funcionou para mim:

export LDFLAGS="-L/usr/local/opt/openssl/lib"
export CPPFLAGS="-I/usr/local/opt/openssl/include"
pip install psycopg2
IamAshay
fonte
26

Ao correr brew link openssl, recebo a seguinte mensagem:

$ brew link openssl
Warning: Refusing to link: openssl
Linking keg-only openssl means you may end up linking against the insecure,
deprecated system OpenSSL while using the headers from Homebrew's openssl.
Instead, pass the full include/library paths to your compiler e.g.:
  -I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib

Seguindo este conselho, aqui está o pipcomando que você precisa usar:

$ pip install -r requirements.txt --global-option=build_ext --global-option="-I/usr/local/opt/openssl/include" --global-option="-L/usr/local/opt/openssl/lib"
André Borie
fonte
10

Com MacOS Catalina 10.15.4, o seguinte foi o único comando que funcionou para mim:

env LDFLAGS="-I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib" pip install psycopg2
Chris Ford
fonte
Trabalhou no Mojave também. Obrigado!
sb9
Você salvou meu tempo.
sinwoobang
9

O que funcionou para mim foi a dica fornecida no comando para vincular o openssl,

$ brew link openssl
Warning: Refusing to link macOS-provided software: openssl
If you need to have openssl first in your PATH run:
  echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.zshrc

For compilers to find openssl you may need to set:
  export LDFLAGS="-L/usr/local/opt/openssl/lib"
  export CPPFLAGS="-I/usr/local/opt/openssl/include"

$ export LDFLAGS="-L/usr/local/opt/openssl/lib"
$ export CPPFLAGS="-I/usr/local/opt/openssl/include"

$ pip install psycopg2
Collecting psycopg2
  Using cached https://files.pythonhosted.org/packages/23/7e/93c325482c328619870b6cd09370f6dbe1148283daca65115cd63642e60f/psycopg2-2.8.2.tar.gz
Installing collected packages: psycopg2
  Running setup.py install for psycopg2 ... done
Successfully installed psycopg2-2.8.2
Isaac Philip
fonte
a maioria das pessoas provavelmente não usa zsh, mas de qualquer forma, acabei de executar echo 'export PATH = "/ usr / local / opt / openssl / bin: $ PATH"' >> ~ / .zshrc e isso foi o suficiente para corrigir o problema sem alterando o ambiente LDFLAGS e CPPFLAGS vars
Mark Aquino
9

No mojave, adicionei-os ao .bash_profile

export PATH="/usr/local/opt/openssl/bin:$PATH"
export LDFLAGS="-L/usr/local/opt/curl/lib -L/usr/local/opt/openssl/lib"
export CPPFLAGS="-I/usr/local/opt/curl/include -I/user/local/opt/openssl/include"

foi então capaz de instalar o psycopg 2.8.3 em um python 3.7.4 virtualenv.

Isso depois de reinstalar o xcode e as ferramentas de linha de comando.

Todas as respostas acima ajudaram!

pmneve
fonte
4

Este é o problema da nova versão dos macOs, onde o pip não pode instalar cryptography. O que corrigiu meu problema foi fornecer o env ao comando de instalação:

brew install openssl
env LDFLAGS="-L$(brew --prefix openssl)/lib" CFLAGS="-I$(brew --prefix openssl)/include" <YOUR COMMAND HERE>

Você pode substituir <YOUR COMMAND HERE>por pip install cryptography, ou pip install <SOMETHING THAT REQUIRES cryptography>por exemplo.

Crédito para este artigo: Correção de erro fatal do macOS Sierra: arquivo 'openssl / opensslv.h' ou 'openssl / aes.h' não encontrado

Envil
fonte
4

Usando Fish, os dois comandos a seguir resolveram esse problema para mim depois de instalar o OpenSSL com o Homebrew.

set -gx LDFLAGS "-L/usr/local/opt/openssl/lib"
set -gx CPPFLAGS "-I/usr/local/opt/openssl/include"

Use brew info opensslpara obter informações atualizadas.

Yngve Høiseth
fonte
1

Recentemente tive esse problema no High Sierra, tendo acabado de instalar o Python 3.7 em um virtualenv.

A solução é usar uma versão posterior do psycopg2. A versão 2.7.7 funcionou, enquanto a 2.7.1 não.

dixon1e
fonte
0

Em vez de instalar psycopg2, instale psycopg2-binary, dos mesmos autores:

pip install psycopg2-binary

Isso é o que a documentação diz sobre este pacote PyPI:

Você pode obter um pacote autônomo, não exigindo um compilador ou bibliotecas externas, instalando o pacote psycopg2-binary do PyPI:

$ pip install psycopg2-binary

O pacote binário é uma escolha prática para desenvolvimento e teste, mas na produção é aconselhável usar o pacote criado a partir dos fontes.

Flimm
fonte
0

Eu estava tendo esse problema no Mojave. O Mojave não cria um diretório / usr / include, que o psycopg2 precisa instalar. Isso não era óbvio. Encontrei a solução aqui: Como atualizar o Xcode a partir da linha de comando , que faz referência a: https://forums.developer.apple.com/thread/104296

ProfX
fonte
Algumas notas adicionais: Eu tinha o Xcode e as ferramentas de linha de comando instaladas. O comando xcode-select --install mostrou que eu já os tinha instalado, assim como o xcode-select -p e echo $? retornou 0, que também indicava que eles estavam instalados. Estou usando o pyenv e o pyenv-virtualenv, então instalei o psycopg2 em um ambiente virtual.
ProfX 01 de
0

Eu tive esse mesmo erro e resolvi depois de instalar o cython

Nili Waypa
fonte
0

Executar o PyCharm no ambiente conda, resolvi meu problema usando:

--> conda install psycopg2
The following packages will be UPDATED: ...

...
Proceed ([y]/n)? 
--> y
--> pip3 install psycopg2
Installing collected packages: psycopg2
Running setup.py install for psycopg2 ... done
Successfully installed psycopg2-2.8.4

'''

Carl du Plessis
fonte
0

Instalei o OpenSSL usando MacPorts, portanto, os diretórios não são como os do Brew.

sudo port install openssl

Encontrei os diretórios fazendo:

port contents openssl | grep lib
port contents openssl | grep include

Em seguida, exportei as variáveis:

export LDFLAGS="-L/opt/local/lib"
export CPPFLAGS="-I/opt/local/include/openssl"

Você também pode ter que:

xcode-select --install
DjAlan
fonte
0

export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/opt/openssl/lib/

trabalhou para mim

além do ponto de flutuação
fonte
-4

Consegui consertar usando:

brew unlink openssl && brew link openssl --force

Não tenho certeza de como isso difere da desinstalação / atualização do brew que fiz no OpenSSL em tentativas anteriores que fiz. Minha suposição é que essas operações deixaram algumas das bibliotecas compartilhadas "defeituosas" que estavam impedindo que isso funcionasse. Observe que isso também corrigiu problemas com a instalação do módulo de criptografia Python.

ecordo
fonte