파이썬(Python) 32bit Django mysqlclient 설치 오류 해결 방법
시스템을 새로 구성하는 과정에서 Python Django 을 설치해야 했다. Django 을 실행하는 데 필요한 라이브러리 중 'mysqlclient'를 설치하는데 아래와 같이 오류가 발생했다. ('mysql.h': No such file or directory)
mysqlclient 사이트 : https://pypi.org/project/mysqlclient/
Collecting mysqlclient
Using cached mysqlclient-2.2.4.tar.gz (90 kB)
Installing build dependencies ... done
Getting requirements to build wheel ... done
Installing backend dependencies ... done
Preparing metadata (pyproject.toml) ... done
Building wheels for collected packages: mysqlclient
Building wheel for mysqlclient (pyproject.toml) ... error
error: subprocess-exited-with-error
× Building wheel for mysqlclient (pyproject.toml) did not run successfully.
│ exit code: 1
╰─> [46 lines of output]
# Options for building extension module:
library_dirs: ['C:\\Program Files\\MySQL\\MySQL Server 8.0, C:\\Program Files\\MySQL\\Connector Python 8.0\\lib\\mariadb', 'C:\\Program Files\\MySQL\\MySQL Server 8.0, C:\\Program Files\\MySQL\\Connector Python 8.0\\lib']
libraries: ['kernel32', 'advapi32', 'wsock32', 'shlwapi', 'Ws2_32', 'crypt32', 'secur32', 'bcrypt', 'mariadbclient']
extra_link_args: ['/MANIFEST']
include_dirs: ['C:\\Program Files\\MySQL\\MySQL Server 8.0, C:\\Program Files\\MySQL\\Connector Python 8.0\\include\\mariadb', 'C:\\Program Files\\MySQL\\MySQL Server 8.0, C:\\Program Files\\MySQL\\Connector Python 8.0\\include']
extra_objects: []
define_macros: [('version_info', (2, 2, 4, 'final', 0)), ('__version__', '2.2.4')]
running bdist_wheel
running build
running build_py
creating build
creating build\lib.win32-cpython-39
creating build\lib.win32-cpython-39\MySQLdb
copying src\MySQLdb\connections.py -> build\lib.win32-cpython-39\MySQLdb
copying src\MySQLdb\converters.py -> build\lib.win32-cpython-39\MySQLdb
copying src\MySQLdb\cursors.py -> build\lib.win32-cpython-39\MySQLdb
copying src\MySQLdb\release.py -> build\lib.win32-cpython-39\MySQLdb
copying src\MySQLdb\times.py -> build\lib.win32-cpython-39\MySQLdb
copying src\MySQLdb\_exceptions.py -> build\lib.win32-cpython-39\MySQLdb
copying src\MySQLdb\__init__.py -> build\lib.win32-cpython-39\MySQLdb
creating build\lib.win32-cpython-39\MySQLdb\constants
copying src\MySQLdb\constants\CLIENT.py -> build\lib.win32-cpython-39\MySQLdb\constants
copying src\MySQLdb\constants\CR.py -> build\lib.win32-cpython-39\MySQLdb\constants
copying src\MySQLdb\constants\ER.py -> build\lib.win32-cpython-39\MySQLdb\constants
copying src\MySQLdb\constants\FIELD_TYPE.py -> build\lib.win32-cpython-39\MySQLdb\constants
copying src\MySQLdb\constants\FLAG.py -> build\lib.win32-cpython-39\MySQLdb\constants
copying src\MySQLdb\constants\__init__.py -> build\lib.win32-cpython-39\MySQLdb\constants
running egg_info
writing src\mysqlclient.egg-info\PKG-INFO
writing dependency_links to src\mysqlclient.egg-info\dependency_links.txt
writing top-level names to src\mysqlclient.egg-info\top_level.txt
reading manifest file 'src\mysqlclient.egg-info\SOURCES.txt'
reading manifest template 'MANIFEST.in'
adding license file 'LICENSE'
writing manifest file 'src\mysqlclient.egg-info\SOURCES.txt'
copying src\MySQLdb\_mysql.c -> build\lib.win32-cpython-39\MySQLdb
running build_ext
building 'MySQLdb._mysql' extension
creating build\temp.win32-cpython-39
creating build\temp.win32-cpython-39\Release
creating build\temp.win32-cpython-39\Release\src
creating build\temp.win32-cpython-39\Release\src\MySQLdb
"C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\MSVC\14.39.33519\bin\HostX86\x86\cl.exe" /c /nologo /O2 /W3 /GL /DNDEBUG /MD "-Dversion_info=(2, 2, 4, 'final', 0)" -D__version__=2.2.4 "-IC:\Program Files\MySQL\MySQL Server 8.0, C:\Program Files\MySQL\Connector Python 8.0\include\mariadb" "-IC:\Program Files\MySQL\MySQL Server 8.0, C:\Program Files\MySQL\Connector Python 8.0\include" -IC:\Users\user\.conda\envs\py32\include -IC:\Users\user\.conda\envs\py32\Include "-IC:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\MSVC\14.39.33519\include" "-IC:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Auxiliary\VS\include" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\\include\10.0.22621.0\\um" "-IC:\Program Files (x86)\Windows Kits\10\\include\10.0.22621.0\\shared" "-IC:\Program Files (x86)\Windows Kits\10\\include\10.0.22621.0\\winrt" "-IC:\Program Files (x86)\Windows Kits\10\\include\10.0.22621.0\\cppwinrt" /Tcsrc/MySQLdb/_mysql.c /Fobuild\temp.win32-cpython-39\Release\src/MySQLdb/_mysql.obj
_mysql.c
src/MySQLdb/_mysql.c(29): fatal error C1083: 포함 파일을 열 수 없습니다. 'mysql.h': No such file or directory
error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2022\\BuildTools\\VC\\Tools\\MSVC\\14.39.33519\\bin\\HostX86\\x86\\cl.exe' failed with exit code 2
[end of output]
note: This error originates from a subprocess, and is likely not a problem with pip.
ERROR: Failed building wheel for mysqlclient
Failed to build mysqlclient
ERROR: Could not build wheels for mysqlclient, which is required to install pyproject.toml-based projects
라이브러리를 살펴보고 몇 차례 시도를 해본 결과, Python 64bit 환경에서는 설치가 정상적으로 진행되나 Python 32bit 환경에서는 설치가 안 됐다.
32bit 환경에서 mysqlclient을 설치하기 위해 방법을 찾아보니, 'pip install mysqlclient'로는 설치가 안 되고 'Christoph Gohlke'라는 분께서 캘리포니아 대학교 어바인 캠퍼스 사이트(https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient)에 별도로 업로드 해놓은 파일을 다운 받아서 설치하면 된다는 얘기가 있었다.
나는 이 방법으로 미리 파일을 가지고 있었으나 파이썬 버전 업데이트로 인해 기존 파일이 작동하지 않았고, 엎친 데 덮친 격으로 위 사이트 페이지가 사라져서 다운을 받을 수 없었다.
이후 여러 해결 방법으로 환경 변수 설정, MySQL Connector 설치 등 정말 많은 방법이 있어 시도했지만 해결되지 않았다.
심지어 중국 사이트에는 pymysql을 설치 후 Django 의 base.py 코드를 수정해 MySQLdb가 아닌 pymysql으로 대체하는 방법도 소개해 주었다. (이 방법은 작동하는지 확인해 보진 못했으나, 나중에 지금 방법으로 조차 해결되지 않으면 시도해 볼 만 할 듯하다.)
해결
아무튼 의지의 한국인, 편법(?)을 사용해 파일을 잘 구해왔다. 그러나 mysqlclient 32bit 버전이 파이썬 3.9 까지 밖에 지원하지 않기 때문에 이후엔 다른 방법을 찾을 수밖에 없을 듯하다.
설치는 파일이 위치한 폴더에 이동해서 'pip install 파일명'을 하면 설치가 완료된다.