목차
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
'Language > Python' 카테고리의 다른 글
[Oauth] Python으로 KaKao Oauth Login Test하기 (0) | 2024.03.04 |
---|---|
[SQLALchemy] Imperative Mapping, Eager/Lazy Loading (0) | 2024.02.25 |
dependency-Injector로 Repository Pattern 사용하기 (0) | 2023.11.24 |
[GCP] Python으로 Google Oauth Login 하기 (1) | 2023.11.22 |
[SQLAlchemy] dependency-injector로 SQLAlchemy Session 다루기 (0) | 2023.11.21 |