Не удается загрузить привязки Python для PostgreSQL — psycopg2

После обновления с Lion Mountain до Mavericks (10.9.4) установка Trac перестала работать.

Во-первых, я пытаюсь решить эту проблему путем обновления установки Trac, но получаю следующее сообщение об ошибке:

$ trac-admin /Users/myuser/Documents/2014/trac upgrade
Error: Cannot load Python bindings for PostgreSQL

Затем, тестируя непосредственно на консоли Python, я могу сказать, что это соответствует, поскольку я получаю эквивалентную ошибку:

 $ python
 Python 2.7.5 (default, Mar  9 2014, 22:15:05) 
 [GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] on darwin
 Type "help", "copyright", "credits" or "license" for more information.
 >>> import psycopg2
 Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
   File "/Library/Python/2.7/site-packages/psycopg2/__init__.py", line 50, in <module>
     from psycopg2._psycopg import BINARY, NUMBER, STRING, DATETIME, ROWID
 ImportError: dlopen(/Library/Python/2.7/site-packages/psycopg2/_psycopg.so, 2)
 Library not loaded: libssl.1.0.0.dylib
   Referenced from: /Library/Python/2.7/site-packages/psycopg2/_psycopg.so
   Reason: image not found
 >>> 

Я уже испробовал несколько подходов: установка и удаление psycopg2 (используя pip и easy_install) или даже сборка psycopg2 из исходников.

Затем, просматривая решение, я нашел несколько предложений по этим связанным вопросам 10-8-4-python-2-7-postgresq">Q1, Q2 и Q3, но пока безуспешно.

otool, дает мне следующий вывод:

$ otool -L /Library/Python/2.7/site-packages/psycopg2/_psycopg.so

/Library/Python/2.7/site-packages/psycopg2/_psycopg.so:
     libpq.5.dylib (compatibility version 5.0.0, current version 5.5.0)
     libssl.1.0.0.dylib (compatibility version 1.0.0, current version 1.0.0)
     libcrypto.1.0.0.dylib (compatibility version 1.0.0, current version 1.0.0)
     /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1197.1.1)

Затем я попытался установить переменную среды DYLD_FALLBACK_LIBRARY_PATH следующим образом:

 $ echo $DYLD_FALLBACK_LIBRARY_PATH
 /Users/myuser/lib:/usr/local/lib:/lib:/usr/lib

В том числе, перезапустите консоль и перезагрузите машину, у меня заканчиваются решения, есть идеи, как я могу это решить?


person emecas    schedule 28.09.2014    source источник
comment
У вас установлен brew или аналогичный?   -  person Burhan Khalid    schedule 28.09.2014
comment
Возможно, вы захотите запустить обновление brew, а затем обновление brew может решить вашу проблему с ssl.   -  person Burhan Khalid    schedule 28.09.2014
comment
Спасибо, я сделал это, но это все еще то же самое. Это сообщение привлекает мое внимание, есть идеи? OpenSSL, предоставляемый OS X, слишком стар для некоторых программ. Как правило, для вас это не имеет никаких последствий. Если вы создаете свое собственное программное обеспечение и для него требуется эта формула, вам нужно будет добавить к своим переменным сборки: LDFLAGS: -L/usr/local/opt/openssl/lib CPPFLAGS: -I/usr/local/opt/openssl/ включать   -  person emecas    schedule 29.09.2014
comment
Пробовали ли вы добавить /usr/local/opt/openssl/lib к DYLD_FALLBACK_LIBRARY_PATH? Сообщение, которым вы поделились в комментариях, указывает на то, что ваш OpenSSL хранится в /usr/local/opt/openssl/lib, который, похоже, не находится на вашем пути DYLD.   -  person TML    schedule 29.09.2014
comment
Любопытные, косвенные и дополнительные решения: обновление/обновление с помощью «варева», а затем правильная настройка переменной DYLD_FALLBACK_LIBRARY_PATH. Теперь это работает! Спасибо Бурхану Халиду и @TML   -  person emecas    schedule 03.10.2014
comment
Вы должны опубликовать это как ответ на свой вопрос, @emecas   -  person TML    schedule 04.10.2014


Ответы (3)


Наконец, я смог запустить Trac, получив доступ к моей старой базе данных билетов, хранящейся в PostgreSQL 9.2.

... После пары лет попыток и пары обновлений с Mavericks до Yosemite, а затем до El Capitan решение было таким:

Шаг 1. Измените владельца папки /usr/local

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

Шаг 2. Обновите путь

PG_HOME=/Library/PostgreSQL/9.2
PATH=$PATH:$PG_HOME/bin

Шаг 3. Переустановите psycopg2

pip uninstall psycopg2
pip install psycopg2

Шаг 4. Обновите относительные пути, используемые psycopg2

sudo install_name_tool -change libpq.5.dylib /Library/PostgreSQL/9.2/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.2/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.2/lib/libssl.1.0.0.dylib /Library/Python/2.7/site-packages/psycopg2/_psycopg.so
person emecas    schedule 01.07.2016

@Emerson заслуживает полной похвалы за это решение, однако вот сценарий, который исправляет только ссылки OpenSSL в _psycopg.so независимо от того, как настроена ваша система. Я часами зацикливался, пытаясь исправить это, но безрезультатно, и его ответ, наконец, исправил это.

Это, наконец, сработало для меня и может быть изменено, чтобы быть несколько общим решением:

#!/bin/bash
echo Fixing psycopg2 links in Mac OS X ...
site_packages="$(pip show psycopg2 | grep Location | awk '{ print $2 }')"
openssl_lib="$(brew --prefix openssl)/lib"
sudo install_name_tool -change libcrypto.1.0.0.dylib "$openssl_lib/libcrypto.1.0.0.dylib" "$site_packages/psycopg2/_psycopg.so"
sudo install_name_tool -change libssl.1.0.0.dylib "$openssl_lib/libssl.1.0.0.dylib" "$site_packages/psycopg2/_psycopg.so"

По сути, это решение @Emerson, но с путями, динамически определяемыми вашими установками и местами установки варева. Вам нужно будет уже установить psycopg2 вместе с pip и brew.

person razzed    schedule 03.02.2017

Я столкнулся с точно такой же проблемой и решил ее, выполнив следующие шаги:

ШАГ 1:

Проверьте, установлен ли у вас openssl, написав openssl в командной строке:

>>openssl

Если он запускается, это означает, что он установлен в вашей системе, и вы можете пропустить ШАГ-2 и сразу перейти к ШАГУ-3.

ШАГ 2:

Если openssl не установлен, установите его:

brew install openssl

ШАГ 3:

Проверьте путь к openssl lib на вашем компьютере. На моей машине было:

/usr/local/opt/openssl/lib/

ШАГ 4.

Вам нужно просто включить этот путь из STEP-3, выполнив следующую команду:

export DYLD_LIBRARY_PATH=***YOUR OPENSSL PATH FROM STEP-3 HERE***

то есть в моем случае команда с путем STEP-3:

export DYLD_LIBRARY_PATH=/usr/local/opt/openssl/lib/

Теперь запустите python и импортируйте psycopg2. После этого рецепта у меня не было ошибок.

person Ali Raza Bhayani    schedule 23.12.2014
comment
как я могу найти местоположение openssl на моей машине? в любом случае есть терминал .ANswer : whereis openssl :D - person Jean Raymond Daher; 09.03.2015
comment
ну мне не помогло... Файл /Library/Python/2.7/site-packages/psycopg2/__init__.py, строка 50, в «модуле» из psycopg2._psycopg import BINARY, NUMBER, STRING, DATETIME, ROWID ImportError: dlopen(/Library/Python/2.7/ site-packages/psycopg2/_psycopg.so, 2): библиотека не загружена: libssl.1.0.0.dylib Ссылка из: /Library/Python/2.7/site-packages/psycopg2/_psycopg.so Причина: изображение не найдено - person Jean Raymond Daher; 09.03.2015