Dev./Django & DRF

Django: mysqlclient connection

Ivan'show 2023. 11. 4.
728x90
반응형

Meta 수업을 듣다가 mysql 을 사용해서 DB 를 연결해야하는 부분이 있었는데 pipenv 로 가볍게 설치해서 진행하면 되겠지 싶었다. 그런데 예상치 못한 에러가 계속해서 발생했다.

[pipenv.exceptions.InstallError]: Collecting mysqlclient==2.2.0 (from -r /var/folders/3t/xyg5mpbn57dchy7qksj9n2vr0000gn/T/pipenv-_macr11_-requirements/pipenv-hu_mma6k-hashed-reqs.txt (line 1))
[pipenv.exceptions.InstallError]:   Using cached mysqlclient-2.2.0.tar.gz (89 kB)
[pipenv.exceptions.InstallError]:   Installing build dependencies: started
[pipenv.exceptions.InstallError]:   Installing build dependencies: finished with status 'done'
[pipenv.exceptions.InstallError]:   Getting requirements to build wheel: started
[pipenv.exceptions.InstallError]:   Getting requirements to build wheel: finished with status 'done'
[pipenv.exceptions.InstallError]:   Installing backend dependencies: started
[pipenv.exceptions.InstallError]:   Installing backend dependencies: finished with status 'done'
[pipenv.exceptions.InstallError]:   Preparing metadata (pyproject.toml): started
[pipenv.exceptions.InstallError]:   Preparing metadata (pyproject.toml): finished with status 'done'
[pipenv.exceptions.InstallError]: Building wheels for collected packages: mysqlclient
[pipenv.exceptions.InstallError]:   Building wheel for mysqlclient (pyproject.toml): started
[pipenv.exceptions.InstallError]:   Building wheel for mysqlclient (pyproject.toml): finished with status 'error'
[pipenv.exceptions.InstallError]: Failed to build mysqlclient
[pipenv.exceptions.InstallError]: error: subprocess-exited-with-error
[pipenv.exceptions.InstallError]:   
[pipenv.exceptions.InstallError]:   × Building wheel for mysqlclient (pyproject.toml) did not run successfully.
[pipenv.exceptions.InstallError]:   │ exit code: 1
[pipenv.exceptions.InstallError]:   ╰─> [68 lines of output]
[pipenv.exceptions.InstallError]:       Trying pkg-config --exists mysqlclient
[pipenv.exceptions.InstallError]:       # Options for building extention module:
[pipenv.exceptions.InstallError]:         extra_compile_args: ['-I/opt/homebrew/Cellar/mysql/8.1.0/include/mysql', '-std=c99']
[pipenv.exceptions.InstallError]:         extra_link_args: ['-L/opt/homebrew/Cellar/mysql/8.1.0/lib', '-lmysqlclient']
[pipenv.exceptions.InstallError]:         define_macros: [('version_info', (2, 2, 0, 'final', 0)), ('__version__', '2.2.0')]
[pipenv.exceptions.InstallError]:       running bdist_wheel
[pipenv.exceptions.InstallError]:       running build
[pipenv.exceptions.InstallError]:       running build_py
[pipenv.exceptions.InstallError]:       creating build
[pipenv.exceptions.InstallError]:       creating build/lib.macosx-10.9-universal2-cpython-39
[pipenv.exceptions.InstallError]:       creating build/lib.macosx-10.9-universal2-cpython-39/MySQLdb
[pipenv.exceptions.InstallError]:       copying src/MySQLdb/release.py -> build/lib.macosx-10.9-universal2-cpython-39/MySQLdb
[pipenv.exceptions.InstallError]:       copying src/MySQLdb/cursors.py -> build/lib.macosx-10.9-universal2-cpython-39/MySQLdb
[pipenv.exceptions.InstallError]:       copying src/MySQLdb/connections.py -> build/lib.macosx-10.9-universal2-cpython-39/MySQLdb
[pipenv.exceptions.InstallError]:       copying src/MySQLdb/__init__.py -> build/lib.macosx-10.9-universal2-cpython-39/MySQLdb
[pipenv.exceptions.InstallError]:       copying src/MySQLdb/times.py -> build/lib.macosx-10.9-universal2-cpython-39/MySQLdb
[pipenv.exceptions.InstallError]:       copying src/MySQLdb/converters.py -> build/lib.macosx-10.9-universal2-cpython-39/MySQLdb
[pipenv.exceptions.InstallError]:       copying src/MySQLdb/_exceptions.py -> build/lib.macosx-10.9-universal2-cpython-39/MySQLdb
[pipenv.exceptions.InstallError]:       creating build/lib.macosx-10.9-universal2-cpython-39/MySQLdb/constants
[pipenv.exceptions.InstallError]:       copying src/MySQLdb/constants/FLAG.py -> build/lib.macosx-10.9-universal2-cpython-39/MySQLdb/constants
[pipenv.exceptions.InstallError]:       copying src/MySQLdb/constants/CLIENT.py -> build/lib.macosx-10.9-universal2-cpython-39/MySQLdb/constants
[pipenv.exceptions.InstallError]:       copying src/MySQLdb/constants/__init__.py -> build/lib.macosx-10.9-universal2-cpython-39/MySQLdb/constants
[pipenv.exceptions.InstallError]:       copying src/MySQLdb/constants/ER.py -> build/lib.macosx-10.9-universal2-cpython-39/MySQLdb/constants
[pipenv.exceptions.InstallError]:       copying src/MySQLdb/constants/CR.py -> build/lib.macosx-10.9-universal2-cpython-39/MySQLdb/constants
[pipenv.exceptions.InstallError]:       copying src/MySQLdb/constants/FIELD_TYPE.py -> build/lib.macosx-10.9-universal2-cpython-39/MySQLdb/constants
[pipenv.exceptions.InstallError]:       running egg_info
[pipenv.exceptions.InstallError]:       writing src/mysqlclient.egg-info/PKG-INFO
[pipenv.exceptions.InstallError]:       writing dependency_links to src/mysqlclient.egg-info/dependency_links.txt
[pipenv.exceptions.InstallError]:       writing top-level names to src/mysqlclient.egg-info/top_level.txt
[pipenv.exceptions.InstallError]:       reading manifest file 'src/mysqlclient.egg-info/SOURCES.txt'
[pipenv.exceptions.InstallError]:       reading manifest template 'MANIFEST.in'
[pipenv.exceptions.InstallError]:       adding license file 'LICENSE'
[pipenv.exceptions.InstallError]:       writing manifest file 'src/mysqlclient.egg-info/SOURCES.txt'
[pipenv.exceptions.InstallError]:       copying src/MySQLdb/_mysql.c -> build/lib.macosx-10.9-universal2-cpython-39/MySQLdb
[pipenv.exceptions.InstallError]:       warning: build_py: byte-compiling is disabled, skipping.
[pipenv.exceptions.InstallError]:       
[pipenv.exceptions.InstallError]:       running build_ext
[pipenv.exceptions.InstallError]:       building 'MySQLdb._mysql' extension
[pipenv.exceptions.InstallError]:       creating build/temp.macosx-10.9-universal2-cpython-39
[pipenv.exceptions.InstallError]:       creating build/temp.macosx-10.9-universal2-cpython-39/src
[pipenv.exceptions.InstallError]:       creating build/temp.macosx-10.9-universal2-cpython-39/src/MySQLdb
[pipenv.exceptions.InstallError]:       clang -Wno-unused-result -Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -iwithsysroot/System/Library/Frameworks/System.framework/PrivateHeaders -iwithsysroot/Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.9/Headers -arch arm64 -arch x86_64 -Werror=implicit-function-declaration -Wno-error=unreachable-code -fsanitize=signed-integer-overflow -fsanitize=undefined -g -Wall -Werror -Wextra -Wno-sign-compare -Wno-unused-parameter -Wno-unused-variable -Wshadow -I/usr/local/opt/mysql@8.1.0/include "-Dversion_info=(2, 2, 0, 'final', 0)" -D__version__=2.2.0 -I/Users/kimminhyeok/.local/share/virtualenvs/little-K6ctkfG5/include -I/Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.9/Headers -c src/MySQLdb/_mysql.c -o build/temp.macosx-10.9-universal2-cpython-39/src/MySQLdb/_mysql.o -I/opt/homebrew/Cellar/mysql/8.1.0/include/mysql -std=c99
[pipenv.exceptions.InstallError]:       src/MySQLdb/_mysql.c:2462:29: error: missing field 'ml_flags' initializer [-Werror,-Wmissing-field-initializers]
[pipenv.exceptions.InstallError]:           {NULL,              NULL} /* sentinel */
[pipenv.exceptions.InstallError]:                                   ^
[pipenv.exceptions.InstallError]:       src/MySQLdb/_mysql.c:2501:10: error: missing field 'type' initializer [-Werror,-Wmissing-field-initializers]
[pipenv.exceptions.InstallError]:           {NULL} /* Sentinel */
[pipenv.exceptions.InstallError]:                ^
[pipenv.exceptions.InstallError]:       src/MySQLdb/_mysql.c:2547:29: error: missing field 'ml_flags' initializer [-Werror,-Wmissing-field-initializers]
[pipenv.exceptions.InstallError]:           {NULL,              NULL} /* sentinel */
[pipenv.exceptions.InstallError]:                                   ^
[pipenv.exceptions.InstallError]:       src/MySQLdb/_mysql.c:2565:10: error: missing field 'type' initializer [-Werror,-Wmissing-field-initializers]
[pipenv.exceptions.InstallError]:           {NULL} /* Sentinel */
[pipenv.exceptions.InstallError]:                ^
[pipenv.exceptions.InstallError]:       src/MySQLdb/_mysql.c:2674:1: error: missing field 'tp_cache' initializer [-Werror,-Wmissing-field-initializers]
[pipenv.exceptions.InstallError]:       } ;
[pipenv.exceptions.InstallError]:       ^
[pipenv.exceptions.InstallError]:       src/MySQLdb/_mysql.c:2742:1: error: missing field 'tp_cache' initializer [-Werror,-Wmissing-field-initializers]
[pipenv.exceptions.InstallError]:       };
[pipenv.exceptions.InstallError]:       ^
[pipenv.exceptions.InstallError]:       src/MySQLdb/_mysql.c:2782:16: error: missing field 'ml_flags' initializer [-Werror,-Wmissing-field-initializers]
[pipenv.exceptions.InstallError]:           {NULL, NULL} /* sentinel */
[pipenv.exceptions.InstallError]:                      ^
[pipenv.exceptions.InstallError]:       src/MySQLdb/_mysql.c:2824:1: error: missing field 'm_slots' initializer [-Werror,-Wmissing-field-initializers]
[pipenv.exceptions.InstallError]:       };
[pipenv.exceptions.InstallError]:       ^
[pipenv.exceptions.InstallError]:       8 errors generated.
[pipenv.exceptions.InstallError]:       error: command '/usr/bin/clang' failed with exit code 1
[pipenv.exceptions.InstallError]:       [end of output]
[pipenv.exceptions.InstallError]:   
[pipenv.exceptions.InstallError]:   note: This error originates from a subprocess, and is likely not a problem with pip.
[pipenv.exceptions.InstallError]:   ERROR: Failed building wheel for mysqlclient
[pipenv.exceptions.InstallError]: ERROR: Could not build wheels for mysqlclient, which is required to install pyproject.toml-based projects
ERROR: Couldn't install package: {}
 Package installation failed...

찾아보니 mysqlclient 패키지를 설치 하는 도중 오류가 발생했는데, MacOS 환경에서 C 컴파일러 설정과 관련된 문제로 보였다.

설정 참고
https://shandou.medium.com/pipenv-install-mysqlclient-on-macosx-7c253b0112f2

그래서 컴파일러에 전달되는 옵션들을 정의하는 CFLAGS (Compiler Flags) 와 링커가 사용할 라이브러리들을 지정하는 도구인 LIBS (Libraries) 의 설정을 변경해서 제대로 동작하게 해야한다.

해결 과정

# MySQL 또는 MariaDB 서버 설치 (Homebrew 사용)
brew install mysql


# mysql_config를 사용하여 필요한 플래그 확인
mysql_config --cflags
mysql_config --libs
export LDFLAGS="-L/usr/local/opt/mysql@<version>/lib"
export CPPFLAGS="-I/usr/local/opt/mysql@<version>/include"

여기서 version 은 실제 적용할 mysql 버전이 들어간다.

export CFLAGS="$(mysql_config --cflags)"
export LDFLAGS="$(mysql_config --libs)"

설정 변경 후,

(little) kimminhyeok@Ivans-Mac little % pipenv install mysqlclient

Installing mysqlclient...
Resolving mysqlclient...
Added mysqlclient to Pipfile's [packages] ...
✔ Installation Succeeded
Installing dependencies from Pipfile.lock (80f803)...

드디어.. 로컬에서 쓸 수 있게 되었다.
도커로만 돌리다가 로컬에서 하려니 참

728x90
반응형

댓글