LoginSignup
6
1

More than 3 years have passed since last update.

DockerでPythonにてGDALを利用する

Last updated at Posted at 2020-11-19

概要

geotiffを利用する際に、少しハマったので、備忘録。

結論から言うと、Pyhonにおける「GDAL」ライブラリと「libgdal-dev」のバージョン対応が間違っていたことが原因でした。
apt標準リポジトリにおいて管理される安定版「libgdal-dev」はv2.4.0です(2020年11月19日現在)。これにより、pipにて単純に「pip install GDAL」とするとv3.2.0がダウンロードされますが、v3.2.0に対応する「libgdal-dev」はv3.2.0以上必要ですそのため、インストールする際は「pip install GDAL==2.4.4」とし、バージョン指定する必要があります。「no module named _gdal_array」が出たため、修正。「pip install GDAL==$(gdal-config --version) --global-option=build_ext --global-option="-I/usr/include/gdal"」としないと、gdal_arrayが上手く入らない様子。
この辺りを踏まえたdockerfileなどを以下に記載します。

前提条件

ここでは、以下のことを考えています。

  • dockerを利用し、環境を使いまわせるようにする。
  • あまりanacondaは好きじゃない
  • Pythonを利用するのは、学習コストが低いため
  • docker-composeはあくまで動作テスト用に記載
  • コード変更がきくようにボリュームを設定
  • 特にこだわらないので、ベースイメージは「python:3.8」(多分OSはDebian)

構造

/
|-/app
| |-/image # tifファイルを入れる
| |-test.py # テストコード
| '-Dockerfile
'-docker-compose.yaml 

Dockerfile/docker-compose.yaml

Dockerfile
FROM python:3.8

ENV APP_HOME /app
WORKDIR $APP_HOME

RUN apt-get update && apt-get install -y tzdata \
    libgdal-dev

RUN pip install --upgrade pip
RUN pip install GDAL==$(gdal-config --version) --global-option=build_ext --global-option="-I/usr/include/gdal"

CMD ["python", "/app/test.py"]

docker-compose.yaml
version: "2"
services:
  test:
    container_name: "test"
    build:
      context: ./app
    volumes:
      - ./app:/app

テスト

テストコードは以下の通り。

test.py
from osgeo import gdal, gdalconst

if __name__ == "__main__":
    print("gdal version", gdal.VersionInfo())
    file_name = '/app/image/1_index_ndvi.tif'
    src = gdal.Open(file_name,
                    gdalconst.GA_ReadOnly)  # tifの読み込み (read only)
    print(type(src))  # "osgeo.gdal.Dataset"

実行は、docker-composeを使用しているので、以下の通り。

docker-compose up

おわりに

結構こういうことってよくありますね。ライブラリの最新バージョンを利用する場合は、debianだとパッケージがなかったりするので、ubuntuで環境構築する必要があったりしますし(ubuntuだとリポジトリ登録すればtestバージョン利用できることが多いイメージ)。基本的にある程度データが読める状態にさえなってくれれば、あとは自分で数値処理した方が早いので、stable版で十分だと思います。

参考

6
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
1