[python] Python mysqldb : 라이브러리가로드되지 않았습니다 : libmysqlclient.18.dylib

방금 Mac OS 10.6에서 Python 2.7 용 mysqldb를 컴파일하고 설치했습니다. 가져 오는 간단한 테스트 파일을 만들었습니다.

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에 있음을 알았습니다. 그래서 나는 pydev 이클립스 버전을 어디에서 찾을 수 있는지 말해야합니다. 이것을 어디에 설정합니까?



답변

라이브러리에 대한 심볼릭 링크를 만들어 문제를 해결했습니다. 즉

실제 라이브러리는

/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

그거였다. 그 후 모든 것이 잘 작동했습니다.

편집하다:

MacOS El Capitan 이후 시스템 무결성 보호 (SIP, “루트리스”라고도 함)는에서 링크를 만들지 못하게합니다 /usr/lib/. 다음 지침 에 따라 SIP를 비활성화 할 수 있지만 /usr/local/lib/대신 링크를 만들 수 있습니다 .

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


답변

내가 선호하는 방법은 응용 프로그램 실행 방법에 따라 실제로 범위에 있거나 없을 수있는 환경 변수로 재생하는 대신 실제로 라이브러리를 수정하는 것입니다. 이것은 실제로 매우 간단한 과정입니다.

먼저 오류 출력을보고 문제가있는 python 모듈이있는 위치를 확인하십시오.

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

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

다음으로, _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 커뮤니티 서버를 설치했습니다.

내가해야 할 일은 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

두 번 일했다.


답변

pydev eclipse plugin에서 DYLD에 대한 환경 변수를 설정할 수 있습니다. 경로는 다음과 같이 설정 될 수 있습니다

스노우 레오파드에 mysqldb 설치