Utiliser GDAL avec Python avec Docker

Aperçu

J'étais un peu accro à l'utilisation de geotiff, donc un mémorandum.

En conclusion, cela était dû à une mauvaise correspondance de version entre la bibliothèque "GDAL" et "libgdal-dev" dans Pyhon. ** La version stable "libgdal-dev" gérée dans le référentiel standard d'apt est v2.4.0 (au 19 novembre 2020). En conséquence, la v3.2.0 sera téléchargée si vous faites simplement "pip install GDAL" avec pip, mais "libgdal-dev" correspondant à la v3.2.0 nécessite la version 3.2.0 ou supérieure . Par conséquent, lors de l'installation, il est nécessaire de spécifier la version en définissant " pip install GDAL == 2.4.4 **". Le fichier docker, etc. basé sur cette zone est décrit ci-dessous.

Conditions préalables

Ici, nous réfléchissons à ce qui suit.

--Utilisez docker pour utiliser l'environnement. ――Je n'aime pas beaucoup l'anaconda --Parce que le coût d'apprentissage est faible, Python est utilisé. --docker-compose n'est décrit que pour le test de fonctionnement --Réglez le volume pour pouvoir changer le code

Construction

/
|-/app
| |-/image #Insérez le fichier tif
| |-test.py #Code de test
| '-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==2.4.4

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

docker-compose.yaml


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

tester

Le code de test est le suivant.

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)  #Lire tif(read only)
    print(type(src))  # "osgeo.gdal.Dataset"

L'exécution utilise docker-compose, c'est donc comme suit.

docker-compose up

en conclusion

C'est assez courant. Si vous souhaitez utiliser la dernière version de la bibliothèque, vous devrez peut-être créer un environnement avec ubuntu car il n'y a pas de paquet dans debian (dans ubuntu, vous pouvez souvent utiliser la version de test en vous inscrivant dans le référentiel). En gros, tant que vous pouvez lire les données dans une certaine mesure, il est plus rapide de traiter vous-même les valeurs numériques, donc je pense que la version stable est suffisante.

Recommended Posts

Utiliser GDAL avec Python avec Docker
Utiliser Puphpeteer avec Docker
[Docker] À utiliser à tout moment avec Docker + Rails
Utilisation de cuda11.0 avec pytorch en utilisant Docker
Utiliser le lien symbolique avec la construction en plusieurs étapes de Docker
Utiliser Amazon ECR Credential Helper avec Docker Desktop
Utiliser ProGuard avec Gradle
mémo python sur docker
Lancez MariaDB avec Docker
Exploser Docker avec WSL2
Utilisez XVim2 avec Xcode 12.0.1
Utilisation de CentOS avec LXD
Exploitez Emby avec Docker
Exécutez Payara avec Docker
Utiliser Webmock avec Rspec
Utiliser les WebJars avec Gradle
Utilisez jlink avec gradle
PHP jetable avec Docker
[Note] Créez un environnement Python3 avec Docker dans EC2
Exécuter périodiquement un script Python avec Docker Compose + Daemon (cron)
Utiliser des couches Lambda avec Java
Utiliser Thymeleaf avec Azure Functions
Déployer avec EC2 / Docker / Laravel
Exécutez TAO Core avec Docker
Gestion Docker avec VS Code
[PHP8] Installer et utiliser la fonction YAML de PECL (analyseur YAML) avec Docker
Utiliser le shell intégré de docker avec cygwin [docker exec -it bash]
Utiliser le certificat pfx avec Okhttp3
Configurer GitLab avec docker
Utiliser l'API Bulk avec RestHighLevelClient
Utilisez SDKMAN! Avec Git Bash
Préparer l'environnement Python3 avec CentOS7
Exécuter des rails à chaque fois dans le docker
Paramètre de démarrage automatique de Docker avec wsl2
[Docker] Construction de l'environnement Rails 5.2 avec docker
Utilisez plusieurs bases de données avec Rails 6.0
Spring Boot à partir de Docker
Créer un environnement Docker avec WSL
Gérer la version de CocoaPods avec Docker
Utiliser Spring JDBC avec Spring Boot
Application Web construite avec docker (1)
J'ai essayé BIND avec Docker
Utilisez Ruby avec Google Colab
Utiliser SpatiaLite avec Java / JDBC