wake-up-neo.com

Psycopg2-Bild nicht gefunden

Beim Versuch, Postgres mit der Postgres Mac-App einzurichten und diesen Fehler zu treffen, den ich nicht lösen konnte. Irgendwelche Gedanken?

    ImportError: dlopen(/Users/Craig/pyenv/mysite/lib/python2.7/site-packages/psycopg2/_psycopg.so, 2): Library not loaded: @executable_path/../lib/libssl.1.0.0.dylib
  Referenced from: /Applications/Postgres.app/Contents/MacOS/lib/libpq.dylib
  Reason: image not found
54
Craig Cannon
$ Sudo ln -s /Library/PostgreSQL/9.2/lib/libssl.1.0.0.dylib /usr/lib
$ Sudo ln -s /Library/PostgreSQL/9.2/lib/libcrypto.1.0.0.dylib /usr/lib

Ich bin auf diesen Fehler gestoßen, als ich an Django gearbeitet habe .. __ Ich arbeite an virtualenv mit Django == 1.3, aber nicht an Django == 1.5, wo ich die obigen Befehle ausgeben muss.

In OS X El Capitan können Sie diese Verknüpfungen nicht ohne Deaktivierung des Systemschutzes ausführen. Dies funktioniert jedoch gut, wenn Sie eine Verknüpfung zu/usr/local/lib erstellen

82
philippinedev

Ich habe eine Lösung gefunden, die bei einem ähnlichen Problem auf Rails für mich funktioniert hat. Fügen Sie Folgendes hinzu: .bash_profile, .bash_rc oder ein gleichwertiges Element:

export DYLD_FALLBACK_LIBRARY_PATH=/Applications/Postgres.app/Contents/MacOS/lib:$DYLD_LIBRARY_PATH

(Vorausgesetzt, Sie haben Postgres.app am Standardspeicherort installiert.) Starten Sie dann Ihre Terminalsitzung erneut und versuchen Sie es erneut.

Das direkte Exportieren in DYLD_LIBRARY_PATH kann zu ernsthaften Problemen mit anderen Apps führen, die davon abhängig sind. Durch die Verwendung des Fallbackpfads werden diese Probleme jedoch vermieden.

Siehe auch: https://github.com/PostgresApp/PostgresApp/issues/109#issuecomment-18387546

EDIT: Es scheint, dass die Einstellung von DYLD_FALLBACK_LIBRARY_PATH zu einem Fehler führt, wenn Sie versuchen, psql auszuführen. Um dies zu beheben, können Sie Ihrem .bash_profile die folgenden zwei Zeilen hinzufügen:

alias psql="(. ~/.bash_profile; unset DYLD_FALLBACK_LIBRARY_PATH; psql)";

Dies setzt voraus, dass Sie bash verwenden und sich Ihr .bash_profile in Ihrem Home-Verzeichnis befindet. Wenn dies nicht der Fall ist (oder wenn Sie anstelle von .bash_profile eine .bashrc- oder andere Umgebungseinstellung verwenden), ändern Sie den ~/.bash_profile-Teil des Befehls in den Pfad zu Ihrem Umgebungseinstellungsskript.

Der Alias-Befehl startet im Grunde eine Subshell, die Ihre aktuelle Bash-Umgebung nicht beeinflusst. Wenn die Variable DYLD_FALLBACK_LIBRARY_PATH aufgehoben wird, ist sie nur temporär. Nachdem Sie psql beendet haben, wird die Umgebungsvariable erneut festgelegt.

17

Dieses Problem hat mich den ganzen Morgen gekostet. Ich fand die Diskussion auf http://initd.org/psycopg/articles/2010/11/11/links-about-building-psycopg-mac-os-x/ sehr hilfreich. Dank der Antwort von Jurie ist die Lösung für mein Problem (auf dem Mac) wie folgt:

  1. Installiere openssl 1.0.0 mit brew:

     brew install openssl
    
  2. mit folgendem Befehl:

    export DYLD_LIBRARY_PATH=/usr/local/Cellar/openssl/**1.0.1x**/lib
    

    ersetzen Sie 1.0.1x durch Ihre aktuelle Version. Für mich ist es 1.0.1h.

Hoffe das hilft!

BEARBEITEN: Nach einem Tag habe ich festgestellt, dass der zweite Befehl jedes Mal eingegeben werden muss, wenn eine Verbindung zur Datenbank hergestellt werden muss. Es ist also keine dauerhafte Lösung für dieses Problem.

10
jdeng

Versuchen Sie Folgendes in Ihrer Bash-Umgebung:

export DYLD_LIBRARY_PATH=/Library/PostgreSQL/x.y/lib

..es "x.y" mit der Version auf Ihrem System ersetzen.

Beachten Sie, dass die Einstellung in Ihrem bash-Profil andere Programme stören kann, wie KindOfGuy feststellt.

Wenn Sie es nicht von einem Bash-Prompt aus ausführen, müssen Sie Ihre Umgebung so einrichten, wie es Ihnen pyenv erlaubt. Sie könnten sogar pyenv selbst bearbeiten und an die Spitze stellen.

Eine andere Alternative besteht darin, dies in ein Python-Skript einzufügen, das ausgeführt wird, bevor Sie versuchen, psycopg2 zu importieren:

import os
os.environ['DYLD_LIBRARY_PATH'] = '/Library/PostgreSQL/x.y/lib'

Ersetzen Sie "x.y" durch die Version auf Ihrem System in/Library/PostgreSQL.

9
Mr. B

Dies ist mir nach dem Upgrade von Postgresql und der Installation von psycopg2 in meiner virtualenv passiert. Neuinstallation (Wiederaufbau) hat für mich funktioniert.

pip uninstall psycopg2
pip install psycopg2
8
aeikenberry

Dieses Problem ist mir aufgefallen, als ich ein Upgrade von postgres.app 9.4 auf 9.5 auf el capitan durchgeführt habe.

Die anderen Lösungen funktionieren (leicht) nicht in el capitan, weil das System für bestimmte Verzeichnisse gesperrt ist. Dies bedeutet, dass die symbolische Link-Lösung für die meisten weniger zugänglich ist.

Dies lässt die Fallback-Variable zurück. Die aktuelle Antwort zeigt auf das falsche Verzeichnis. Ich vermute, das Verzeichnis von Dylibs hat sich seit 2013 geändert.

Hier ist das neueste Fallback-Verzeichnis, das für mich funktioniert:

export DYLD_FALLBACK_LIBRARY_PATH=/Applications/Postgres.app/Contents/Versions/latest/lib:$DYLD_LIBRARY_PATH
6
Mykel

Das Problem ist, dass eine benötigte Bibliothek nicht gefunden werden konnte. Sie können ändern, wo psycopg2 nach libssl sucht. Verwenden Sie dazu die Open-Source-Compiler-Tools von Apple , otool und install_name_tool. Diese werden mit OS X geliefert, und die Handbuchseiten sind mit man <command> verfügbar.

Wechseln Sie in das in der Fehlermeldung angegebene psycopg2-Modulverzeichnis. Einmal da:

$ otool -L _psycopg.so
    ...
    @executable_path/../lib/libssl.1.0.0.dylib (compatibility version 1.0.0, current version 1.0.0)
    ...

Dies listet die Bibliotheken auf, nach denen _psycopg2.so suchen wird. Sie können ändern, wo es mit install_name_tool aussehen wird:

$ install_name_tool -change @executable_path/../lib/libssl.1.0.0.dylib /usr/local/opt/openssl/lib/libssl.1.0.0.dylib _psycopg.so

Sie müssen natürlich den Standort von libssl.1.0.0.dylib anpassen. Das Beispiel, das ich gegeben habe, ist der standardmäßige Homebrew-Pfad, aber Sie könnten ihn von Anaconda und/oder dem PostgreSQL-App-Paket haben. (brew install openssl falls Sie ihn noch nicht haben.) Sie müssen wahrscheinlich auch für libcrypto wiederholen.

Die Ausführung dieser Änderung kann je nach Erstellung von _psycopg2.so fehlschlagen. In diesem Fall könnten Sie das Modul wahrscheinlich selbst mit benutzerdefinierten Bibliothekspfaden erstellen, aber ich komme nicht darauf an.

Dieser Ansatz hat den Vorteil, dass er enger und damit weniger riskant ist als der in anderen Antworten gegebene Ansatz, libssl 1.0.0 mit den Suchpfaden von dyld zu verknüpfen (entweder über ln -s oder durch Einstellen einer DYLD_*-Umgebungsvariablen). (Siehe Warnungen vor diesen Ansätzen in einem pair von Diskussionen und etwas Code . Weitere Informationen zu dyld bis man dyld.) Sie hat den Nachteil, dass sie für jede Kopie von psycopg2 wiederholt werden muss. Wähle dein eigenes Abenteuer.

Haftungsausschluss: Der größte Teil dieser Antwort stammt von Wissen, das ich an einem Tag zusammengeschustert habe. Ich bin kein Experte.

3
duozmo

Ich hatte den gleichen Fehler, weil ich Postgres.app (von 9.3 auf 9.4) aufgerüstet habe.

Die Lösung bestand darin, die Pip-Cache-Räder zu löschen, da sie auf die Version 9.3 von Postgres.app verweisen.

Ich habe auf diese Weise die entsprechenden Psycopg Wheel-Cache-Dateien gefunden

grep -r psycopg ~/.pip/cache

und löschte das Verzeichnis, das ich mit dem letzten Befehl gefunden habe.

2
therealmarv

Unter Mac OS X 10.11 (El Capitan) ist /usr/lib für den Root-Benutzer ..__ schreibgeschützt. Sie erhalten einen ln: /usr/lib/libssl.1.0.0.dylib: Operation not permitted error Sie müssen /usr/local/lib anstelle von /usr verwenden.

$ Sudo ln -s /Library/PostgreSQL/9.2/lib/libssl.1.0.0.dylib /usr/local/lib
$ Sudo ln -s /Library/PostgreSQL/9.2/lib/libcrypto.1.0.0.dylib /usr/local/lib
2
splanquart

Ich habe diese Lösung gefunden, die für mich funktioniert hat

Sudo cp /Applications/Postgres.app/Contents/Versions/9.3/lib/libssl.1.0.0.dylib /usr/lib
Sudo ln -fs /usr/lib/libssl.1.0.0.dylib /usr/lib/libssl.dylib 

Sudo cp /Applications/Postgres.app/Contents/Versions/9.3/lib/libcrypto.1.0.0.dylib /usr/lib
Sudo ln -fs /usr/lib/libcrypto.1.0.0.dylib /usr/lib/libcrypto.dylib 

Ersetzen Sie diesen Teil '/Applications/Postgres.app/Contents/Versions/9.3/', je nachdem, wo auf Ihrem Computer psql installiert ist. Befehl, um herauszufinden, wo psql installiert ist: which psql

UPDATE FROM COMMENTS: Unter OSX 10.11 (El Capitan) können Sie keine Dateien mehr nach/usr/lib kopieren. Verwenden Sie/usr/local/lib

2
Mit Mehta

Mir fehlte das Postgresql-Client-Paket, also installierte ich es mit brew und dieses Problem wurde für mich behoben.

brew update
brew doctor
brew install postgresql
2
agentargo
pip install psycopg2-binary

klappt wunderbar!

1
vinci mojamdar

Aktualisieren Sie psycopg2 mit pip install psycopg2 --upgrade auf die neueste Version, und versuchen Sie es erneut.

0
Noopur Phalak

Ich wollte nur teilen, was für mich funktioniert hat. Ich habe Anaconda mit Jupyter benutzt. Folgendes hat funktioniert:

 DYLD_LIBRARY_PATH=/usr/local/Cellar/openssl/1.0.2k/lib  jupyter notebook

Aber dann verursachten spätere Probleme beim Import einer anderen Bibliothek (plott). Nachdem ich mit Pip herumgespielt hatte, wurde mir klar, dass ich wahrscheinlich Conda verwenden sollte und die folgenden Probleme schienen alles zu reparieren.

conda install psycopg2
0
chris838

Ich habe ein ähnliches Problem mit mysql. Die angeforderte Bibliothek lädt /usr/local/mysql/lib/libmysqlclient_r.16.dylib nicht

In diesem Verzeichnis befindet sich jedoch eine neuere Version der Bibliothek: /usr/local/mysql/lib/libmysqlclient.20.dylib

Ich arbeite in einem virtualenvwrapper und habe versucht, alle zuvor installierten Abhängigkeiten ohne Erfolg neu zu installieren. Jede Hilfe wäre sehr dankbar.

0
Eoin Traynor

Verwenden psycopg2-binary stattdessen

pip install psycopg2-binary
0
maxrudometkin

Die Lösung, die für mich funktioniert hat, war die Installation von psycopg2 mit dem Optionssatz "no-binary", der psycopg2 anweist, das System libssl zu verwenden.

Standardmäßig verwendet psycopg2 seine eigene Version von libssl und schien eine Abhängigkeit von einer alten Version der Bibliothek zu haben, die nach meinem Upgrade nicht mehr existierte.

Weitere Informationen zur Option no-binary finden Sie in den Installationsdokumenten psycopg2 .

pip uninstall psycopg2
pip install --no-binary :all: psycopg2
0
Brendan Quinn

Hast du psycopg2 installiert? Sie benötigen es, um Python mit Postgresql zu integrieren.

0
Ari

versuchen Sie, die Datei (en) libssl.1.0.0.dylib zu finden, und kopieren Sie sie in Ihr Verzeichnis '/ usr/local/lib /'. Für mich lautete der Ursprung '/ Library/PostgreSQL/11/lib /' (ändern Sie die Version in Alternativ können Sie alle Dateien nach '/ usr/local/lib /' kopieren. Gehen Sie zu Origin und geben Sie Folgendes ein: Sudo cp */usr/local/lib /, um alle Dateien zu kopieren. Ich fand die Lösung und änderte sie, um meine zu lösen https://oscarvalles.wordpress.com/2017/03/24/dlopenlibrary-not-loaded-libssl-dylib-fail-to-import-psycopg2-in- virtualenv /

0
Delmehr