시스템을 새로 구성하는 과정에서 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 파일명'을 하면 설치가 완료된다.
대신증권 크레온(CREON Plus) 로그인 안될 때, 중요 파일의 정보가 올바르지 않습니다. (2) | 2024.07.17 |
---|---|
Meta(facebook) prophet, holidays 라이브러리 오류 (0) | 2024.05.03 |
BeautifulSoup select 사용법 (class, id, 공백있는 속성 값) (0) | 2023.11.10 |
Django 쿼리셋을 데이터프레임으로 빠르게 처리하기 (0) | 2023.06.07 |
VScode 'git에서 user.name 및 user.email 를 구성해야 합니다.' 해결 방법 (0) | 2023.06.05 |