공식 GDAL 이미지로 GIS & Python 개발환경 구축하기 (feat. Docker)

식빵·2025년 4월 14일
0

GIS

목록 보기
10/11

🎯 이 글의 목표

  1. DockerGdal Container 를 실행

  2. Containerpython 개발에 필요한 기본적인 패키지 추가 설치

  3. Visual Studio CodeDev Container 플러그인으로
    Container 에 접속하고 개발할 수 있는 환경을 세팅



🐳 Docker - GDAL Container

Docker 를 통해서 GDAL 공식 이미지로 컨테이너를 띄우고 사용하는 방법은
제가 이전에 작성한 글을 참고하시면 되겠습니다.




🐍 GDAL 컨테이너에 pip 설치

pip 설치는 필수가 아닙니다.
하지만 일반적으로 python 을 사용하면서 pip 없이 개발하는 건
제가 보기에는 거의 불가능합니다.

그리고 이미 컨테이너에 설치된 GDAL 패키지만 있다고 모든 GIS 관련 처리를
하는 것은 효율적이지 않다고 생각됩니다.

오히려 pip 를 통해서 Fiona, Shapely, Rasterio 등과 같은 패키지들를
설치하고 GDAL 과 조화롭게 사용하는 게 효율적이라 생각됩니다.

서론이 길었네요. 이제 pip 를 설치해보죠.

apt update && apt install -y python3-pip
pip list -v # 이걸로 정확한 설치 위치와, 현재 설치된 것들을 모두 알 수 있다.

pip 로 뭔가 설치한 적이 없지만, gdal container 내부에 이미
설치된 패키지들이 보이네요.




✨ 가상환경(venv) 설정

참고로 이 상태에서 pip 명령어를 사용하면 아래와 같은 에러가 남니다.

pip 를 이대로 사용하면 System Wide(=Global) 환경에 설치된 패키지에 영향을 줄 수 있다!
라는 경고와 함께 에러가 발생하는 것을 확인할 수 있습니다.

친절하게도 이 경고문에는 venvpipx 를 사용해서 가상환경을 먼저 만들고,
그 안에서 pip 명령어를 쓰면 된다고 알려줍니다.

저는 둘 중에서 venv 를 통한 방법을 사용하겠습니다.

# venv 사용을 위한 패키지 설치
apt install python3.12-venv

# 가상환경 기본 세팅
mkdir /app_workspace & cd /app_workspace
python3 -m venv .venv
ls -alF 					   # .venv 디렉토리가 생겼는지 확인

# venv 가상환경 활성화
chmod u+rwx .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 로 필요한 패키지를 설치하고 사용할 수 있게 되었습니다 ✨.




✨ Global package 사용하기

그런데 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 인터프리터 종료 





🖥️ VS Code - Dev Container

이제 Vs code 를 통해서 이 gdal 컨테이너 내부로 들어가야 한다.
먼저 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 와 관련된 개발환경도 구축하고 싶다면
다음글도 이어서 보시면 됩니다 😀





🖥️ Tip: python script on venv

여기까지 했다면 사실 테스트하는 데는 문제가 없습니다.
다만 venv 환경에서 완성한 기능(= python script) 를
항상 venv 환경과 똑같이 동작시키려면 어떻게 할까요?

다르게 말하면 "venv 를 활성화하지 않아도 항상 venv 로 동작하는 방법"!

방법은 간단합니다.
py script 맨 윗줄에 venv 환경에서 사용되는
pythonpathshebang 으로 지정해주면 됩니다!
(아래 python script 첫번째 줄 참고)

#!/app_test/.venv/bin/python

import rasterio

print(rasterio)

이렇게 만들고 나서, chmod u+x ??.py 로 실행 가능하게 만들고,
./??.py 처럼 실행시키면 됩니다.




🗺️ 참고한 링크

profile
백엔드 개발자로 일하고 있는 식빵(🍞)입니다.

0개의 댓글