error al instalar psycopg2, biblioteca no encontrada para -lssl

127

Corro

sudo pip install psycopg2

y obtengo un montón de resultados que se parecen a:

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

Y al final dice:

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

Ejecutar easy_install o hacerlo desde la fuente me da el mismo error al final (la parte sobre la biblioteca no encontrada para -lssl).


Ejecutar brew install (o actualizar) openssl produce lo siguiente

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

¿Puede alguien ayudarme?

tscizzle
fuente
Posible duplicado de Python install lxml en mac os 10.10.1
IamAshay

Respuestas:

285

Para cualquiera que busque una solución para esto en macOS Sierra 10.12 (o posterior, lo más probable): arreglé esto instalando las herramientas de línea de comando:

xcode-select --install

Después de eso, pip install psycopg2debería funcionar.

Si no es así, también puede intentar vincularlo contra el openssl de brew:

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

con openssl instalado vía brew. Tenga en cuenta que brew link openssl --forceya no funciona:

$ 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 señala a continuación, si esto aún no funciona, es posible que deba usar la --no-cacheopción de pip, por ejemplo

env LDFLAGS="-I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib" pip --no-cache install psycopg2
sas
fuente
5
En realidad, xcode-select --installpuede ser suficiente, esto debería utilizar el sistema proporcionado ssl. Actualizaré mi comentario anterior.
sas
13
La instalación de xcode-select es lo suficientemente buena para el sistema python. Pero no funciona para entornos virtuales.
Andrew Martin
3
Acabo de obtener macOS Sierra 10.12, lo hice pip install psycopg2y acabo de recibir el mismo mensaje de error: 'ld: biblioteca no encontrada para -lssl'. xcode-select --installsolucionó el problema.
webtweakers
4
xcode-select --installsolucionó el problema en Sierra para mí, también para entornos virtuales
Danra
5
es posible que deba usar la opción --no-cache de pip. Por ejemploenv LDFLAGS="-I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib" pip --no-cache install psycopg2
machow
58

Tenía OpenSSL instalado desde brew ( brew install openssl)

Lo siguiente funcionó para mí:

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

Al ejecutar brew link opensslme sale el siguiente mensaje:

$ 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

Siguiendo este consejo, este es el pipcomando que necesita 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
fuente
10

Con MacOS Catalina 10.15.4, el siguiente fue el único comando que funcionó para mí:

env LDFLAGS="-I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib" pip install psycopg2
Chris Ford
fuente
También trabajé en Mojave. ¡Gracias!
sb9
Me salvaste el tiempo.
sinwoobang
9

Lo que funcionó para mí fue la sugerencia proporcionada en el comando para vincular 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
fuente
la mayoría de las personas probablemente no usan zsh, pero de todos modos, solo ejecuté echo 'export PATH = "/ usr / local / opt / openssl / bin: $ PATH"' >> ~ / .zshrc y eso fue suficiente para solucionar el problema sin cambiando las variables de entorno LDFLAGS y CPPFLAGS
Mark Aquino
9

En mojave agregué estos al .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"

Luego fue capaz de instalar psycopg 2.8.3 en un virtualenv de Python 3.7.4.

Esto después de reinstalar xcode y las herramientas de línea de comando.

¡Todas las respuestas anteriores ayudaron!

pmneve
fuente
4

Este es el problema de la nueva versión de macOs, donde pip no se puede instalar cryptography. Lo que solucionó mi problema es proporcionar el env al comando de instalación:

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

Puede reemplazar <YOUR COMMAND HERE>con pip install cryptography, o pip install <SOMETHING THAT REQUIRES cryptography>por ejemplo.

Crédito a este artículo: Corrección del error fatal de macOS Sierra: no se encontró el archivo 'openssl / opensslv.h' o 'openssl / aes.h'

Envil
fuente
4

Usando Fish, los siguientes dos comandos me resolvieron este problema después de instalar OpenSSL con Homebrew.

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

Úselo brew info opensslpara obtener información actualizada.

Yngve Høiseth
fuente
1

Recientemente tuve este problema en High Sierra, habiendo instalado Python 3.7 en un virtualenv.

La solución es utilizar una versión posterior de psycopg2. La versión 2.7.7 funcionó, mientras que la 2.7.1 no.

dixon1e
fuente
0

En lugar de instalar psycopg2, instale psycopg2-binary, de los mismos autores:

pip install psycopg2-binary

Esto es lo que dice la documentación sobre este paquete PyPI:

Puede obtener [...] un paquete independiente, que no requiere un compilador o bibliotecas externas, instalando el paquete psycopg2-binary de PyPI:

$ pip install psycopg2-binary

El paquete binario es una opción práctica para el desarrollo y las pruebas, pero en producción se recomienda utilizar el paquete creado a partir de fuentes.

Flimm
fuente
0

Tenía este problema en Mojave. Mojave no crea un directorio / usr / include, que debe instalar psycopg2. Esto no fue obvio. Encontré la solución aquí: Cómo actualizar Xcode desde la línea de comando , que hace referencia a: https://forums.developer.apple.com/thread/104296

ProfX
fuente
Algunas notas más: tenía instaladas Xcode y las herramientas de línea de comandos. El comando xcode-select --install mostró que ya los tenía instalados, al igual que xcode-select -p, y echo $? devolvió un 0, que también indicó que estaban instalados. Estoy usando pyenv y pyenv-virtualenv, así que instalé psycopg2 en un entorno virtual.
ProfX
0

Tuve este mismo error y logré que se resolviera después de instalar pip cython

Nili Waypa
fuente
0

Ejecutando PyCharm desde el entorno conda, resolví mi 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
fuente
0

Instalé OpenSSL usando MacPorts, por lo que los directorios no son como los de Brew.

sudo port install openssl

Encontré los directorios haciendo:

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

Luego exporté las variables:

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

Es posible que también tenga que:

xcode-select --install
DjAlan
fuente
0

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

trabajó para mi

más allá del punto flotante
fuente
-4

Me las arreglé para solucionarlo usando:

brew unlink openssl && brew link openssl --force

No estoy seguro de cómo esto difiere de la desinstalación / actualización de brebaje que hice en OpenSSL en intentos anteriores que hice. Mi suposición es que estas operaciones dejaron algunas de las bibliotecas compartidas "defectuosas" que impedían que esto funcionara. Tenga en cuenta que esto también solucionó problemas con la instalación del módulo de criptografía de Python.

ecordo
fuente