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

Изображение Psycopg2 не найдено

Попытка настроить postgres с помощью приложения postgres mac и нажать эту ошибку, которую я не смог решить. Любые мысли?

    ImportError: dlopen(/Users/Craig/pyenv/mysite/lib/python2.7/site-packages/psycopg2/_psycopg.so, 2): Library not loaded: @executable_path/../lib/libssl.1.0.0.dylib
  Referenced from: /Applications/Postgres.app/Contents/MacOS/lib/libpq.dylib
  Reason: image not found
4b9b3361

Ответ 1

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

Я столкнулся с этой ошибкой при работе над Django. Я работаю над virtualenv с Django == 1.3, но не на Django == 1.5, где мне нужно выпустить команды выше.

В OS X El Capitan вы не можете делать эти ссылки, не отключая системную защиту, но она работает хорошо, если вы ссылаетесь на/usr/local/lib

Ответ 2

Я нашел решение, которое работало для меня, когда речь шла о подобной проблеме на рельсах. Добавьте в свой .bash_profile,.bash_rc или эквивалент следующее:

export DYLD_FALLBACK_LIBRARY_PATH=/Applications/Postgres.app/Contents/MacOS/lib:$DYLD_LIBRARY_PATH

(Предположим, вы установили Postgres.app в папку по умолчанию). Затем перезапустите сеанс терминала и повторите попытку.

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

Смотрите также: https://github.com/PostgresApp/PostgresApp/issues/109#issuecomment-18387546

EDIT. Кажется, что установка DYLD_FALLBACK_LIBRARY_PATH вызывает ошибку при попытке запустить psql. Чтобы исправить это, вы можете добавить следующие две строки в ваш .bash_profile:

alias psql="(. ~/.bash_profile; unset DYLD_FALLBACK_LIBRARY_PATH; psql)";

Предполагается, что вы используете bash и что ваш .bash_profile находится в вашем домашнем каталоге. Если это не так (или если вы используете .bashrc или другую настройку среды вместо .bash_profile), измените часть ~/.bash_profile команды на путь к настройке среды script.

Команда aliased в основном запускает подоболочку, которая не влияет на текущую среду bash. Поэтому, когда он отключает переменную DYLD_FALLBACK_LIBRARY_PATH, она является временной. После выхода из psql переменная среды будет снова установлена.

Ответ 3

Эта проблема стоила мне все утро, чтобы решить. Я нашел обсуждение http://initd.org/psycopg/articles/2010/11/11/links-about-building-psycopg-mac-os-x/ действительно полезным. Благодаря ответу Jurie решение моей проблемы (в Mac) выглядит следующим образом:

  • Установите openssl 1.0.0 с помощью brew:

     brew install openssl
    
  • используя следующую команду:

    export DYLD_LIBRARY_PATH=/usr/local/Cellar/openssl/**1.0.1x**/lib
    

    замените часть 1.0.1x текущей версией. Для меня это 1.0.1h.

Надеюсь, это поможет!

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

Ответ 4

Это случилось со мной после обновления Postgresql и после установки psycopg2 в моем virtualenv. Переустановка (перестройка) работала для меня.

pip uninstall psycopg2
pip install psycopg2

Ответ 5

В вашей среде bash перед ее загрузкой попробуйте следующее:

export DYLD_LIBRARY_PATH=/Library/PostgreSQL/x.y/lib

.. заменив "x.y" на версию вашей системы.

.. помните, что установка этого в вашем профиле bash может помешать другим программам, как отметил KindOfGuy.

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

Другая альтернатива заключается в том, чтобы поместить это в python script, который выполняется до попытки импортировать psycopg2:

import os
os.environ['DYLD_LIBRARY_PATH'] = '/Library/PostgreSQL/x.y/lib'

.. снова, заменив "x.y" на версию вашей системы в/Library/PostgreSQL.

Ответ 6

Я столкнулся с этой проблемой, когда обновился с postgres.app с 9.4 до 9.5 на английском языке.

Другие решения не будут работать (легко) в el capitan из-за системной блокировки в определенных каталогах, то есть решение символической ссылки будет менее доступно/идеально для большинства.

Это оставляет переменную. Текущий ответ указывает на неправильный каталог. Я предполагаю, что каталог dylibs изменился с 2013 года.

Итак, вот самый последний резервный каталог, который работает для меня:

export DYLD_FALLBACK_LIBRARY_PATH=/Applications/Postgres.app/Contents/Versions/latest/lib:$DYLD_LIBRARY_PATH

Ответ 7

Большая картина, проблема в том, что искомая библиотека не может быть найдена. Вы можете изменить, где psycopg2 ищет libssl, используя Apples инструменты компилятора с открытым исходным кодом, otool и install_name_tool. Эти корабли с OS X и страницы руководства доступны с man <command>.

Перейдите в каталог модуля psycopg2, указанный в сообщении об ошибке. Когда-то там:

$ otool -L _psycopg.so
    ...
    @executable_path/../lib/libssl.1.0.0.dylib (compatibility version 1.0.0, current version 1.0.0)
    ...

В этом списке перечислены библиотеки _psycopg2.so. Вы можете изменить, где он будет выглядеть с помощью install_name_tool:

$ install_name_tool -change @executable_path/../lib/libssl.1.0.0.dylib /usr/local/opt/openssl/lib/libssl.1.0.0.dylib _psycopg.so

Вам нужно настроить, где у вас libssl.1.0.0.dylib, конечно. Примером, который я дал, является путь по умолчанию для Homebrew, но вы можете получить его от Anaconda и/или пакета приложений PostgreSQL. (brew install openssl, если у вас его еще нет.) Вероятно, вам также потребуется повторить для libcrypto.

Выполнение этого изменения может завершиться неудачно в зависимости от того, как было построено _psycopg2.so. Если это произойдет, вы могли бы, вероятно, создать модуль самостоятельно с помощью настраиваемых путей к библиотеке, но я не получу этого.

Этот подход имеет то преимущество, что он более узкий и, следовательно, менее рискован, чем подход (приведенный в других ответах здесь) о привязке libssl 1.0.0 к пути поиска dyld s (либо через ln -s, либо при установке DYLD_* переменная среды). (См. Предупреждения против этих подходов в паре обсуждения и некоторый код. Узнайте больше о dyld через man dyld.) У него есть недостаток в необходимости повторения для каждой копии psycopg2. Выберите свое приключение.

Отказ от ответственности: большая часть контента в этом ответе - это знание, которое я объединил в один день. Я не эксперт.

Ответ 8

В Mac OS X 10.11 (El Capitan), /usr/lib читается только для пользователя root. Вы получите ln: /usr/lib/libssl.1.0.0.dylib: Operation not permitted error Вы должны использовать /usr/local/lib вместо /usr.

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

Ответ 9

Я нашел это решение, которое сработало для меня

sudo cp /Applications/Postgres.app/Contents/Versions/9.3/lib/libssl.1.0.0.dylib /usr/lib
sudo ln -fs /usr/lib/libssl.1.0.0.dylib /usr/lib/libssl.dylib 

sudo cp /Applications/Postgres.app/Contents/Versions/9.3/lib/libcrypto.1.0.0.dylib /usr/lib
sudo ln -fs /usr/lib/libcrypto.1.0.0.dylib /usr/lib/libcrypto.dylib 

Замените эту часть '/Applications/Postgres.app/Contents/Versions/9.3/' в зависимости от того, где psql установлен на вашем компьютере. Команда, чтобы найти, где установлена ​​psql: which psql

ОБНОВЛЕНИЕ ОТ КОММЕНТАРИЙ: В OSX 10.11 (El Capitan) вы больше не можете копировать файлы в /usr/lib. Используйте/usr/local/lib

Ответ 10

Мне не хватало клиентский пакет postgresql, поэтому я установил их с помощью brew и исправил эту проблему для меня.

brew update
brew doctor
brew install postgresql

Ответ 11

У меня была такая же ошибка из-за обновления Postgres.app(от 9.3 до 9.4).

Решение заключалось в том, чтобы удалить колпачки кэша пипов, поскольку они указывали на версию Postgres.app версии 9.3.

Я нашел соответствующие файлы кэша кеша psycopg таким образом

grep -r psycopg ~/.pip/cache

и удалил каталог, который я нашел с последней командой.

Ответ 12

pip install psycopg2-binary

работает как шарм!

Ответ 13

Вы установили psycopg2? Это необходимо для интеграции python с postgresql.

Ответ 14

У меня возникает аналогичная проблема с mysql. Запрошенная библиотека не загружает /usr/local/mysql/lib/libmysqlclient_r.16.dylib

Однако в этом каталоге есть более поздняя версия библиотеки: /usr/local/mysql/lib/libmysqlclient.20.dylib

Я работаю в virtualenvwrapper и пытаюсь переустановить все ранее установленные зависимости безрезультатно. Любая помощь будет принята с благодарностью.

Ответ 15

Просто хотел поделиться тем, что сработало для меня. Я использовал Anaconda с jupyter. Было выполнено следующее:

 DYLD_LIBRARY_PATH=/usr/local/Cellar/openssl/1.0.2k/lib  jupyter notebook

Но потом возникли проблемы с импортом другой библиотеки (по графику). После игры с пипсом я понял, что, вероятно, я должен использовать конду, а следующее, казалось, исправить все.

conda install psycopg2

Ответ 16

Решение, которое работало для меня, заключалось в установке psycopg2 с опцией "no-binary", которая сообщает psycopg2 использовать систему libssl.

По умолчанию psycopg2 использует свою собственную версию libssl и, похоже, сохраняет зависимость от старой версии библиотеки, которая больше не существовала после моего обновления.

Подробнее см. psycopg2 install docs для более подробной информации о не-двоичной опции.

pip uninstall psycopg2
pip install --no-binary :all: psycopg2

Ответ 17

Попробуйте обновить psycopg2 с помощью pip install psycopg2 --upgrade до последней версии, затем повторите попытку.

Ответ 18

попробуйте найти файл или файлы libssl.1.0.0.dylib и скопируйте их в ваш "/usr/local/lib/", для меня происхождение было "/Library/PostgreSQL/11/lib/" (измените версию на ваш) в качестве альтернативы вы можете скопировать все в '/usr/local/lib/', перейти к источнику и набрать: sudo cp */usr/local/lib/, чтобы скопировать все файлы. Я нашел решение и изменил его, чтобы решить мой https://oscarvalles.wordpress.com/2017/03/24/dlopenlibrary-not-loaded-libssl-dylib-fail-to-import-psycopg2-in-virtualenv/

Ответ 19

Вместо этого используйте psycopg2-binary

pip install psycopg2-binary