본문으로 바로가기
728x90
반응형

목차

     

    Notes

    맥북의  brew를 업데이트하고 나니 잘 돌아가던 python-mysqlclient가 동작하지 않게 되었다.

     

    driver를 pymysql로 변경하면 문제는 피해갈 수 있지만 MySQLdb(mysqlclient) 쪽이 성능이 더 좋다고 하니 해당 이슈를 해결해보도록 하자.

     

    증상은 다음과 같다.

    "libmysqlclient.22.dylib" 파일과 이와 관련된 다른 파일도 찾을 수 없다는 에러이며 "libmysqlclient.22.dylib"가 아니라 다음과 같이 "libmysqlclient.21.dylib"도 같은 증상이 일어날 수 있다.

    Reason: tried: '/opt/homebrew/opt/mysql-client/lib/libmysqlclient.21.dylib' (no such file),
    '/usr/local/lib/libmysqlclient.21.dylib' (no such file),
    '/usr/lib/libmysqlclient.21.dylib' (no such file), 
    '/opt/homebrew/Cellar/mysql-client/8.3.0/lib/libmysqlclient.21.dylib' (no such file),
    '/usr/local/lib/libmysqlclient.21.dylib' (no such file),
    '/usr/lib/libmysqlclient.21.dylib' (no such file)

     

    첫 번째 시도

    첫 번째로 시도한 조치는 MySQL 관련 Binary 경로를  zshrc 파일에 추가하는 것이었다.

    # .zshrc
    ...
    MYSQL=/opt/homebrew/opt/mysql@8.0/bin
    export PATH=$PATH:$MYSQL
    export DYLD_LIBRARY_PATH=/usr/local/mysql/lib:$DYLD_LIBRARY_PATH

     

    이 방법은 mysql 관련 패키지를 설치할 때 링크되는 파일들이 설치된 mysql 의 경로를 참조하지 못한 경우라 생각하여 해당 경로를 지정한다면 해결될까 생각하여 시도해봤다.

     

    그러나 이 방법만으로는 해결되진 않았다.

     

    두 번째 시도

    두 번쨰로 시도한 조치는 https://stackoverflow.com/questions/71168895/why-libmysqlclient-21-dylib-is-needed-on-local-with-only-mysql5 -7-running를 참고해 pip로 mysqlclient를 다시 설치하는 것이다.

     

    위의 stackoverflow에서 등장하는 정보를 정리하면 해당 이슈는 다음과 같은 원인으로 일어난다고 한다.

    # https://stackoverflow.com/questions/71168895/why-libmysqlclient-21-dylib-is-needed-on-local-with-only-mysql5-7-running/71176829#71176829
    
    MySQLdb is a Python 2 module implemented in C, and it links to the libmysqlclient.
    If you have a binary of MySQLdb that was compiled against a MySQL 8.0 client library,
    then it would have a fixed reference to libmysqlclient21.dylib, and if that library is not present, that would cause the error you saw.

     

    이에 문장을 한국어로 번역하니 다음과 같았다.

     

    MySQLdb는 C로 구현된 Python 2 모듈이며 libmysqlclient에 연결됩니다. 만약 MySQLdb의 이진 파일이 MySQL 8.0 클라이언트 라이브러리에 맞게 컴파일된 것이라면, 이는 libmysqlclient21.dylib에 대한 고정된 참조를 가지게 될 것이며, 해당 라이브러리가 없는 경우에는 보고한 오류가 발생할 것입니다.

     

    위 설명에 힌트를 얻어 pip로 설치된 MySQLdb를 캐시를 사용하지 않는 방식으로 설치하자.

    pip uninstall mysqlclient
    pip install —-no-cache mysqlclient

     

    728x90
    반응형