developer tip

Psycopg2 이미지를 찾을 수 없습니다.

copycodes 2020. 12. 14. 20:04
반응형

Psycopg2 이미지를 찾을 수 없습니다.


postgres mac 앱을 사용하여 postgres를 설정하려고 시도하고이 오류가 발생하여 해결할 수 없었습니다. 이견있는 사람?

    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

$ 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에서 작업하는 동안이 오류가 발생했습니다. Django == 1.3으로 virtualenv에서 작업하지만 위의 명령을 실행해야하는 Django == 1.5에서는 작동하지 않습니다.

OS X El Capitan에서는 시스템 보호를 비활성화하지 않고 이러한 링크를 수행 할 수 없지만 / usr / local / lib에 링크하면 잘 작동합니다.


레일에서 비슷한 문제를 다룰 때 저에게 도움이되는 솔루션을 찾았습니다. .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

편집 : psql을 실행하려고 할 때 DYLD_FALLBACK_LIBRARY_PATH를 설정하면 오류가 발생하는 것 같습니다. 이 문제를 해결하려면 .bash_profile에 다음 두 줄을 추가 할 수 있습니다.

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

이것은 bash를 사용하고 있고 .bash_profile이 홈 디렉토리에 있다고 가정합니다. 그렇지 않은 경우 (또는 .bash_profile 대신 .bashrc 또는 기타 환경 설정을 사용하는 경우) ~/.bash_profile명령 일부를 환경 설정 스크립트 경로로 변경하십시오.

별칭이 지정된 명령은 기본적으로 현재 bash 환경에 영향을주지 않는 서브 쉘을 시작합니다. 따라서 DYLD_FALLBACK_LIBRARY_PATH 변수를 설정 해제하면 일시적 일뿐입니다. psql을 종료하면 환경 변수가 다시 설정됩니다.


이 문제를 해결하는 데 아침 내내 비용이 들었습니다. http://initd.org/psycopg/articles/2010/11/11/links-about-building-psycopg-mac-os-x/에 대한 토론이 정말 도움이되었습니다. Jurie의 답변 덕분에 내 문제 (Mac)에 대한 해결책은 다음과 같습니다.

  1. brew를 사용하여 openssl 1.0.0을 설치합니다.

     brew install openssl
    
  2. 다음 명령을 사용합니다.

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

    1.0.1x 부분을 ​​현재 버전으로 교체 하십시오. 나에게는 1.0.1h입니다.

도움이 되었기를 바랍니다!

편집 : 하루 후, 데이터베이스에 연결해야 할 때마다 두 번째 명령을 입력해야하므로이 문제에 대한 영구적 인 해결책은 아닙니다.


이것은 Postgresql을 업그레이드하고 내 virtualenv에 psycopg2를 설치 한 후에 나에게 발생했습니다. 재설치 (재 구축)가 저에게 효과적이었습니다.

pip uninstall psycopg2
pip install psycopg2

로드하기 전에 bash 환경에서 다음을 시도하십시오.

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

.. 'xy'를 시스템의 버전으로 바꿉니다.

..KindOfGuy가 언급했듯이 bash 프로필에서 이것을 설정하면 다른 프로그램을 방해 할 수 있습니다.

.. 물론 bash 프롬프트에서 실행하지 않는 경우 pyenv가 허용하는 방식으로 환경을 설정해야합니다. ..pyenv 자체를 편집하여 상단에 배치 할 수도 있습니다.

또 다른 대안은 이것을 psycopg2를 가져 오기 전에 실행되는 파이썬 스크립트에 넣는 것입니다 :

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

.. 다시 'xy'를 / Library / PostgreSQL의 시스템 버전으로 바꿉니다.


el capitan에서 postgres.app 9.4에서 9.5로 업그레이드 할 때이 문제가 발생했습니다.

다른 솔루션은 특정 디렉토리에 대한 시스템 잠금으로 인해 el capitan에서 (쉽게) 작동하지 않습니다. 즉, 심볼릭 링크 솔루션이 대부분의 경우 액세스 가능성이 낮거나 이상적입니다.

이것은 대체 변수를 남깁니다. 현재 답변이 잘못된 디렉토리를 가리 킵니다. 2013 년 이후로 dylibs 디렉토리가 변경된 것 같습니다.

그래서 다음은 저에게 맞는 최신 대체 디렉토리입니다.

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

Mac OS X 10.11 (El Capitan)에서는 /usr/lib루트 사용자 만 읽을 수 있습니다. 당신은 얻을 것이다 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

Big picture, the problem is that a required library couldn’t be found. You can alter where psycopg2 looks for libssl using Apple’s open source compiler tools, otool and install_name_tool. These ship with OS X, and manual pages are available with man <command>.

Change into the psycopg2 module directory mentioned in the error message. Once there:

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

This lists the libraries _psycopg2.so will look for. You can change where it’ll look with 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

You’ll need to adjust for where you have libssl.1.0.0.dylib, of course. The example I gave is the default Homebrew path, but you might have it from Anaconda and/or the PostgreSQL app bundle. (brew install openssl if you don’t have it yet.) You’ll also likely need to repeat for libcrypto.

Executing this change may fail depending on how _psycopg2.so was built. If that happens, you could probably build the module yourself with custom library paths, but I won’t get into that.

This approach has the advantage of being narrower, and thus less risky, than the approach (given in other answers here) of linking libssl 1.0.0 into dyld’s search paths (either through ln -s or setting a DYLD_* environment variable). (See warnings against these approaches in a pair of discussions and some code. Learn more about dyld through man dyld.) It has the disadvantage of needing to be repeated for each copy of psycopg2. Choose your own adventure.

Disclaimer: Most of the content in this answer is from knowledge I cobbled together in one day. I am no expert.


I was missing the postgresql client package, so I installed them with brew and that fixed this issue for me.

brew update
brew doctor
brew install postgresql

I had the same error because of upgrading Postgres.app (from 9.3 to 9.4).

The solution was to delete the pip cache wheels because they were pointing to Postgres.app version 9.3.

I've found the according psycopg wheel cache files this way

grep -r psycopg ~/.pip/cache

and deleted the directory I've found with the last command.


I found this solution that worked for me

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 

Replace this part '/Applications/Postgres.app/Contents/Versions/9.3/' depending upon the location where psql is installed on your machine. Command to find where psql is installed :which psql

UPDATE FROM COMMENTS: On OSX 10.11 (El Capitan), you can no longer copy files to /usr/lib. Use /usr/local/lib


pip install psycopg2-binary

works like a charm!


Did you install psycopg2? You need it in order to integrate python with postgresql.


I'm experiencing a similar issue with mysql. The library requested is is failing to load /usr/local/mysql/lib/libmysqlclient_r.16.dylib

However, in this directory, there is a later version of the library: /usr/local/mysql/lib/libmysqlclient.20.dylib

I am working in a virtualenvwrapper and have attempted to reinstall all of the previously install dependencies to no avail. Any assistance would be greatly appreciated.


Just wanted to share what worked for me. I was using Anaconda with jupyter. The following did work:

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

But then caused later issues importing another library (plotly). After playing around with pip, I realised I should probably be using conda instead and the following seemed to fix everything.

conda install psycopg2

The solution that worked for me was to install psycopg2 with the "no-binary" option set, which tells psycopg2 to use the system libssl.

By default psycopg2 uses its own version of libssl and it seemed to keep a dependency on an old version of the library which no longer existed after my upgrade.

See the psycopg2 install docs for more detail about the no-binary option.

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

Try updating psycopg2 using pip install psycopg2 --upgrade to the latest version, then try again.


try finding the file or files libssl.1.0.0.dylib and copy them to your '/usr/local/lib/' for me the origin was, '/Library/PostgreSQL/11/lib/' ,(change the version to yours) alternatively you may copy all to '/usr/local/lib/' go to the origin and type: sudo cp * /usr/local/lib/ to copy all files. I found the solution and changed it to solve mine https://oscarvalles.wordpress.com/2017/03/24/dlopenlibrary-not-loaded-libssl-dylib-fail-to-import-psycopg2-in-virtualenv/


Use psycopg2-binary instead

pip install psycopg2-binary

참고URL : https://stackoverflow.com/questions/16407995/psycopg2-image-not-found

반응형