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


172

방금 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 이클립스 버전을 어디에서 찾을 수 있는지 말해야합니다. 이것을 어디에 설정합니까?

답변:


323

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

실제 라이브러리는

/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

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

mysql55MacPorts를 통해 설치 했으며이 오류를 해결하기 위해 다음 작업을 수행했습니다.sudo ln -s mysql/libmysqlclient.18.dylib /opt/local/lib/mysql55/libmysqlclient.18.dylib
philfreo

Mavericks가 기존의 symlink를 제거한 후 약간 다른 지점에서 symlink를 수행해야했습니다. sudo ln -s /usr/local/mysql-5.5.29-osx10.6-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
Matt

2
El Capitan ( forums.developer.apple.com/thread/7935) 에서 실행중인 경우 SIP를 비활성화해야합니다 .
Joshua Pinter

El Capitan을 새로 설치 한 후이 팁에 대해 SIP를 비활성화 할 필요가 없습니다.
Lonoshea

135

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

먼저 오류 출력을보고 문제가있는 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)

4
이것이 더 나은 솔루션이 아니므로 모든 virtualenvs로 해결합니까? sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib $ VIRTUAL_ENV / lib / python2.7 / site-packages / _mysql.so
Brad Ruderman

1
@BradRuderman 나는 주어진 명령을 실행할 때 하나의 virtualenv 만-현재의 것을 수정한다는 것을 분명히하는 것이 중요하다고 생각합니다. 또한 모든 사람들이 virtualenv에서 (손해를 입지 않고) 실행하는 것은 아니므로 명령 줄이 게시 된 것만 큼 일반적인 해결책은 아닙니다.
GreenAsJade

1
주어진 예제는 전역 파이썬 / mysql을 수정하는 것입니다. 각 가상 환경에서 수정해야합니다. 당신이 나와 같다면 위치가 _mysql. 인 첫 번째 부분을 바로 잡았으므로 중요한 단계입니다.
벤 라비 두

이것은 VirtualEnvironments 내에 설치된 _mysql.so에서 작동하며 El Capitan에서 SIP를 비활성화하지 않아도됩니다.
Aaron D

설명 주셔서 감사합니다 @Caleb :) :) (Y)
Sachin Malhotra

59

심볼릭 링크를 만드는 것이 아니라이 문제에 대한 또 다른 해결책이 있다는 것을 알았습니다.

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

그게 다야.


7
나는 당신의 라인 변경 제안하는 설치된 버전 점, 그래서 / usr / 지방 / MySQL의에서 심볼릭 링크도있다 : 수출 DYLD_LIBRARY_PATH은 = / usr / 지방 / mysql을 / lib 디렉토리 / : $ DYLD_LIBRARY_PATH는
몰래

37

제 경우에는 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 파일의 위치를 ​​찾은 방법입니다.


1
나는 /usr/local/lib디렉토리 를 만들어야 했지만 매력처럼 일했다!
Nick Merrill

25

나는 이것을 .profile 또는 .bashrc (어떤 쪽을 사용하든)에 넣는 것이 가장 쉬운 방법이라는 것을 알았습니다. 심볼 링크는 소스 파일의 경로를 유지하는 것과 비교하여 혼란 스럽습니다.

또한 yoshisurfs 답변과 비교할 때 mysql이 설치되는 대부분의 시간에 mysql 디렉토리의 이름은 전체 파일 이름이 아닌 mysql로 ​​변경해야합니다.

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

2
이것은 정말 제정신이고 간단한 대답처럼 보입니다. 나를 위해 잘 작동했습니다-감사합니다!
Darragh Enright

4

몇 가지 가상 환경 에서이 문제를 해결했습니다.

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

두 번 일했다.


나를 위해
Tho


3

homebrew를 사용하는 사람들은 이것을 다음과 같이 수정하십시오.

$ brew link mysql

이것은 나를 위해 일했고, 다음과 같은 링크를 만들었습니다 : /usr/local/lib/libmysqlclient.18.dylib-> /usr/local/Cellar/mysql/5.6.27/lib/libmysqlclient.18.dylib
Joshua Grigonis

2

필자의 경우 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}"

2

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

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


bash_profile에 파일 libmysqlclient.18.dylib을 이동 /usr/local/lib하고 경로 PATH=/usr/local/lib:$PATH를 추가 할 수있는 또 다른 방법 입니다. 나를 위해 일하고 있습니다.
Bun Suwanparsert

1

SIP (루트리스가 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

루트로 로그인 할 수있는 옵션이 있었으며 SIP를 사용하지 않도록 설정할 수 있었지만 이제는 더 이상 사용되지 않는 최종 릴리스에서 여기에 대한 자세한 내용을 읽을 수 있습니다. https://forums.developer.apple.com/thread/4686에

질문:

루트 권한으로 실행할 때 SIP를 비활성화 할 수있는 개발자 베타 1에는 nvram boot-args 명령이 있습니다.

nvram boot-args="rootless=0"

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

대답:

이 nvram boot-args 명령이 사라집니다. El Capitan 릴리스 버전에서는 제공되지 않으며 개발자 베타가 종료되기 전에 사라질 수 있습니다. 향후 개발자 베타에 대한 릴리스 정보를 주시하십시오.


0

나는이 문제가 있었고 그것을 고치는 방법을 알아내는 데 잠시 시간이 걸렸다.

제 사건은 약간 다릅니다. 내 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으로 다운 그레이드했습니다.


0

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 make install 후 설치하면 / usr / local 아래에 mysql이라는 디렉토리가 생성됩니다. 여기에는 필요한 모든 헤더와 라이브러리가 포함되어 있습니다.이 디렉토리로 이동하여 헤더와 라이브러리를 해당 위치로 복사하십시오.


0

당신은 시도 할 수 있습니다:

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`

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.