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

Как запустить psycopg2 на El Capitan без нажатия на ошибку libssl

У меня есть настройка python django dev на моем mac и только что обновлен до El Capitan.

У меня есть psycopg2, установленный в virtualenv, но когда я запускаю свой сервер, я получаю следующую ошибку -

django.core.exceptions.ImproperlyConfigured: Error loading psycopg2 module: dlopen(/Users/aidan/Environments/supernova/lib/python2.7/site-packages/psycopg2/_psycopg.so, 2): Library not loaded: libssl.1.0.0.dylib
  Referenced from: /Users/aidan/Environments/supernova/lib/python2.7/site-packages/psycopg2/_psycopg.so
  Reason: image not found

Я попытался переустановить мой virtualenv

pip install -f requirements.txt

И я пробовал обновить psycopg2

pip uninstall psycopg2
pip install psycopg2

Но я все еще получаю ту же ошибку.

Я также попробовал добавить символические ссылки к /usr/lib, но новая версия root Capitan не позволяет это -

$ sudo ln -s /Library/PostgreSQL/9.2/lib/libssl.1.0.0.dylib
 /usr/lib
ln: /usr/lib/libssl.1.0.0.dylib: Operation not permitted

Итак, я попробовал /usr/local безрезультатно.

Системная версия openssl кажется 1.0.2 -

$ openssl version
OpenSSL 1.0.2d 9 Jul 2015

Как это исправить?

4b9b3361

Ответ 1

Я попробовал следующее:

У меня есть brew, установленный на моей машине. Запуск $ brew doctor дал мне предложение сделать следующее:

$ sudo chown -R $(whoami):admin /usr/local

Как только это было сделано, я снова установил psycopg2 и выполнил следующее:

$ sudo ln -s /Library/PostgreSQL/9.3/lib/libssl.1.0.0.dylib /usr/local/lib/
$ sudo ln -s /Library/PostgreSQL/9.3/lib/libcrypto.1.0.0.dylib /usr/local/lib/

Обратите внимание на версию вашего PostgreSQL и путь /usr/local/lib.

Сделав это, я снова вернусь к рабочей настройке.

P.S.: Предлагаемый шаг brew может быть неактуальным, но я сказал, потому что вы видели проблемы с разрешением. Вы также можете отключить режим без корней.

Ответ 2

Причина в том, что psycopg2 использует относительные пути к нескольким библиотекам PostgreSQL. Чтобы исправить это, я использовал

sudo install_name_tool -change libpq.5.dylib /Library/PostgreSQL/9.4/lib/libpq.5.dylib /Library/Python/2.7/site-packages/psycopg2/_psycopg.so
sudo install_name_tool -change libcrypto.1.0.0.dylib /Library/PostgreSQL/9.4/lib/libcrypto.1.0.0.dylib /Library/Python/2.7/site-packages/psycopg2/_psycopg.so
sudo install_name_tool -change libssl.1.0.0.dylib /Library/PostgreSQL/9.4/lib/libssl.1.0.0.dylib /Library/Python/2.7/site-packages/psycopg2/_psycopg.so

чтобы преобразовать относительные пути в абсолютные. Конечно, вам нужно будет делать это каждый раз при переустановке psycopg2.

Ответ 3

Вы используете анаконду? Если это очень простое решение, которое сработало для меня, это просто установить с помощью conda.

В частности, введите в командной строке следующее:

conda install psycopg2

Ответ 4

На основе решения @ArtHarg я использовал это с python 3.4, PostgreSQL 9.5 и OS X el capitan:

sudo install_name_tool -change libpq.5.dylib /Library/PostgreSQL/9.5/lib/libpq.5.dylib /Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/psycopg2/_psycopg.so
sudo install_name_tool -change libcrypto.1.0.0.dylib /Library/PostgreSQL/9.5/lib/libcrypto.1.0.0.dylib /Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/psycopg2/_psycopg.so
sudo install_name_tool -change libssl.1.0.0.dylib /Library/PostgreSQL/9.5/lib/libssl.1.0.0.dylib /Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/psycopg2/_psycopg.so

Ответ 5

Это тоже боль для меня, потому что я использовал для установки

export DYLD_FALLBACK_LIBRARY_PATH=/Library/Postgresql/9.5/lib

в моем .bash_profile, и все работает нормально. Но теперь эта переменная среды является одним из тех, которые не могут быть переданы в новые оболочки. Это означает, что я могу импортировать psycopg2 в python из моей оболочки входа, но мои тестовые скрипты умирают.

Теперь я устанавливаю $SIP_WORKAROUND_LIBRARY_PATH на то же значение, которое OSX оставит в покое, а затем я должен сделать:

export DYLD_FALLBACK_LIBRARY_PATH=$SIP_WORKAROUND_LIBRARY_PATH

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

Ответ 6

Я запускаю El Capitan 10.11.5 и python 3.5.1 и попал в ту же самую ошибку с попыткой импортировать psycopg2 либо в простую консоль, либо в PyCharm. Мне удалось исправить это, получив root:

sudo su -

затем символически связывая две библиотеки:

ln -s /Library/PostgreSQL/9.5/lib/libssl.1.0.0.dylib /usr/local/lib
ln -s /Library/PostgreSQL/9.5/lib/libcrypto.1.0.0.dylib /usr/local/lib

Затем я испытал connection error с сообщением, которое закончилось:

psycopg2.OperationalError: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"?

Моя установка PostgreSQL прослушивала сокет в /tmp, поэтому для разрешения соединения потребовалась еще одна символическая ссылка:

ln -s /tmp/.s.PGSQL.5432 /var/pgsql_socket/