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+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 로 필요한 패키지를 설치하고 사용할 수 있게 되었습니다 ✨.
그런데 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 를 통해서 이 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
와 관련된 개발환경도 구축하고 싶다면
다음글도 이어서 보시면 됩니다 😀
여기까지 했다면 사실 테스트하는 데는 문제가 없습니다.
다만 venv 환경에서 완성한 기능(= python script) 를
항상 venv 환경과 똑같이 동작시키려면 어떻게 할까요?
다르게 말하면 "venv 를 활성화하지 않아도 항상 venv 로 동작하는 방법"!
방법은 간단합니다.
py script
맨 윗줄에 venv
환경에서 사용되는
python
의 path
를 shebang
으로 지정해주면 됩니다!
(아래 python script 첫번째 줄 참고)
#!/app_test/.venv/bin/python
import rasterio
print(rasterio)
이렇게 만들고 나서, chmod u+x ??.py
로 실행 가능하게 만들고,
./??.py
처럼 실행시키면 됩니다.