programing

Python mysqldb: 라이브러리가 로드되지 않음: libmysqlclient.18.dylib

topblog 2023. 6. 27. 21:37
반응형

Python mysqldb: 라이브러리가 로드되지 않음: libmysqlclient.18.dylib

방금 macos 10.6에 mysqldb for python 2.7을 컴파일하여 설치했습니다.간단한 테스트 파일을 생성하여 데이터를 가져옵니다.

import MySQLdb as mysql

먼저, 이 명령은 빨간색 밑줄이 그어져 있고 정보는 "해결되지 않은 가져오기"를 알려줍니다.그리고 나서 다음과 같은 간단한 파이썬 코드를 실행하려고 했습니다.

import MySQLdb as mysql

def main():
    conn = mysql.connect( charset="utf8", use_unicode=True, host="localhost",user="root", passwd="",db="" )

if __name__ == '__main__'():
    main()

실행 시 다음 오류 메시지가 표시됩니다.

Traceback (most recent call last):
  File "/path/to/project/Python/src/cvdv/TestMySQLdb.py", line 4, in <module>
    import MySQLdb as mysql
  File "build/bdist.macosx-10.6-intel/egg/MySQLdb/__init__.py", line 19, in <module>
    \namespace cvdv
  File "build/bdist.macosx-10.6-intel/egg/_mysql.py", line 7, in <module>
  File "build/bdist.macosx-10.6-intel/egg/_mysql.py", line 6, in __bootstrap__
ImportError: dlopen(/Users/toom/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.6-intel.egg-tmp/_mysql.so, 2): Library not loaded: libmysqlclient.18.dylib
  Referenced from: /Users/toom/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.6-intel.egg-tmp/_mysql.so
  Reason: image not found

제 문제에 대한 해결책은 무엇일까요?

편집: 사실 라이브러리가 /usr/local/mysql/lib에 있다는 것을 알게 되었습니다.그래서 저는 제 파이데브 일식 버전을 어디서 찾아야 하는지 알려줘야 합니다.이거 어디에 두죠?

저는 도서관에 상징적인 링크를 만들어 문제를 해결했습니다.예.

실제 라이브러리는 다음 위치에 있습니다.

/usr/local/mysql/lib

그리고 나서 상징적인 링크를 만들었습니다.

/usr/lib

명령 사용:

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

다음과 같은 매핑을 가질 수 있도록 합니다.

ls -l libmysqlclient.18.dylib 
lrwxr-xr-x  1 root  wheel  44 16 Jul 14:01 libmysqlclient.18.dylib -> /usr/local/mysql/lib/libmysqlclient.18.dylib

그게 다였어요.그 후 모든 것이 잘 작동했습니다.

편집:

El 무결성 SIP, "함)를하면 MacOS El Capitan에서 할 수 /usr/lib/다음 지침에 따라 SIP를 비활성화할 수 있지만 링크를 만들 수 있습니다./usr/local/lib/대신:

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib

내가 선호하는 방법은 응용 프로그램이 실행되는 방식에 따라 실제로 범위에 포함될 수도 있고 포함되지 않을 수도 있는 환경 변수를 가지고 노는 것보다 실제로 라이브러리를 수정하는 것입니다.이것은 사실 꽤 간단한 과정입니다.

먼저 오류 출력을 보고 문제가 되는 파이썬 모듈이 어디에 있는지 확인합니다.

가져오기 오류: dlopen(/Library/Python/2.7/site-packages/_mysql.so, 2): 라이브러리가 로드되지 않음: libmysqlclient.18.dyllib 참조 위치: /Library/Python/2.7/site-packages/_mysql.so. 이유: 이미지를 찾을 수 없습니다.

문제가 되는 파일은 /Library/Python/2.7/site-packages/_mysql입니다.그렇게

그런 다음 _mysql.so가 libmysqlclient.18.dylib을 찾아야 한다고 생각하는 위치를 확인합니다.

% otool -L /Library/Python/2.7/site-packages/_mysql.so
/Library/Python/2.7/site-packages/_mysql.so:
    libmysqlclient.18.dylib (compatibility version 18.0.0, current version 18.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)

따라서 경로 정보가 없는 libmysqlclient.18.dylib을 찾습니다. 이 문제는 다음과 같습니다.

% sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib /Library/Python/2.7/site-packages/_mysql.so

이제 _mysql.so는 라이브러리의 전체 경로를 알고 있으며 환경 변수에 관계없이 모든 것이 작동합니다.

% otool -L /Library/Python/2.7/site-packages/_mysql.so                                                                                           
/Library/Python/2.7/site-packages/_mysql.so:
    /usr/local/mysql/lib/libmysqlclient.18.dylib (compatibility version 18.0.0, current version 18.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)

저는 상징적인 링크를 만드는 것보다 이 문제에 대한 다른 해결책이 있다는 것을 알게 되었습니다.

libmysqlclient.18.dylib이 있는 디렉토리의 경로를 DYLD_LIBRARY_PATH 환경 변수로 설정합니다.제가 한 일은 제 .bash_profile에 다음 행을 넣는 것이었습니다.

export DYLD_LIBRARY_PATH=/usr/local/mysql-5.5.15-osx10.6-x86/lib/:$DYLD_LIBRARY_PATH

바로 그겁니다.

제 경우, Mac OS X 10.9 Mavericks에서 오류가 발생했습니다.DMG의 Oracle/MySQL 웹 사이트에서 MySQL Community Server를 직접 설치했습니다.

lib 파일을 /usr/local/lib 디렉토리에 심볼릭 링크하기만 하면 되었습니다.

mkdir -p /usr/local/lib   
ln -s /usr/local/mysql/lib/libmysql* /usr/local/lib

보너스: Mac OS X도 실행 중이라면 libmysqlclient.18.dylib 파일(http://apps.tempel.org/FindAnyFile )과 같은 파일을 찾을 수 있는 훌륭한 도구가 있습니다.이것이 제가 원래 dylib 파일의 위치를 찾은 방법입니다.

.profile 또는 .bashrc(어느 것을 사용하든)에 저장하는 것이 가장 쉬운 방법이라는 것을 알게 되었습니다. 소스 파일에 경로를 유지하는 것에 비해 심볼 링크는 지저분합니다.

또한 yoshisurfs 응답과 비교하여 mysql이 설치되는 대부분의 경우 mysql 디렉토리의 이름을 사용하기 쉽도록 전체 파일 이름이 아닌 mysql로만 변경해야 합니다.

export DYLD_LIBRARY_PATH=/usr/local/mysql/lib:$DYLD_LIBRARY_PATH

몇 가지 가상 환경에서 이러한 문제를 경험한 적이 있습니다.

pip uninstall MySQL-python
pip install -U MySQL-python

두 번 모두 일했습니다.

pydeveclipse 플러그인에서 DYLD에 대한 환경 변수를 설정할 수 있습니다.경로는 다음과 같이 설정할 수 있습니다.

눈 표범에 mysqldb 설치

홈브루를 사용하는 사용자는 다음을 사용하여 이 문제를 해결할 수 있습니다.

$ brew link mysql

의 경우, 10에서, 는 나의경우, El Capitan(OSX 10.11)의 다음을 수행해야 합니다.~/.bash_profile

export DYLD_LIBRARY_PATH="/usr/local/mysql/lib:${DYLD_LIBRARY_PATH}"
export PATH="/usr/local/mysql/lib:${PATH}"

Capitan에 때 El Capitan 에있을오발생합니다가류때:다▁el▁when니발▁error.ln: /usr/lib/libmysqlclient.18.dylib: Operation not permitted"시스템 무결성 보호"를 닫아야 합니다.

먼저 재부팅하고 cmd + R을 누르고 복구 모드로 들어간 다음 터미널을 시작하고 다음 명령을 입력합니다.csrutil disable이제 다시 부팅하고 다시 시도할 수 있습니다.

SIP(rootless로 인해 usr/lib/에 액세스할 수 없음)가 기본적으로 설정되어 있는 새로운 El Capitan 설치에서는 복구 모드가 아니면 심볼 링크를 생성할 수 없습니다.@yannisxu가 말했듯이 SIP를 비활성화하고 /usr/lib/local에 대한 심볼 링크를 수행하면 작동합니다.

SIP를 해제하는 대신 MAC OSX El Capitan에서 다음 명령을 사용할 수 있습니다.

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib

이전에는 root로 로그인할 수 있는 옵션이 있었고 이 옵션은 SIP를 비활성화할 수 있지만 현재는 사용되지 않는 최종 릴리스에서는 여기에서 자세한 내용을 읽을 수 있습니다. https://forums.developer.apple.com/thread/4686

질문:.

Developer Beta 1에는 루트 권한으로 실행할 때 SIP를 사용하지 않도록 설정할 수 있는 nvram boot-args 명령이 있습니다.

nvram boot-args="rootless=0"

SIP를 비활성화하는 이 옵션을 El Capitan 릴리스 버전에서도 사용할 수 있습니까?아니면 개발자 빌드에만 해당됩니까?

답변:

이 nvram boot-args 명령은 사라집니다.El Capitan 릴리스 버전에서는 사용할 수 없으며 Developer Betas가 끝나기 전에 사라질 수 있습니다.향후 개발자 베타를 위한 릴리스 노트를 주시합니다.

저는 이 문제를 해결하는 데 시간이 좀 걸렸습니다.

제 경우는 조금 다릅니다.MySQL 서버 버전은 5.1.x입니다. 그리고 어떻게든 MySQL-python을 1.2.3에서 1.2.5로 업그레이드했습니다.그리고 저는 그 이후로 계속해서 이 문제를 겪었고, 그 이후로 다음과 같은 소프트 링크를 추가했습니다.

libmysqlclient.18.dylib -> /usr/local/mysql/lib/libmysqlclient.18.dylib

MySQL 5.1.x의 경우 libmysqlclient.18.dylib은 없고 libmysqlclient.16.dylib만 있는 것으로 나타났습니다.MySQL-python을 1.2.3으로 다운그레이드하거나 MySQL 서버를 5.6.x로 업그레이드하여 이 문제를 해결할 수 있습니다(5.5.x는 시도하지 않았습니다).

MySQL을 업그레이드하는 것은 제게 선택사항이 아니기 때문에 라이브러리를 1.2.3으로 다운그레이드했습니다.

http://dev.mysql.com/downloads/connector/c/ 으로 이동하여 패키지를 받은 후 MySQL Connector/C를 다운로드하고, 새 디렉터리 'mysql'을 만들고, 디렉터리 mysql 아래의 Mysql Connector 파일의 압축을 푼 다음, mysql 아래에서 다른 빈 디렉터리 'build'를 만듭니다.설치 후 'build'를 사용하여 MySQL Connector/C. cd build &&cmake ../your-MySQL-Connector-source-dir make &make 설치를 수행하면 /usr/local 아래에 mysql이라는 디렉토리가 나타납니다.필요한 모든 헤더와 립을 포함하고 있습니다. 이 디렉토리로 이동하여 해당 위치에 헤더와 립을 복사합니다.

시도할 수 있습니다.

sudo install_name_tool -change libmysqlclient.18.dylib /Users/toom/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.6-intel.egg-tmp/_mysql.so`

MacOS에서 MySQL Connector/C의 버그(현재 버전은 10.13.2)에 대해 참고하고, mysql_config를 수정한 후 mysql 클라이언트 또는 MySQL-python을 다시 설치합니다. 자세한 내용은 다음과 같습니다.

언급URL : https://stackoverflow.com/questions/6383310/python-mysqldb-library-not-loaded-libmysqlclient-18-dylib

반응형