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

Ошибка установки python pip psycopg2

Я сделал простую pip install psycopg2 для Mac. Он установлен нормально, но когда я пытаюсь использовать psycopg2, я получаю ошибку:

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 freeze показывает psycopg2==2.4.5 как раз справа. Я установил psycopg2 на несколько virtualenvs, но это первый раз, когда я вижу такую ​​ошибку. Я попытался удалить и переустановить, те же результаты. Пожалуйста, помогите

4b9b3361

Ответ 1

У меня возникла аналогичная проблема после перехода на Mountain Lion.

Вместо копирования libssl. * файлов на предложение Slack убедитесь, что /usr/lib/libssl.dylib на самом деле является мягкой ссылкой на самую последнюю версию библиотеки.

Например, на моей машине ls -l /usr/lib/libssl* дает:

lrwxr-xr-x  1 root  wheel    46B Jun 27 15:24 /usr/lib/libssl.1.0.0.dylib -> /Library/PostgreSQL/9.1/lib/libssl.1.0.0.dylib
lrwxr-xr-x  1 root  wheel    27B Jul 30 10:31 /usr/lib/libssl.dylib -> /usr/lib/libssl.1.0.0.dylib

Если libssl.dylib не ссылается на версию, упоминаемую в этой версии, убедитесь, что у вас есть эта версия библиотеки, а затем убедитесь, что /usr/lib/libssl.dylib указывает на нее, а не на более старую версию.

Если ссылка не существует, создайте ее так

sudo ln -s library_to_link_to link_to_create

используя, конечно, правильные места для вашей машины. Для меня это оказалось:

sudo ln -s /usr/lib/libssl.1.0.0.dylib /usr/lib/libssl.dylib

Edit

Кажется, что некоторые из них испытывают проблемы с частью моего решения. А именно, удаление этих важных библиотек даже временно вызывает проблемы с операционной системой.

Per ответ Purrell, убедитесь, что вы добавляете флаги -fs при использовании команды ln, которая помогает гарантировать, что библиотеки не пропадут без вести в течение короткого периода времени. Например.

sudo ln -fs /usr/lib/libssl.1.0.0.dylib /usr/lib/libssl.dylib
sudo ln -fs /usr/lib/libcrypto.1.0.0.dylib /usr/lib/libcrypto.dylib

Ответ 2

Принятый ответ здесь правильный (за исключением того, что я думаю, что он должен быть ln -fs, на самом деле, я думаю, что это может даже привести к дебабализации вашей ОС, если не (?)). После столкновения с этим и борьбы с ним я просто хочу собрать полное решение этой проблемы и другую проблему с lib (libcrypto.1.0.0.dylib), с которой вы столкнетесь в Postgres 9. * на Mountain Lion и Snow Leopard, и возможно, других систем. Это также заблокировало меня от запуска psql, который жаловался на те же две библиотеки.

По существу, в /usr/lib, libssl и libcrypto нужны две библиотеки более поздней версии. Вы можете найти нужные версии этих libs в каталоге Postgres lib.

  • Если вы OSX и установили версию Postgres Enterprise DB, это будет в /Library/PostgreSQL/9.2/lib.
  • Для других типов установки Postgres найдите каталог lib внутри каталога установки Postgress, например, для Postgress.app, найдите каталог lib в /Applications/Postgres.app/Contents/MacOS/lib,
  • для brew где-то в /usr/local/Cellar,
  • on * nix, где бы вы ни находились. Но сначала посмотрите на * nix, если ваш дистрибутив имеет более поздние версии только через диспетчера пакетов.

Сначала скопируйте последнюю из этих двух библиотек lib из каталога Postgres lib на /usr/lib:

sudo cp /Library/PostgreSQL/9.2/lib/libssl.1.0.0.dylib /usr/lib
sudo cp /Library/PostgreSQL/9.2/lib/libcrypto.1.0.0.dylib /usr/lib

Затем обновите (или создайте) символические ссылки /usr/lib для этих библиотек. В любом случае команда ln -fs:

sudo ln -fs /usr/lib/libssl.1.0.0.dylib /usr/lib/libssl.dylib
sudo ln -fs /usr/lib/libcrypto.1.0.0.dylib /usr/lib/libcrypto.dylib

Должно быть исправлено. Довольно уверен, что ln -fs лучше, чем удаление символической ссылки и ее переделка, поэтому вероятность того, что libssl будет неоправданным для чего-то, что ему нужно, пока не существует (он делает то же самое, сначала удаляет символическую ссылку, если она уже там, только быстрее, чем вы можете ввести его). Всегда опасайтесь возиться в/usr/lib.

Ответ 3

При попытке выполнить syncdb Postgres 9.1 и /psycopg 2/_psycopg.so добавлена ​​еще одна ошибка:

Библиотека не загружена: @loader_path/../lib/libcrypto.dylib Ссылка из:/usr/lib/libpq.5.dylib Причина: Несовместимая версия библиотеки: libpq.5.dylib требует версию 1.0.0 или новее, но libcrypto.0.9.8.dylib предоставляет версию 0.9.8

Решено путем копирования этих шести (6) файлов из:

LOCAL:/Library/PostgreSQL/9.1/lib/

libssl.1.0.0.dylib

libssl.a

libssl.dylib

libcrypto.1.0.0.dylib

libcrypto.a

libcrypto.dylib

to: LOCAL:/usr/lib

Это было в Mac OSx 10.8.1 с веб-интерфейсом в virtualenv (1.8.2) и pgAdmin (1.14.3). Внутри virtualenv есть:

Джанго == 1.4

psycopg2 == 2.4.5

... и т.д.... и теперь все в порядке.

Ответ 4

Для меня libcryto и libss версии 1.0.0 находятся ниже:

/Library/PostgreSQL/9.1/lib/libcrypto.1.0.0.dylib
/Library/PostgreSQL/9.1/lib/libssl.1.0.0.dylib

поэтому команды, которые исправляют мою проблему:

sudo ln -fs /Library/PostgreSQL/9.1/lib/libssl.1.0.0.dylib /usr/lib/libssl.dylib
sudo ln -fs /Library/PostgreSQL/9.1/lib/libcrypto.1.0.0.dylib /usr/lib/libcrypto.dylib

Ответ 5

В OSX 10.11 El Capitan решение с заменой символических ссылок сообщило Operation not permitted. Решение, которое работало для меня, использовало brew и настраивало DYLD_LIBRARY_PATH. Итак:

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 переустановить psycopg2:

pip uninstall psycopg2
pip install psycopg2

и проверьте, работает ли он:

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

Ответ 6

мой друг, просто скопируйте libssl. * файлы из каталога PostgreSQL lib в /usr/lib и перезапустите приложение, в этом случае все будет идеально. ^ _ ^

Ответ 7

Для меня на Mavericks, он работал, чтобы просто скопировать два dylib и перезапустить Python:

cp /Library/PostgreSQL/9.3/lib/libssl.1.0.0.dylib /usr/lib/
cp /Library/PostgreSQL/9.3/lib/libcrypto.1.0.0.dylib /usr/lib/

Ответ 8

Если вам неудобно копировать библиотеки в системный каталог, вы можете использовать переменную среды DYLD_LIBRARY_PATH, чтобы заставить ОС искать каталог библиотеки Postgres для libssl. Например:.

$ DYLD_LIBRARY_PATH=/Library/PostgreSQL/9.4/lib pip install psycopg2

(задокументировано на странице руководства dyld).