errore durante l'installazione di psycopg2, libreria non trovata per -lssl


127

io corro

sudo pip install psycopg2

e ottengo un sacco di output che assomiglia a:

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

E alla fine 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

Eseguire easy_install o farlo dai sorgenti mi dà entrambi lo stesso errore alla fine (la parte sulla libreria non trovata per -lssl).


L'esecuzione di brew install (o aggiornamento) openssl produce quanto segue

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

Qualcuno può darmi una mano?


Risposte:


285

Per chiunque cerchi una soluzione per questo su macOS Sierra 10.12 (o successivo, molto probabilmente): l'ho risolto installando gli strumenti della riga di comando:

xcode-select --install

Dopodiché, pip install psycopg2dovrebbe funzionare.

In caso contrario, potresti anche provare a collegarti a openssl di brew:

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

con openssl installato tramite brew. Nota che brew link openssl --forcenon funziona più:

$ 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

Come @macho sottolinea di seguito, se ancora non funziona, potrebbe essere necessario utilizzare l' --no-cacheopzione di pip, ad es

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

5
In realtà, xcode-select --installpotrebbe essere sufficiente, questo dovrebbe utilizzare il sistema fornito ssl. Aggiornerò il mio commento sopra.
sas

13
xcode-select install è abbastanza buono per il sistema python. Ma non funziona per gli ambienti virtuali.
Andrew Martin

3
Ho appena ricevuto macOS Sierra 10.12, l'ho pip install psycopg2appena ricevuto e ho appena ricevuto lo stesso messaggio di errore: "ld: libreria non trovata per -lssl". xcode-select --installrisolto il problema.
webtweakers

4
xcode-select --installrisolto il problema su Sierra per me, anche per ambienti virtuali
Danra

5
potresti dover usare l'opzione --no-cache di pip. ad esempioenv LDFLAGS="-I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib" pip --no-cache install psycopg2
machow

59

Ho installato OpenSSL da brew ( brew install openssl)

Quanto segue ha funzionato per me:

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

26

Durante l'esecuzione brew link opensslricevo il seguente messaggio:

$ 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

Seguendo questo consiglio ecco il pipcomando che devi usare:

$ 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"

10

Con MacOS Catalina 10.15.4, il seguente era l'unico comando che ha funzionato per me:

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

Ha lavorato anche su Mojave. Grazie!
sb9

Mi hai risparmiato tempo.
sinwoobang

9

Quello che ha funzionato per me è stato il suggerimento fornito nel comando per collegare 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

la maggior parte delle persone probabilmente non usa zsh ma comunque, ho appena eseguito echo 'export PATH = "/ usr / local / opt / openssl / bin: $ PATH"' >> ~ / .zshrc e questo è stato sufficiente per risolvere il problema senza modifica delle variabili ambientali LDFLAGS e CPPFLAGS
Mark Aquino

9

Su mojave li ho aggiunti a .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"

è stato quindi in grado di installare psycopg 2.8.3 in un virtualenv python 3.7.4.

Questo dopo aver reinstallato xcode e gli strumenti della riga di comando.

Tutte le risposte sopra hanno aiutato!


4

Questo è il problema della nuova versione di macOs, dove pip non può essere installato cryptography. Ciò che ha risolto il mio problema è fornire l'env al comando di installazione:

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

Puoi sostituire <YOUR COMMAND HERE>con pip install cryptography, o pip install <SOMETHING THAT REQUIRES cryptography>per esempio.

Ringraziamo questo articolo: Correzione dell'errore fatale di macOS Sierra: file "openssl / opensslv.h" o "openssl / aes.h" non trovato


4

Utilizzando Fish, i seguenti due comandi hanno risolto questo problema dopo aver installato OpenSSL con Homebrew.

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

Utilizzare brew info opensslper ottenere informazioni aggiornate.


1

Recentemente ha avuto questo problema in High Sierra, avendo appena installato Python 3.7 in un virtualenv.

La soluzione è utilizzare una versione successiva di psycopg2. La versione 2.7.7 ha funzionato, mentre la 2.7.1 no.


0

Invece di installare psycopg2, installa psycopg2-binary, dagli stessi autori:

pip install psycopg2-binary

Questo è ciò che dice la documentazione su questo pacchetto PyPI:

È possibile ottenere [...] un pacchetto autonomo, che non richiede un compilatore o librerie esterne, installando il pacchetto psycopg2-binary da PyPI:

$ pip install psycopg2-binary

Il pacchetto binario è una scelta pratica per lo sviluppo e il test, ma in produzione si consiglia di utilizzare il pacchetto compilato dai sorgenti.


0

Stavo riscontrando questo problema su Mojave. Mojave non crea una directory / usr / include, che deve essere installata da psycopg2. Questo non era ovvio. Ho trovato la soluzione qui: Come aggiornare Xcode dalla riga di comando , che fa riferimento: https://forums.developer.apple.com/thread/104296


Alcune note aggiuntive: avevo installato Xcode e gli strumenti della riga di comando. Il comando xcode-select --install ha mostrato che li avevo già installati, così come xcode-select -p ed echo $? ha restituito uno 0, che indicava anche che erano installati. Sto usando pyenv e pyenv-virtualenv, quindi ho installato psycopg2 in un ambiente virtuale.
ProfX

0

Ho avuto lo stesso errore e l'ho risolto dopo aver installato cython


0

L'esecuzione di PyCharm dall'ambiente conda, ha risolto il mio problema utilizzando:

--> 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

'''


0

Ho installato OpenSSL utilizzando MacPorts quindi le directory non sono come quelle di Brew.

sudo port install openssl

Ho trovato le directory facendo:

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

Quindi ho esportato le variabili:

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

Potresti anche dover:

xcode-select --install


-4

Sono riuscito a risolverlo usando:

brew unlink openssl && brew link openssl --force

Non sono sicuro di come questo differisca dalla disinstallazione / aggiornamento di brew che ho fatto su OpenSSL nei tentativi precedenti che ho fatto. La mia ipotesi è che queste operazioni abbiano lasciato alcune delle librerie condivise "difettose" che ne impedivano il funzionamento. Si noti che questo ha anche risolto i problemi con l'installazione del modulo di crittografia Python.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.