[Django] Windows에서 geoDjango 사용하기 (+GDAL 설치하기)

김재연·2022년 4월 5일
0

자연재해지도

목록 보기
1/8

진심 아 삽질 개오지게 했다 와~~ 뒈질뻔!!!!


😇구세주😇

https://www.pointsnorthgis.ca/blog/geodjango-gdal-setup-windows-10/


문제 상황

  1. admin에서 모델 등록을 하려는데 OGR failure 가 나고 등록이 안됨
  2. pip install gdal이 안되고 별 처음보는 긴 오류가 막 남
  3. 우분투에도 설치해보려고 했는데 응 안됨
  4. 아무튼 다 문제

문제 원인

  1. 내 컴퓨터 환경에 안맞는 거를 자꾸 설치하려고 했다.
  2. 파이썬 버전들이 꼬여있었다.
    => 어디서는 3.10 쓰고 어디서는 3.7 쓰고. 파이썬 인터프리터를 바꿔도 적용이 제대로 안됐다.

내 컴퓨터 환경

Windows 64bit (시스템 정보에서 확인)


윈도우에 GDAL 설치해서 geoDjango 사용하기 시작!

1. 파이썬 설치하기

기존에 깔려있던 Python 3.7, 3.8, 3.10을 다 지우고 Python 3.10.4를 새로 깔았다.

파이썬 설치 : https://www.python.org/downloads/windows/

내 컴퓨터가 64bit이기 때문에 Python 3.10.4 - Windows installer (64-bit) : python-3.10.4-amd64.exe 를 받았다.

Add python 3.10 to PATH 체크 -> Customized installation -> pip, tcl/tl and IDLE, py launcher, for all users(requires elevation) 체크 -> Install for all users, Add python to environment variables, Precompile standard library 체크 -> 설치

cmd에서 설치한 파이썬 버전을 확인한다.

Python310 폴더는 C:\Program Files\Python310 에 있다.


2. OSGeo4W 설치하기

https://trac.osgeo.org/osgeo4w/ 에서 OSGeo4W network installer 를 다운받는다.

크롬에서 다운이 안받아져서 포기했었는데 갱장히 중요한거였고 인터넷 익스플로러로 바꾸니까 제대로 다운이 됐다.

Express Web-GIS Install 체크 -> download site는 아무거나 누르고 (나는 제일 위에 있던거 눌렀던거 같다) -> 나는 GDAL이 필요했으니까 GDAL 체크 -> 나머지는 디폴트값으로 설치


3. Python 가상환경 만들기

장고 프로젝트 만드는거랑 거의 똑같은데 cmd에서 진행을 했다.

1) cmd창을 연다.
2) top level 폴더로 이동한다. > cd \
3) dev 폴더를 만든다. > mkdir dev (나는 여러번 망해서 dev3으로 진행)
4) dev 폴더 안으로 이동한다. > cd dev
5) 가상환경을 만든다. > python -m venv djangovenv (env인줄 알았는데 이제보니 venv네)
6) 가상환경을 실행한다. > djangovenv\Scripts\activate.bat


4. Django 설치하기

1) 장고를 설치한다. > pip install django
2) 가상환경 내에 설치된 패키지를 확인한다. > pip list
3) 장고가 제대로 설치됐는데 확인한다. > django-admin


5. GDAL for Python 설치하기

여기가 하이라이트!!!

장고와 가상환경이 준비됐으면 GDAL for Python을 가져올 수 있다.

https://www.lfd.uci.edu/~gohlke/pythonlibs/#gdal 에서 내 운영체제에 맞는 .whl 파일을 다운받아야 한다. 내 컴퓨터 환경은 Windows 64-Bit이고 파이썬은 Python 3.10.4가 설치되어있으므로 나는 GDAL-3.X.X-cp310-cp310-win_amd64.whl 을 다운받아야 한다. GDAL 버전은 아무 버전이나 상관이 없는거 같으니까 제일 최신에 릴리즈된 3.4.2 버전인 GDAL-3.4.2-cp310-cp310-win_amd64.whl 으로 받았다.

잘 다운을 받았으면 이 파일을 dev 폴더 안으로 이동시킨다. (그냥 쓰기 편하려고)

그럼 이제 pip install GDAL-3.4.2-cp310-cp310-win_amd64.whl 를 이용해서 이 wheel 파일을 설치해준다. 또는 절대경로를 사용해서 pip install G:/path/to/GDAL-3.4.2-cp310-cp310-win_amd64.whl 로 설치해도 된다.

GDAL-3.4.2가 성공적으로 설치됐단다!!! ㅠㅠㅠ 이거 내 환경이랑 안맞는 파일 가져다가 설치하려고 하면 곧죽어도 못깐다고 에러메세지 존나 띄운다. 그리고 pip install GDAL 로 gdal 설치하고 싶지만 이거로는 설치가 안되고 이걸로 설치하려고 하면 wheel 파일이 없네 어쩌네 또 지랄한다. 그래서 윈도우에서 GDAL을 설치하려면 꼭 자기 운영체제와 파이썬 환경에 맞는 .whl 파일을 다운받아서 얘를 설치해야한다.

다 설치했으면 python을 실행해보고 import gdal, import ogr 을 했을 때 오류가 안나면 성공한거다. 그런데 나는 그런 모듈이 없다는 에러메세지가 떴고, 여기서 알려준대로 from osgeo import gdal, from osgeo import ogr 이라고 했더니 잘 됐다.


6. 장고 프로젝트 만들기

1) 장고 프로젝트를 만든다. > django-admin startproject geodjango
2) 프로젝트 안으로 이동한다. > cd geodjango


7. GeoDjango BAT (Batch) File 만들기

두번째 하이라이트!!!! 장고프로젝트까지 만들었으면 이제 이 안에 .bat 파일을 만들어서 뭐하는건진 잘모르겠다. ㅋ 설명을 그대로 적어보자면 PATH 변수를 세팅함으로써 윈도우 시스템이 어디로 가야 GDAL 프로그램에 접근할 수 있는지 알려주는거라고 한다.

geodjango 프로젝트 폴더 안에서 geodjango_setup.bat 파일을 만든다. 텍스트 파일을 만들고 확장자를 .bat 으로 바꿔줘도 되고 Notepad++로 만들어도 된다.

안에 내용은 여기 있는 내용을 그대로 복붙하면 된다. 다만 복붙하고 내 환경에 맞게 또 조금 바꿔줘야한다. 바꿔줘야하는 부분은 두번째줄의 PYTHON_ROOT. 내 컴퓨터에 Python310 폴더가 어디있는지 알아야 한다. C:\Program Files\Python310 에 있으므로 경로를 바꿔준다. 설명에 따르면 내가 OSGeo4W를 64bit로 깔았기 때문에 여기도 바꿔야하는데 이상하게 내 폴더에 이름이 그대로 OSGeo4W라서 여기는 안바꿨다.

# 최종내용
# C:\dev3\geodjango\geodjango_setup.bat

set OSGEO4W_ROOT=C:\OSGeo4W
set PYTHON_ROOT=C:\Program Files\Python310
set GDAL_DATA=%OSGEO4W_ROOT%\share\gdal
set PROJ_LIB=%OSGEO4W_ROOT%\share\proj
set PATH=%PATH%;%PYTHON_ROOT%;%OSGEO4W_ROOT%\bin
reg ADD "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_EXPAND_SZ /f /d "%PATH%"
reg ADD "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v GDAL_DATA /t REG_EXPAND_SZ /f /d "%GDAL_DATA%"
reg ADD "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PROJ_LIB /t REG_EXPAND_SZ /f /d "%PROJ_LIB%"

제대로 내용을 바꾸면 저장하고 실행한다. 더블클릭하거나 오른쪽클릭>열기로 실행한다. 검은창이 켜졌다가 호다닥 꺼진다. 이러면 윈도우 PATH 환경변수 설정이 되나보다. GeoDjango knows where to look to make GDAL and Python work together. 라고 하네


8. settings.py 변경하기

아직 안끝났다 settings.py도 바꿔야 한다. BASE_DIR 밑에 이 부분만 복붙해서 추가해준다.

# C:\dev3\geodjango\geodjango\settings.py
import os
 
if os.name == 'nt':
	VIRTUAL_ENV_BASE = os.environ['VIRTUAL_ENV']
	os.environ['PATH'] = os.path.join(VIRTUAL_ENV_BASE, r'.\Lib\site-packages\osgeo') + ';' + os.environ['PATH']
	os.environ['PROJ_LIB'] = os.path.join(VIRTUAL_ENV_BASE, r'.\Lib\site-packages\osgeo\data\proj') + ';' + os.environ['PATH']

BASE_DIR은 좀 다르게 설정돼있었는데 굳이 안바꿔도된다.


9. GDAL 파일(libgdal.py) 변경하기

거의 다왔다!!!! 여기도 중요하다 세번째 하이라이트~ 장고에게 우리가 설치한 GDAL pip wheel에 들어있던 적절한 GDAL library binding file(.dll)을 찾을 수 있도록 알려주는 단계라고 한다. 일단 이 libgdal.py 파일은 굉장히 깊숙한 곳에 있다. C:\dev\djangovenv\Lib\site-packages\django\contrib\gis\gdal\libgdal.py에서 끄집어내준다.

파일을 변경하기 전에 확인해야 하는 부분이 있다. C:\dev\djangovenv\Lib\site-packages\osgeo 에서 내 .dll 파일 이름이 뭔지 확인해줘야 한다. 내꺼는 gdal304.dll 이다.

그럼 이제 다시 libgdal.py을 Notepad++로 열어서 lib_names = ["gdal303", ... ] 이라고 써있는 곳을 찾아 맨 앞에 gdal304를 추가해준다.

# C:\dev\djangovenv\Lib\site-packages\django\contrib\gis\gdal\libgdal.py
elif os.name == "nt":
	# Windows NT shared libraries
	lib_names = [
		"gdal304","gdal303","gdal302","gdal301","gdal300", ...
	]

10. 테스트

다했다... 와 박수~~ cmd를 다시 열어서 python manage.py shell 을 입력한다. 여기서 아까와 같이 from osgeo import gdal, from osgeo import ogr 을 입력했을 때 오류가 안난다면 이제 장고와 GDAL을 사용할 준비가 된거다!!!!


11. VSCode에서 geoDjango 사용하기

아 진짜 하루종일 삽질한거 존나 눈물나고... 그래도 하루만 날려서 다행이다

이제 VScode로 옮겨가서 https://www.paulox.net/2021/07/19/maps-with-django-part-2-geodjango-postgis-and-leaflet/ 를 참고해 대충 코드 넣고 깔라는거 깔고 (psycopg2) 디비 바꿔주면 admin에서 mark를 남길 수 있다.

맥os용 설명이라 그대로 따라하면 안돼서 의심의 눈초리로 따라하다가 안넣어서 오류 난것도 있는데 settings.py의 INSTALLED_APPS에 'django.contrib.gis', 이거는 넣어줘야 한다.

그리고 디비는 postgis를 사용하는데 그냥 postgreSQL 디비 만들던거랑 똑같이 만들고 pgadmin 열어서 postgis 익스텐션을 사용할거라는 것만 알려주면 된다. 테이블에 Query Tool 열어서 Query Editor에 create extension postgis; 쓰고 F5로 실행하면 된다. 여기 참고해서 앞부분만 따라하면 된다.


12. 끝!!!!!

이렇게 설정 다 하면

성공.

아 진짜 기분 개째짐

gdal은 가상환경에 대충 설치해서 쓰는게 아니라 내 컴퓨터의 os에 설치해서 파이썬이 가져다 쓰는? 그런 느낌이라 사람마다 컴퓨터마다 다 설치방법이 달라서 그대로 따라가기만 하면 되는 정확한 매뉴얼이 없어서 너무 힘들었다. 시간이 지남에 따라... 온갖 설치파일들 버전이 달라지는 것도 한몫했다..


다음날 핀꽂기까지 확인

profile
일기장같은 공부기록📝

0개의 댓글