błąd podczas instalacji psycopg2, nie znaleziono biblioteki dla -lssl

127

biegnę

sudo pip install psycopg2

i otrzymuję pakiet danych wyjściowych, który wygląda następująco:

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

A na końcu mówi:

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

Uruchamianie easy_install lub robienie tego ze źródła powoduje na końcu ten sam błąd (część dotycząca biblioteki nie została znaleziona dla -lssl).


Uruchomienie instalacji brew (lub aktualizacji) openssl daje poniższe wyniki

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

Czy ktoś może mi pomóc?

tscizzle
źródło

Odpowiedzi:

285

Dla każdego, kto szuka rozwiązania tego problemu w systemie macOS Sierra 10.12 (lub nowszym, najprawdopodobniej): naprawiłem to, instalując narzędzia wiersza poleceń:

xcode-select --install

Po tym pip install psycopg2powinno działać.

Jeśli tak się nie stanie, możesz również spróbować połączyć się z plikiem brew's openssl:

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

z openssl zainstalowanym przez brew. Zauważ, że brew link openssl --forcejuż nie działa:

$ 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

Jak @macho wskazuje poniżej, jeśli to nadal nie działa, może być konieczne skorzystanie z --no-cacheopcji pip, np

env LDFLAGS="-I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib" pip --no-cache install psycopg2
sas
źródło
5
Właściwie xcode-select --installmoże wystarczyć, to powinno korzystać z dostarczonego systemu ssl. Zaktualizuję swój komentarz powyżej.
sas
13
Instalacja xcode-select jest wystarczająco dobra dla systemu Python. Ale to nie działa w środowiskach wirtualnych.
Andrew Martin
3
Właśnie dostałem macOS Sierra 10.12, właśnie to zrobiłem pip install psycopg2i właśnie otrzymałem ten sam komunikat o błędzie: „Nie znaleziono biblioteki ld: dla -lssl”. xcode-select --installnaprawiono problem.
webtweakers
4
xcode-select --installnaprawiono problem w Sierra dla mnie, również w środowiskach wirtualnych
Danra
5
może być konieczne użycie opcji --no-cache w pip. np.env LDFLAGS="-I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib" pip --no-cache install psycopg2
machow
59

Zainstalowałem OpenSSL z brew ( brew install openssl)

Pracowały dla mnie:

export LDFLAGS="-L/usr/local/opt/openssl/lib"
export CPPFLAGS="-I/usr/local/opt/openssl/include"
pip install psycopg2
IamAshay
źródło
26

Podczas biegu brew link opensslotrzymuję następujący komunikat:

$ 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

Postępując zgodnie z tą radą, oto pippolecenie, którego musisz użyć:

$ 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
źródło
11

W systemie MacOS Catalina 10.15.4 jedyną komendą, która działała dla mnie, była:

env LDFLAGS="-I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib" pip install psycopg2
Chris Ford
źródło
Pracował również nad Mojave. Dziękuję Ci!
sb9
Uratowałeś mój czas.
sinwoobang
9

U mnie zadziałała podpowiedź podana w poleceniu linku do 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
Izaak Filip
źródło
większość ludzi prawdopodobnie nie używa zsh, ale w każdym razie uruchomiłem echo 'export PATH = "/ usr / local / opt / openssl / bin: $ PATH"' >> ~ / .zshrc i to wystarczyło, aby naprawić problem bez zmiana zmiennych środowiskowych LDFLAGS i CPPFLAGS
Mark Aquino
9

Na Mojave dodałem je do .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"

był wtedy w stanie zainstalować psycopg 2.8.3 w pythonie 3.7.4 virtualenv.

Dzieje się tak po ponownej instalacji xcode i narzędzi wiersza poleceń.

Wszystkie powyższe odpowiedzi pomogły!

pmneve
źródło
4

To jest problem nowej wersji macOs, w której pip nie może zainstalować cryptography. Rozwiązaniem mojego problemu jest dostarczenie env do polecenia instalacji:

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

Można wymienić <YOUR COMMAND HERE>z pip install cryptography, lub pip install <SOMETHING THAT REQUIRES cryptography>na przykład.

Kredyt do tego artykułu: Naprawianie błędu krytycznego macOS Sierra: Nie znaleziono pliku „openssl / opensslv.h” lub „openssl / aes.h”

Envil
źródło
4

Używając Fisha, następujące dwa polecenia rozwiązały ten problem po zainstalowaniu OpenSSL z Homebrew.

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

Użyj, brew info opensslaby uzyskać aktualne informacje.

Yngve Høiseth
źródło
1

Niedawno miałem ten problem w High Sierra, właśnie zainstalowałem Python 3.7 w virtualenv.

Rozwiązaniem jest użycie późniejszej wersji psycopg2. Wersja 2.7.7 zadziałała, a 2.7.1 nie.

dixon1e
źródło
0

Zamiast instalować psycopg2, zainstaluj psycopg2-binaryod tych samych autorów:

pip install psycopg2-binary

Oto, co mówi dokumentacja o tym pakiecie PyPI:

Możesz uzyskać [...] samodzielny pakiet, niewymagający kompilatora ani bibliotek zewnętrznych, instalując pakiet psycopg2-binary z PyPI:

$ pip install psycopg2-binary

Pakiet binarny jest praktycznym wyborem przy programowaniu i testowaniu, ale w produkcji zaleca się użycie pakietu zbudowanego ze źródeł.

Flimm
źródło
0

Miałem ten problem na Mojave. Mojave nie tworzy katalogu / usr / include, który musi zainstalować psycopg2. Nie było to oczywiste. Rozwiązanie znalazłem tutaj: Jak zaktualizować Xcode z wiersza poleceń , który odwołuje się do: https://forums.developer.apple.com/thread/104296

ProfX
źródło
Kilka dalszych uwag: zainstalowałem Xcode i narzędzia wiersza poleceń. Polecenie xcode-select --install pokazało, że mam je już zainstalowane, podobnie jak xcode-select -p i echo $? zwróciło 0, co również wskazuje, że zostały zainstalowane. Używam pyenv i pyenv-virtualenv, więc zainstalowałem psycopg2 w środowisku wirtualnym.
ProfX
0

Miałem ten sam błąd i udało mi się go rozwiązać po zainstalowaniu pip cythona

Nili Waypa
źródło
0

Uruchomiłem PyCharm ze środowiska Conda, rozwiązałem mój problem za pomocą:

--> 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
źródło
0

Zainstalowałem OpenSSL używając MacPorts, dlatego katalogi nie są takie jak Brew.

sudo port install openssl

Katalogi znalazłem wykonując:

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

Następnie wyeksportowałem zmienne:

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

Być może będziesz musiał:

xcode-select --install
DjAlan
źródło
0

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

pracował dla mnie

poza zmiennoprzecinkowy
źródło
-4

Udało mi się to naprawić za pomocą:

brew unlink openssl && brew link openssl --force

Nie jestem pewien, czym różni się to od dezinstalacji / aktualizacji naparu, które zrobiłem na OpenSSL we wcześniejszych próbach. Moje założenie jest takie, że te operacje pozostawiły część „wadliwych” bibliotek współdzielonych, które uniemożliwiały to działanie. Zauważ, że rozwiązało to również problemy z instalacją modułu kryptograficznego Pythona.

ecordo
źródło