Python 기반 GIS 개발 환경에서 GDAL
은 필수적입니다.
다만 GDAL
설치 과정이 까다로울 수 있는데,
이를 간편하게 해결하려면 GDAL이 포함된 container image를 활용하는 것이 좋습니다.
이제, 그 방법을 살펴보겠습니다. 🚀
급하신 분들은 🐳 Dockerfile 로 한방에 세팅하기
목차의 내용으로 Docker image 생성 후,
곧바로 🖥️ VS Code - Dev Container
목차를 따라하시면 됩니다.
그러면 개발환경 세팅은 끝입니다.
만약 이 Dockerfile 의 내용이 궁금하다면 목차를 이어서 보시면 됩니다.
Docker
로 Gdal Container
를 실행
Container
에 python
개발에 필요한 기본적인 패키지 추가 설치
Visual Studio Code
의 Dev Container
플러그인으로
Container
에 접속하고 개발할 수 있는 환경을 세팅
Docker 를 통해서 GDAL
공식 이미지로 컨테이너를 띄우고 사용하는 방법은
제가 이전에 작성한 글을 참고하시면 되겠습니다.
pip 설치는 필수가 아닙니다.
하지만 일반적으로 python 을 사용하면서 pip 없이 개발하는 건
제가 보기에는 거의 불가능합니다.그리고 이미 컨테이너에 설치된
GDAL
패키지만 있다고 모든GIS
관련 처리를
하는 것은 효율적이지 않다고 생각됩니다.오히려 pip 를 통해서
Fiona
,Shapely
,Rasterio
등과 같은 패키지들를
설치하고 GDAL 과 조화롭게 사용하는 게 효율적이라 생각됩니다.
서론이 길었네요. 이제 pip
를 설치해보죠.
apt update && apt install -y python3-pip
pip list -v # 이걸로 정확한 설치 위치와, 현재 설치된 것들을 모두 알 수 있다.
pip 로 뭔가 설치한 적이 없지만, gdal container 내부에 이미
설치된 패키지들이 보이네요.
참고로 이 상태에서 pip 명령어를 사용하면 아래와 같은 에러가 남니다.
pip 를 이대로 사용하면 System Wide(=Global) 환경에 설치된 패키지에 영향을 줄 수 있다!
라는 경고와 함께 에러가 발생하는 것을 확인할 수 있습니다.
친절하게도 이 경고문에는 venv
나 pipx
를 사용해서 가상환경을 먼저 만들고,
그 안에서 pip
명령어를 쓰면 된다고 알려줍니다.
저는 둘 중에서 venv
를 통한 방법을 사용하겠습니다.
# venv 사용을 위한 패키지 설치
apt install python3.12-venv
# 가상환경 기본 세팅
mkdir /app_workspace && cd /app_workspace
python3 -m venv .venv
ls -alF # .venv 디렉토리가 생겼는지 확인
# venv 가상환경 활성화
chmod u+x .venv/bin/activate # file permission 변경
source .venv/bin/activate # 가상환경 활성화 스크립트 적용
# 참고: 가상환경 종료는 deactivate
# 가상 환경 정상 세팅 확인 (경로 확인)
which pip
which python
# 간단한 테스트
pip install --upgrade pip
pip 패키지가 24.0 -> 25.0.1
로 버전업이 된것을 확인할 수 있습니다!
이렇게 함으로써 앞으로 System-wide(=global)
환경과 분리된 가상환경(venv
)에서
안심하고 pip 로 필요한 패키지를 설치하고 사용할 수 있게 되었습니다 ✨.
그런데 venv 가상환경에서 pip list
라고 입력해서
설치된 항목을 패키지들을 보면 가상환경 외부에 설치된
Global
패키지들이 안 보입니다. (아무래도 독립된 환경이니 당연하겠죠?)
Global 환경의 설치된 패키지들은
deactivate
를 입력해서
venv 가상환경을 비활성화하고pip list -v
명령어를 치면 보입니다.
Global 패키지들을 venv
가상환경 활성화 상태에도 사용하고 싶다면
.venv/pyvenv.cfg
파일에서 include-system-site-packages
설정값을
true 로 변경해주면 끝입니다.
deactivate # 일단 가상환경에서 빠져나오고
vim .venv/pyvenv.cfg # 수정!
### 혹시라도 vim 없다면 설치해주세요! apt install -y vim
# 다시 가상환경 활성화
source .venv/bin/activate
## 설치 목록 확인 (venv 환경에만 깔린 local 라이브러리 목록)
pip list -l
## 설치 목록 확인 (venv 환경에 깔린 global + local 라이브러리 목록)
## 이게 venv 환경에서 실제 사용할 수 있는 패키지 목록들입니다.
pip list
마지막으로 venv 환경에서 정상적으로 gdal 이 import 되는지 확인해봅시다.
python # 먼저 python 인터프리터 실행!
### 인터프리터 내부에서 아래처럼 입력해서 에러가 안 났으면
### global 에 설치된 GDAL 패키지를 사용할 수 있는 상태라는 의미입니다.
from osgeo import gdal
from osgeo import ogr
exit() # 다 봤으면 python 인터프리터 종료
이제 visual studio code (이하 vs code)
를 통해서 이 gdal 컨테이너 내부로 들어갈 겁니다.
vs code
가 설치되지 않은 분들은 먼저 설치를 해주세요.
이후에 vs code 실행 후, Dev Containers
플러그인을 설치해줍니다.
이후 ctrl + shift + p
를 입력하면 vs code 상단에 검색란이 생기는데,
Dev Containers: Attach to Running Container...
를 검색하고 Enter!
이후 container 목록을 보여주는데,
아까부터 python 환경 구성 작업을 하던 gdal container
하나만
실행해서 아래 그림처럼 하나의 목록만 보입니다. 선택해줍니다.
이후 vs code 가 새로운 창이 뜨고 조금 시간이 지난 후에
좌측 메뉴에서 Open Folder
버튼을 클릭하고 앞서
venv
환경을 구축한 디렉토리를 선택해줍니다.
이후에 또 다시 visual studio code
가 다시 새로운 창이 뜹니다.
해당 창이 뜨면 python
플러그인을 설치해줍니다.
이제 간단하게 python
이 정상 동작하는지 테스트해보겠습니다.
저는 Hello World
를 출력하는 코드를 작성하고 실행시켜봤습니다.
여기서 중요한 건 venv 활성화 환경에서 실행되는 것입니다.
실행된 콘솔창의 왼쪽 끝에 (.venv)
라는 문구가 잘 보이므로,
원하던 대로 venv 환경에서 실행된 겁니다!
혹시라도
venv
환경에서 실행이 안됐다면python
인터프리터가 잘 설정되어 있는지 확인해 줍니다.ctrl + shift + p
를 누르면 상단에 검색란이 생깁니다.
검색란에Python: Select Interpreter
를 검색합니다.
이후 아래처럼 나오면
./.venv/bin/python
경로에 있는 인터프리터를 선택해줍니다.
개인적으로 여기까지만 해도 충분하지만, Jupyter Notebook 를 자주 사용하시면
Jupyter Plugin 도 설치하시는 걸 추천드립니다.
설치 후에 ctrl + shift + p
입력하고,
검색란에 Create: New Jupyter Notebook
을 검색합니다.
그러면 새로운 Notebook 이 생성되면서 화면에 보이게 되는데,
우측 상단의 Select Kernel 클릭 > Python Environment 클릭 > .venv 선택
합니다.
이후에 pip 로 jupyterlab 를 설치하면 끝입니다.
pip install jupyterlab
여기까지가 일단 기본 세팅법입니다.
다음 글에서는 이 환경에서 유용한 다른 gis 관련 python 라이브러리를 설치해보고
활용해보는 방법을 알아보겠습니다.
혹시라도
PostGIS
와 관련된 개발환경도 구축하고 싶다면
다음글도 이어서 보시면 됩니다 😀
Dockerfile
을 아래처럼 작성합니다.
# FROM ghcr.io/osgeo/gdal:ubuntu-small-latest
FROM ghcr.io/osgeo/gdal:ubuntu-small-3.11.0
# 한글도 읽기/쓰기가 가능토록 함
ENV LANG=C.UTF-8
# Timezone 을 우리나라에 맞춤
RUN ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime
# 파이썬 내용 업데이트
RUN apt update && apt install -y python3-pip python3.12-venv
# python workspace 경로 지정
ENV PYTHON_APP_HOME=/app_workspace
# python workspace 디렉토리에 venv 환경 조성
RUN mkdir $PYTHON_APP_HOME && python3 -m venv $PYTHON_APP_HOME/.venv
# Global 라이브러리를 venv 환경에서도 공유해서 사용
RUN sed -i \
's/include-system-site-packages = false/include-system-site-packages = true/' \
$PYTHON_APP_HOME/.venv/pyvenv.cfg
# venv 환경 활성화 스크립트 File Permission 변경
RUN chmod u+x $PYTHON_APP_HOME/.venv/bin/activate
# (venv 환경) pip 로 파이썬 라이브러리 설치
RUN /bin/bash -c "source ${PYTHON_APP_HOME}/.venv/bin/activate \
&& pip install --upgrade pip \
&& pip install jupyterlab \
&& deactivate"
# (선택사항) 추가적으로 필요한 라이브러리 설치
# RUN apt install -y vim
# (선택사항) alias 지정, devcontainer 실행 시 개발 편의성을 위함.
RUN echo 'alias activate_venv="source ${PYTHON_APP_HOME}/.venv/bin/activate"' \
>> /etc/bash.bashrc
RUN echo 'alias goto_py_home="cd ${PYTHON_APP_HOME}"' \
>> /etc/bash.bashrc
# container 기본 Working directory 지정
WORKDIR ${PYTHON_APP_HOME}
# 아래 ENTRYPOINT, CMD 는 docker stop 명령어 사용시 정상적인 종료를 위함.
ENTRYPOINT ["/bin/sh"]
CMD ["-c", "echo Container started\ntrap \"exit 0\" 15\n\nexec \"$@\"\nwhile sleep 1 \u0026 wait $!; do :; done", "-"]
이후 build 및 run 해서 container 내부 상태 확인
# docker build 및 run
docker build --tag gdal-python .
docker run --name gdal-python -d gdal-python
# container 내부 접속 상태
docker exec -it gdal-python bash
이후에 🖥️ VS Code - Dev Container
를 그대로 따라하시면 개발환경 세팅 끝입니다.
이 글을 보고 Anaconda 쓰면 되지 않냐고 생각할 수도 있지만
Anaconda 는 어느정도 인원이 되는 회사에서 사용할 경우 돈을 내야합니다.
저는 회사에서 사용해야되서 Anaconda
는 선택사항이 아니였습니다.
추가적으로 회사에는 Window
, Mac
둘 중 하나를 사용하는 경우가 많은데,
동일하게 동작하는 개발 환경을 구축하기 위해서는 이 방법이 가장 좋다고 판단했습니다.