Das Psycopg2-Paket kann nicht über die Pip-Installation installiert werden. Liegt das an Sierra?

78

Ich arbeite an einem Projekt für eine meiner Vorlesungen und muss das Paket psycopg2 herunterladen, um mit der verwendeten postgresql-Datenbank arbeiten zu können. Leider wird beim Versuch, psycopg2 per Pip zu installieren, der folgende Fehler angezeigt:

ld: library not found for -lssl
clang: error: linker command failed with exit code 1 (use -v to see invocation)
error: command '/usr/bin/clang' failed with exit status 1
ld: library not found for -lssl
clang: error: linker command failed with exit code 1 (use -v to see invocation)
error: command '/usr/bin/clang' failed with exit status 1

Weiß jemand, warum das passiert? Liegt es daran, dass Sierra einige Pakete nicht unterstützt hat? Danke im Voraus!

Jome
quelle

Antworten:

300

Ich habe dies durch die Installation der Befehlszeilentools behoben

xcode-select --install

dann installiere openssl über Homebrew und verbinde mein von homebrew installiertes openssl manuell mit pip:

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

unter macOS Sierra 10.12.1

zganger
quelle
4
Die xcode-Installation hat mir gereicht, damit es funktioniert. Gut aussehend.
Adam Starrh
Ich habe es auch nach der Installation von Dev-Tools bekommen
BBischof
Hat auch für mich gearbeitet. Danke vielmals!
Nikolay Marinov
für mich hat auch funktioniert, danke und was wird die dauerhafte lösung sein?
Ajay Kumar
52

Versuchen Sie es mit:

pip install psycopg2-binary
Dheeraj Pande
quelle
Ist das austauschbar mit psycopg2?
Karamol
@ Karamol ja es ist
Dheeraj Pande
Stellen Sie sicher, dass Ihr Pip auch auf dem neuesten Stand ist, sonst pip install -U piperhalten Sie Fehler wievcvarsall.bat not found
Andrew Allen
3
pypi.org/project/psycopg2-binary "Das Binärpaket ist eine praktische Wahl für Entwicklung und Test. In der Produktion wird jedoch empfohlen, das aus Quellen erstellte Paket zu verwenden."
Nikolay Marinov
18
brew install postgresql

Wenn postgresql vorhanden ist, führen Sie Folgendes aus:

brew upgrade postgresql
sudo pip install psycopg2

In venv:

env LDFLAGS='-L/usr/local/lib -L/usr/local/opt/openssl/lib -L/usr/local/opt/readline/lib' pip install psycopg2==2.8.4

Wenn Sie nur den Befehl verwenden müssen, pip install psycopg2exportieren Sie den Pfad in macOSX:

export LDFLAGS="-I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib"
Ion Gorincioi
quelle
1
Dies funktionierte perfekt für mich, indem ich Brew install verwendete und dann "env =" in mein Terminal eintippte. Dies ist jedoch völlige dunkle Magie. Kann jemand erklären, warum dies notwendig war und was es tatsächlich tat? Vielen Dank! Zur Information, im Mai 2020 ist die Mac-Version Catalina.
Seb
11

Wenn Sie mit pipenv auf ein ähnliches Problem stoßen, installieren Sie psycopg2:

ld: Bibliothek für -lssl nicht gefunden ',' clang: Fehler: Linker-Befehl mit Exit-Code 1 fehlgeschlagen (verwenden Sie -v, um den Aufruf anzuzeigen) ', "Fehler: Befehl' clang 'mit Exit-Status 1 fehlgeschlagen",'
--- ------------------------------------- ',

Ich habe alle oben genannten Empfehlungen ausprobiert und keine davon hat funktioniert. Ich hatte dieses Problem vor einigen Monaten in einer anderen virtuellen Umgebung gesehen und mich daran erinnert, etwas darüber gelesen zu haben, dass es sich um ein Problem mit der Psycopg2-Version handelt . Also habe ich versucht, mit 2.7.1 und 2.8.3 zu installieren, und beide sind immer noch fehlgeschlagen. Irgendwie hat Version 2.7.7 funktioniert:

pipenv install psycopg2==2.7.7

Ich wünschte, ich hätte Zeit, dies weiter zu untersuchen, um zu verstehen, was wirklich passiert. Aber im Moment tue ich das nicht und das hat funktioniert.

Paul Meinshausen
quelle
10

Ich habe es behoben mit:

brew reinstall openssl
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/opt/openssl/lib/
Apurva Jain
quelle
2
Das hat auch bei Catalina funktioniert. Ich verwende Python Version 3.8.2, in der ich pyenvmeine Python-Umgebungen und -Installationen verwalte. Ihre Lösung hat von mir aus funktioniert, aber ich habe ausgeführt: $ python -m pip install psycopg2Statt wie andere verwendet haben $ pip install psycopg2, wissen wir möglicherweise nicht, welchen Interpreter wir verwenden und installieren. Dadurch wird sichergestellt, dass pip mit meinem Standard-Python-Interpreter, der für mich Version 3.8.2 ist, verwendet und installiert wird.
Angelito
1
Arbeitete auch für mich
Greg Eremeev
Dieser Export muss für immer zu meiner .bashrc hinzugefügt werden?
Rafael Gomes Francisco
6
  1. Installieren / aktualisieren Sie die Xcode-Entwicklertools

    xcode-select --install
    
  2. Postgres-Pfad abfragen

    find / -name pg_config  2>/dev/null
    
  3. Installieren Sie psycopg2 und verwenden Sie den Pfad, den Sie in Schritt 2 erhalten haben . Meins war '/usr/local/Cellar/postgresql/9.5.0/bin/pg_config'

    PATH=$PATH:/usr/local/Cellar/postgresql/9.5.0/bin/ pip install psycopg2
    
einmuya
quelle
2

Das funktioniert bei mir (auf einem Terminal):

find / -name pg_config  2>/dev/null

Fügen Sie dann den Pfad hinzu:

export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/9.5/bin/

Betriebssystemversion: MacOs Sierra

Ich hoffe das hilft.

Lex Bryan
quelle
2
Dies setzt voraus, dass Sie Postgres.app auf Ihrem Mac installiert haben und keine Mac-Ports, Home Brew, das EnterpriseDB-Installationsprogramm oder eine andere Möglichkeit zum Packen / Installieren Ihres Postgresql-Servers auf Ihrem Mac verwenden, ja?
Scot
Oh, auch die ursprüngliche Frage betraf die fehlende -lssl-Bibliothek und dann "clang", aber nicht das Tool pg_config. Clang ist in Xcode, das andere ist in der openssl-Bibliothek. Benutzer @zganger hat die richtige Antwort auf diese Frage. (Ich bin hierher gekommen, um nach dem Problem pg_config zu suchen, also hat mir Ihre Antwort eine Menge geholfen, aber es ist nicht das, was die Frage gestellt hat).
Scot
1

Es sieht so aus, als ob das openssl-Paket nicht installiert ist. Versuchen Sie es pip installerneut zu installieren . Ich bin kein MacOS-Benutzer, aber ich glaube, dass dies brewdie Paketverwaltung auf dieser Plattform vereinfacht.

Möglicherweise müssen Sie auch die Python-Entwicklungs- und Postgresql-Entwicklungspakete installieren.

mhawke
quelle
1

Alt, aber für Leute, die pipenv verwenden, habe ich dieses Problem behoben, indem ich mir mein Abhängigkeitsdiagramm angesehen pipenv graph --reverseund festgestellt habe, dass es erforderlich ist psycopg2-binary==2.8.2. Durch Ausführen wurde pipenv install psycopg2-binarydas Problem behoben.

Mavrick Laakso
quelle
1
env LDFLAGS="-I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib" \
brew upgrade openssl

Dann könnte ich installieren psycopg2

Sergey Lukin
quelle
1

versuchen Sie dies -> pip installieren Sie psycopg2-binary

Amit Tiwari
quelle
Willkommen bei Stack Overflow! Bitte beachten Sie, dass Sie eine sehr alte und bereits beantwortete Frage beantworten. Hier ist eine Anleitung zur Beantwortung .
help-info.de
0

Für den Fall, dass Sie nicht herumspielen möchten, finden Sie brewhier die "Nur-MacOS-Lösung":

sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /

Danach pipwird gerne psycopg2von der Quelle installiert . Funktioniert mit "Mojave" (macOS 10.14).

Kehlkopf Decidua
quelle
-3

Gemäß der aktuellen / todey-Bedingung - die einzige Lösung hierfür ist - deinstallieren Sie Python 3.8 oder 3.9 oder so weiter und installieren Sie ptyhon 3.7.4

Vijay Choudhary
quelle
Angesichts der Frage, die 2016 gestellt wurde, bezweifle ich sehr, dass "Python 3.8 / 3.9 deinstallieren und Python 3.7 installieren" eine Lösung für das OP-Problem darstellt
David Buck,
Das ist so falsch. Ich habe @ Apurvas Antwort ausgeführt und es hat bei mir funktioniert. Ich verwende Catalina und habe mehrere Python-Versionen. stackoverflow.com/a/58722268/3255762
Angelito