web-dev-qa-db-fra.com

Erreur d'installation de psycopg2 - Bibliothèque non chargée: libssl.dylib

J'essaie d'installer psycopg2 dans un virtualenv utilisant pip, la compilation semble correcte, elle dit "Psycopg2 installé avec succès", mais quand j'essaie de l'importer dans python (dans virtualenv), cela indique une erreur:

  File "<stdin>", line 1, in <module>
  File "/Users/me/sites/env/trackmap/lib/python2.7/site-packages/psycopg2/__init__.py", line 67, in <module>
    from psycopg2._psycopg import BINARY, NUMBER, STRING, DATETIME, ROWID
ImportError: dlopen(/Users/me/sites/env/trackmap/lib/python2.7/site-packages/psycopg2/_psycopg.so, 2): Library not loaded: libssl.dylib
  Referenced from: /Users/me/sites/env/trackmap/lib/python2.7/site-packages/psycopg2/_psycopg.so
  Reason: Incompatible library version: _psycopg.so requires version 1.0.0 or later, but libssl.0.9.8.dylib provides version 0.9.8

Le truc, c'est que je l'ai installé avec succès en utilisant pip dans mon autre environnement virtuel avant, comme il y a plusieurs semaines, et que je le fais fonctionner avec le postgresql sur mon mac. Je me demande si c'est un problème de compilateur? J'ai vu des avertissements comme shortens from 64-bit to 32-bit lors de l'installation de psycopg2. Mon compilateur est i686-Apple-darwin11-llvm-gcc-4.2, par défaut sur mac os x lion.

Je vois plusieurs articles liés à psycopg2 installer mais la plupart d'entre eux sont résolus en installant dans un env virtuel. Alors ... quelqu'un pourrait-il me donner une suggestion? Je vous remercie! Vraiment apprécié.

p.s. Si vous avez besoin du journal de compilation de l'installation de psycopg2, faites-le moi savoir, je ne l'ai pas collé ici car il est trop long.

34
Yulong

L'erreur dit-elle libssl.dylib la version est trop ancienne?

Sur mon mac, l'erreur est que libssl.dylib et libcrypto.dylib est trop ancien pour être utilisé par pyscopg. Le package openssl utilisé par mac est 0.98, tandis que pyscopg a besoin de la version 1.0.0 ou ultérieure.

Ma solution est la suivante:

  1. installer openssl à partir de l'infusion

    $ brew install openssl
    
  2. copie libssl.1.0.0.dylib et libcrypto.1.0.0.dylib de /usr/local/Cellar/openssl/1.0.1c à /usr/lib/

    $ cd /usr/local/Cellar/openssl/1.0.1c/lib
    $ Sudo cp libssl.1.0.0.dylib libcrypto.1.0.0.dylib /usr/lib/
    
  3. dans /usr/lib répertoire, créez un lien logiciel libssl.dylib et libcrypto.dylib. Vous devrez peut-être supprimer les liens existants.

    $ Sudo rm libssl.dylib libcrypto.dylib
    $ Sudo ln -s libssl.1.0.0.dylib libssl.dylib
    $ Sudo ln -s libcrypto.1.0.0.dylib libcrypto.dylib
    
97
ming.kernel

J'ai eu un problème similaire. J'avais utilisé Anaconda pour installer python et un certain nombre de packages, puis utilisé plus tard pip pour installer psycopg2. J'ai pu corriger l'erreur en désinstallant psycopg2 et en le réinstallant avec le gestionnaire de packages conda au lieu de pépin.

pip uninstall psycopg2
conda install psycopg2
23
ansonw

Sur OSX 10.11+ (El Capitan ou version ultérieure) solution avec remplacement des liens symboliques (voir ci-dessus - https://stackoverflow.com/a/11911870/565525 ) Sudo rm libssl.dylib libcrypto.dylib rapports Operation not permitted. La solution qui a fonctionné pour moi a été:

brew install openssl

Trouvez où se trouvent les bibliothèques de brassage openssl, lancez la recherche à partir du répertoire /usr/local/Cellar/openssl. Dans mon cas, c'est en /usr/local/Cellar/openssl/1.0.2d_1/lib

Enfin, configurez DYLD_LIBRARY_PATH, c'est-à-dire ajoutez une ligne comme celle-ci dans .bash_profile:

# replace location of lib files with folder name you found in previous step
export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/usr/local/Cellar/openssl/1.0.2d_1/lib

redémarrez Shell, ou simplement source ~/.bash_profile et testez si cela fonctionne:

$ python -c"import psycopg2  ;   print('psycopg2 is now ok')"
21
Robert Lujo

Merci @khrf pour votre réponse.

Si vous utilisez le programme d'installation du système postgres (au lieu de Postgres.app), utilisez:

export DYLD_LIBRARY_PATH=/Library/PostgreSQL/9.3/lib

qui peut être placé dans votre ~/.bash_profile si vous voulez éviter de le taper à chaque fois.

13
gozzilli

Je pense que sur Mac, nous avons besoin de:

export LDFLAGS="-L/usr/local/opt/openssl/lib"
2
jiamo

Si vous utilisez PostgresApp, définissez la variable d'environnement DYLD_LIBRARY_PATH en conséquence, par exemple:

DYLD_LIBRARY_PATH=/Applications/Postgres.app/Contents/MacOS/lib/ ../venv/bin/python manage.py syncdb
1
rslnx

Trouvez où se trouvent vos fichiers libssl et libcrypto et définissez le LIBRARY_PATH dans votre fichier zshrc.

Références: Ajouter le chemin de recherche de bibliothèque à clanghttps://mithun.co/hacks/library-not-loaded-libcrypto-1-0-0-dylib-issue-in-mac /

0
xyzgentoo

Après quelques heures de dépannage, la ligne suivante a été ajoutée à mon .zshrc fichier m'a aidé

export DYLD_LIBRARY_PATH=/Library/PostgreSQL/11/lib
0
Zeca