Подтвердить что ты не робот

Ошибка установки 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, пожалуйста, дайте мне знать, я не вставлял его здесь, потому что он слишком длинный.

4b9b3361

Ответ 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