web-dev-qa-db-fra.com

Image Psycopg2 non trouvée

Essayer de configurer postgres avec l’application postgres mac et cliquer sur cette erreur, que je n’ai pas pu résoudre. Des pensées?

    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

J'ai rencontré cette erreur alors que je travaillais sur Django . Je travaille sur virtualenv avec Django == 1.3 mais pas sur Django == 1.5 où je dois exécuter les commandes ci-dessus.

Sous OS X El Capitan, vous ne pouvez pas créer ces liens sans désactiver la protection du système, mais cela fonctionne bien si vous vous connectez à/usr/local/lib.

82
philippinedev

J'ai trouvé une solution qui fonctionnait pour moi lorsque je traitais un problème similaire sur Rails. Ajoutez ce qui suit à votre .bash_profile, .bash_rc ou équivalent:

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

(En supposant que vous avez installé Postgres.app à l'emplacement par défaut). Puis redémarrez votre session de terminal et réessayez.

L'exportation directement vers DYLD_LIBRARY_PATH peut entraîner de graves problèmes avec d'autres applications qui en dépendent, mais l'utilisation du chemin de secours évite ces problèmes.

Voir aussi: https://github.com/PostgresApp/PostgresApp/issues/109#issuecomment-18387546

EDIT: il semble que définir DYLD_FALLBACK_LIBRARY_PATH provoque une erreur lorsque vous essayez d'exécuter psql. Pour résoudre ce problème, vous pouvez ajouter les deux lignes suivantes à votre fichier .bash_profile:

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

Cela suppose que vous utilisez bash et que votre fichier .bash_profile se trouve dans votre répertoire personnel. Si ce n'est pas le cas (ou si vous utilisez un fichier .bashrc ou un autre programme d'installation au lieu de .bash_profile), remplacez la partie ~/.bash_profile de la commande par le chemin d'accès au script de configuration de votre environnement.

La commande alias commence généralement un sous-shell qui n’affecte pas votre environnement bash actuel. Ainsi, lorsque la variable DYLD_FALLBACK_LIBRARY_PATH est supprimée, elle n'est que temporaire. Une fois que vous aurez quitté psql, la variable d’environnement sera à nouveau définie.

17

Ce problème m'a coûté toute la matinée à résoudre. J'ai trouvé la discussion sur http://initd.org/psycopg/articles/2010/11/11/links-about-building-psycopg-mac-os-x/ vraiment utile. Grâce à la réponse de Jurie, la solution à mon problème (sous Mac) est la suivante:

  1. Installez openssl 1.0.0 en utilisant brew:

     brew install openssl
    
  2. en utilisant la commande suivante:

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

    remplacez 1.0.1x partie par votre version actuelle. Pour moi c'est 1.0.1h.

J'espère que cela t'aides!

EDIT: Après un jour, j'ai trouvé que la deuxième commande devait être entrée à chaque fois que vous deviez vous connecter à une base de données, ce qui ne constitue donc pas une solution permanente à ce problème.

10
jdeng

Dans votre environnement bash avant de le charger, essayez ceci:

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

..remplace le 'x.y' avec la version sur votre système.

..être conscient que définir cela dans votre profil bash peut interférer avec d'autres programmes, comme l'a noté KindOfGuy.

.. bien sûr, si vous ne l'exécutez pas à partir d'une invite bash, vous devrez configurer votre environnement de la manière que pyenv vous permet. ..vous pouvez même éditer pyenv lui-même et le placer en haut.

Une autre alternative est de placer cela dans un script python qui s'exécute avant d'essayer d'importer psycopg2:

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

..again, en remplaçant 'x.y' par la version de votre système située dans/Library/PostgreSQL.

9
Mr. B

Cela m'est arrivé après la mise à niveau de Postgresql et après l'installation de psycopg2 dans virtualenv. Réinstaller (reconstruire) a fonctionné pour moi.

pip uninstall psycopg2
pip install psycopg2
8
aeikenberry

J'ai rencontré ce problème lorsque je suis passé de postgres.app 9.4 à 9.5 sur el capitan.

Les autres solutions ne fonctionneront pas (facilement) à el capitan en raison du verrouillage système de certains répertoires, ce qui signifie que la solution de lien symbolique sera moins accessible/idéale pour la plupart.

Cela laisse la variable de repli. La réponse actuelle pointe vers le mauvais répertoire. Je suppose que le répertoire dylibs a changé depuis 2013.

Donc, voici le dernier répertoire de secours qui fonctionne pour moi:

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

En gros, le problème est qu’une bibliothèque requise n’a pas pu être trouvée. Vous pouvez modifier les endroits où psycopg2 cherche libssl à l’aide des outils de compilateur open source d’Apple , otool et install_name_tool. Ces versions sont fournies avec OS X et les pages de manuel sont disponibles avec man <command>.

Accédez au répertoire de modules psycopg2 mentionné dans le message d'erreur. Une fois là:

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

Ceci répertorie les bibliothèques que _psycopg2.so cherchera. Vous pouvez changer son apparence avec install_name_tool:

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

Vous devrez bien sûr vous adapter à l'endroit où vous avez libssl.1.0.0.dylib. L’exemple que j’ai donné est le chemin par défaut de Homebrew, mais vous l’auriez peut-être de Anaconda et/ou du bundle d’applications PostgreSQL. (brew install openssl si vous ne l’avez pas encore.) Vous devrez probablement répéter pour libcrypto.

L’exécution de cette modification peut échouer en fonction de la construction de _psycopg2.so. Si cela se produit, vous pouvez probablement créer le module vous-même avec des chemins de bibliothèque personnalisés, mais je ne vais pas entrer dans les détails.

Cette approche présente l’avantage d’être plus étroite et donc moins risquée que celle (reliée ici à d’autres réponses) de lier libssl 1.0.0 aux chemins de recherche de dyld (via ln -s ou en définissant une variable d’environnement DYLD_*). (Voir les avertissements contre ces approches dans un couple de discussions et un code . En savoir plus sur dyld à man dyld.) Il présente l'inconvénient de devoir être répété pour chaque copie de psycopg2. Choisissez votre propre aventure.

Déni de responsabilité: La majeure partie du contenu de cette réponse provient de connaissances que j'ai réunies en une journée. Je ne suis pas un expert.

3
duozmo

J'ai eu la même erreur en raison de la mise à niveau de Postgres.app (de 9.3 à 9.4).

La solution consistait à supprimer les roues de cache pip, car elles pointaient vers Postgres.app version 9.3.

J'ai trouvé les fichiers de cache de roue psycopg correspondants de cette façon

grep -r psycopg ~/.pip/cache

et supprimé le répertoire que j'ai trouvé avec la dernière commande.

2
therealmarv

Sous Mac OS X 10.11 (El Capitan), /usr/lib est en lecture seule pour l'utilisateur root . Vous obtiendrez un ln: /usr/lib/libssl.1.0.0.dylib: Operation not permitted errorVous devez utiliser /usr/local/lib au lieu de /usr.

$ 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

J'ai trouvé cette solution qui a fonctionné pour moi

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 

Remplacez cette partie '/Applications/Postgres.app/Contents/Versions/9.3/' en fonction de l'emplacement où psql est installé sur votre ordinateur. Commande pour trouver où psql est installé: which psql

MISE À JOUR À PARTIR DE COMMENTAIRES: Sous OSX 10.11 (El Capitan), vous ne pouvez plus copier de fichiers dans/usr/lib. Utilisez/usr/local/lib

2
Mit Mehta

Il me manquait le paquet client postgresql, je les ai donc installés avec brew et cela a résolu ce problème.

brew update
brew doctor
brew install postgresql
2
agentargo

Essayez de mettre à jour psycopg2 en utilisant pip install psycopg2 --upgrade vers la dernière version, puis réessayez.

0
Noopur Phalak

Je voulais juste partager ce qui a fonctionné pour moi. J'utilisais Anaconda avec Jupyter. Ce qui suit a fonctionné:

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

Mais alors causé des problèmes ultérieurs importation d'une autre bibliothèque (complot). Après avoir joué avec pip, je me suis rendu compte que je devrais probablement utiliser conda à la place et ce qui suit semblait tout régler.

conda install psycopg2
0
chris838

Je rencontre un problème similaire avec mysql. La bibliothèque demandée ne parvient pas à charger /usr/local/mysql/lib/libmysqlclient_r.16.dylib

Toutefois, dans ce répertoire, il existe une version ultérieure de la bibliothèque: /usr/local/mysql/lib/libmysqlclient.20.dylib

Je travaille dans un virtualenvwrapper et ai essayé de réinstaller toutes les dépendances d'installation précédemment en vain. Toute assistance sera grandement appréciée.

0
Eoin Traynor

La solution qui a fonctionné pour moi a été d'installer psycopg2 avec le jeu d'options "no-binary", qui indique à psycopg2 d'utiliser le système libssl.

Par défaut, psycopg2 utilise sa propre version de libssl et semble conserver une dépendance vis-à-vis d’une ancienne version de la bibliothèque qui n’existait plus après ma mise à niveau.

Voir le psycopg2 install docs pour plus de détails sur l'option no-binary.

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

Avez-vous installé psycopg2? Vous en avez besoin pour intégrer python à postgresql.

0
Ari