Ошибка установки psycopg2 - Библиотека не загружена: libssl.dylib
Я пытаюсь установить psycopg2
в virtualenv с помощью pip
, компиляция выглядит нормально, в ней говорится: "Успешно установлен psycopg2", но когда я пытаюсь импортировать его в интерпретатор python (в virtualenv), он указывает на ошибку:
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
Дело в том, что я успешно установил его с помощью pip
в другом виртуальном env, как, например, несколько недель назад, и запустил его с postgresql
на моем mac. Мне интересно, если это проблема компилятора? Во время установки psycopg2 я видел несколько предупреждений типа shortens from 64-bit to 32-bit
. Мой компилятор i686-apple-darwin11-llvm-gcc-4.2
, по умолчанию один на mac os x lion.
Я вижу несколько сообщений, связанных с установкой psycopg2
, но большинство из них решается путем установки в виртуальном env. Итак... может ли кто-нибудь дать мне предложение? Спасибо! Действительно оценен.
p.s. Если вам нужен журнал компиляции установки psycopg2, пожалуйста, дайте мне знать, я не вставлял его здесь, потому что он слишком длинный.
Ответы
Ответ 1
Говорит ли ошибка, что версия libssl.dylib
слишком старая?
На моем mac ошибка состоит в том, что libssl.dylib
и libcrypto.dylib
слишком старые для использования pyscopg. Пакет openssl
, используемый mac, равен 0,98, а pyscopg - 1.0.0 или более поздняя.
Мое решение таково:
-
установить openssl из brew
$ brew install openssl
-
скопировать libssl.1.0.0.dylib
и libcrypto.1.0.0.dylib
от /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/
-
в /usr/lib
введите программную ссылку libssl.dylib
и libcrypto.dylib
. Возможно, вам придется удалить существующие ссылки.
$ 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
Ответ 2
В OSX 10.11+ (El Capitan или позже) решение с заменой символических ссылок (см. выше - fooobar.com/questions/161134/...) sudo rm libssl.dylib libcrypto.dylib
сообщает Operation not permitted
. Решение, которое сработало для меня, было следующим:
brew install openssl
Найти, где расположены openssl brew libs, начать поиск в каталоге /usr/local/Cellar/openssl
. В моем случае это находится в /usr/local/Cellar/openssl/1.0.2d_1/lib
Наконец, настройте DYLD_LIBRARY_PATH, т.е. добавьте такую строку в .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
перезапустить оболочку или просто source ~/.bash_profile
и проверить, работает ли она:
$ python -c"import psycopg2 ; print('psycopg2 is now ok')"
Ответ 3
У меня была аналогичная проблема. Я использовал Anaconda для установки python и нескольких пакетов, а затем позже использовал pip для установки psycopg2. Я смог исправить ошибку, удалив psycopg2 и переустановил его с помощью менеджера пакетов conda вместо pip.
pip uninstall psycopg2
conda install psycopg2
Ответ 4
Спасибо @khrf за ваш ответ.
Если вы используете установщик системы postgres (вместо Postgres.app), используйте:
export DYLD_LIBRARY_PATH=/Library/PostgreSQL/9.3/lib
который можно поместить в ~/.bash_profile
, если вы хотите, чтобы он не набирал его каждый раз.
Ответ 5
Если вы используете PostgresApp, установите переменную окружения DYLD_LIBRARY_PATH, например:
DYLD_LIBRARY_PATH=/Applications/Postgres.app/Contents/MacOS/lib/ ../venv/bin/python manage.py syncdb