본문 바로가기

개발 노트/Etc.

[Python] Django 실행 시 sqlite3 버전 이슈

반응형

문제점

AWS 의 EC2 서버에 amazon 리눅스를 사용 중 django 설치 및 실행을 하였는데 다음과 같은 에러가 발생

이 에러의 가장 마지막줄을 보면 SQLite 3.9.0 or later is required (found 3.7.17) 을 확인할 수 있다.

 

현재 설치된 django 에서 요구하는 SQLite 의 버전이 3.9.0 이상인데 기존 설치되어 있는 SQLite 의 버전이 3.7.17 이라는 것이다.

 

이는 python3 를 실행하여 sqlite 를 import 하여 확인이 가능하다.

 

Python 3.7.9 (default, Apr 30 2021, 20:11:56)
[GCC 7.3.1 20180712 (Red Hat 7.3.1-12)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sqlite3
>>> sqlite3.__version__
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: module 'sqlite3' has no attribute '__version__'
>>> sqlite3.sqlite_version
'3.7.17'
>>> sqlite3.version
'2.6.0'
>>>

현재 설치되어 있는 sqlite_version 은 3.7.17 로 확인이 되었다.

 

이를 3.9.0 이상 버전으로 설치하여 문제 해결을 한다.

 

조치

1. SQLite 설치

우선 https://sqlite.org/index.html 에 접속하여 원하는 (또는 Django 에서 요구하는 설치 버전) 버전을 다운받는다.

현재 기준 최신 버전인 3.36 버전으로 다운 받았다. sqlite-autoconf-3360000.tar.gz 파일을 받을 링크 주소를 복사하면 된다.

(해당 글자의 우클릭 -> 링크 복사하기)

 

이제 서버로 와서 해당 파일 다운로드하고 설치하면 된다.

 

# If Development Tools are not installed, install before
# sudo yum groupinstall 'Development Tools'

# 1. Download install file
cd /opt/
sudo wget https://sqlite.org/2021/sqlite-autoconf-3360000.tar.gz
sudo tar -zxf sqlite-autoconf-3360000.tar.gz
cd sqlite-autoconf-3360000/

# 2. Install
sudo ./configure
sudo make clean && sudo make -j 20 && sudo make install

# 3. check sqlite3 version
sqlite3 --version
3.36.0 2021-06-18 18:36:39 5c9a6c06871cb9fe42814af9c039eb6da5427a6ec28f187af7ebfb62eafa66e5

위 명령어들로 SQLite3 의 소스설치가 완료되었다.

 

sqlite3 의 실행 바이너리와 라이브러리는 설치되었지만 이 라이브러리 경로를 추가로 python3 가 바라보는 곳으로 맞춰주어야 한다.

 

2. Libary 이동

위의 명령어로 설치 시 library 는 /usr/local/lib64/ 경로에 있게 된다.

현재 EC2 서버에서 기본으로 바라보는 library 인 /usr/lib64/ 에도 libsqlite3.so 파일들이 존재하며 새로 설치된 파일들로 해당 경로의 파일을 교체해 준다.

sudo /bin/cp -rf /usr/lib64/libsqlite3.so.0.8.6 /usr/lib64/libsqlite3.so.0.8.6_bak
sudo /bin/cp -rf /usr/local/lib/libsqlite3.so.0.8.6 /usr/lib64/libsqlite3.so.0.8.6

혹시!!! 모르니 기존 libsqlite3.so.0.8.6 파일을 백업 후 진행한다.

 

사실 위 library 의 경로는 시스템마다 다르기 때문에 개발자가 직접 확인하고 맞는 경로에 넣어주어야 한다.

확인 방법은 간단하게

 

find /usr/ -name libsqlite3.so.0.8.6

위와 같은 명령어로 /usr/ 또는 /lib/, /lib64/ 의 경로에서 libsqlite3.so.0.8.6 파일을 찾아 바꿔서 확인해 보는게 좋을 것 같다.

(사실 내가 python 에서 사용하는 library path 의 우선순위 등을 알아본 적이 없기 때문에 이런 방식으로 진행하긴 하였다.)

 

변경 후 위에서 확인했던 python3 에서 sqlite 의 version 을 확인해 보면

Python 3.7.9 (default, Apr 30 2021, 20:11:56)
[GCC 7.3.1 20180712 (Red Hat 7.3.1-12)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sqlite3
>>> sqlite3.sqlite_version
'3.36.0'

버전이 기존 3.7.17 에서 3.36.0 으로 변경된 것을 확인할 수 있다.

 

이제 Django 를 실행해보면

 

이전에 발생했던 sqlite3 관련 에러 로그 없이 실행된 것을 확인할 수 있다.

 

반응형