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.
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:
installer openssl à partir de l'infusion
$ brew install openssl
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/
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
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
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')"
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.
Je pense que sur Mac, nous avons besoin de:
export LDFLAGS="-L/usr/local/opt/openssl/lib"
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
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 /
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