Fichier d'en-tête manquant dans le paquet Python GDAL lors de l'installation via pip


68

J'ai posé cette question sur Stack Overflow avant de réaliser que ce site existait. Comme ce site est plus approprié, je vais le demander ici aussi.

J'essaie d'installer gdal depuis pip pip install gdaldans un environnement virtuel (Ubuntu). Il échoue car il ne trouve pascpl_port.h

extensions/gdal_wrap.cpp:2853:22: fatal error: cpl_port.h: No such file or directory
compilation terminated

Cependant, GDAL est correctement installé et le fichier d’en-tête est situé à /usr/include/gdal/cpl_port.h. Existe-t-il une variable d'environnement pour GDAL qui doit être définie pour que pip puisse trouver les fichiers d'en-tête?


J'ai le même problème sur Windows, en installant gdal via pip dans env virtuel. ! [entrez la description de l'image ici ] ( i.stack.imgur.com/EVLWP.jpg )
Hayat Khan

Réponses:


94

La réponse de selimnairb est proche mais vous n'aurez pas les en-têtes si vous n'avez pas installé libgdal-dev:

sudo apt-get install libgdal-dev

avec ça fait,

export CPLUS_INCLUDE_PATH=/usr/include/gdal

export C_INCLUDE_PATH=/usr/include/gdal

puis

pip install GDAL

La compilation est terminée et j'ai GDAL dans mon env virtuel. Phew!

(edit 2018) Remarque: pour être sûr d'installer la version correcte et éviter tout problème. récupérer la version avec gdal-config --version. puis:

pip install GDAL==version

Semble être la seule solution qui a fonctionné.
Bozdoz

1
Essayé cela sur un autre système, et je pense que la combinaison de cette réponse plus @nickves est ce qui le fait réellement.
Bozdoz

Cela a fonctionné pour moi.
Jaranda

1
Très bien. Si la version installée de GDAL dans le système et le package python diffèrent, cela échoue. La solution consiste à rechercher la version de GDAL dans le système et à indiquer à pip d'installer la version de package python appropriée. Dans mon cas (Ubuntu 14.04), les deux sont 10.0, donc cela a aidé$ pip install GDAL==10.0
Jan Vlcinsky

4
Je peux confirmer que cela fonctionne sur Ubuntu 16.04 avec pip install GDAL==1.10.0.
Beruic

34

Les fichiers d'en-tête sont introuvables pour une raison quelconque. Peut-être que vous travaillez dans un environnement virtuel ou qu’ils ne sont pas où ils devraient être pour une raison quelconque. Dans tous les cas, vous pouvez spécifier les répertoires d'inclusion lors de l'installation de gdal via pip.

premier téléchargement de python's gdal:

pip install --no-install GDAL

dans les versions ultérieures de pip (> = 9.0.0) pip install --no-installn'existe pas:

pip download GDAL

puis spécifiez où sont les en-têtes:

python setup.py build_ext --include-dirs=/usr/include/gdal/

puis installez-le:

pip install --no-download GDAL

dans les versions ultérieures de pip (> = 9.0.0) pip install --no-downloadn'existe pas:

sudo python setup.py install --include-dirs=/usr/include/gdal

Voici un autre moyen d'installer gdal python:

$ sudo apt-add-repository ppa:ubuntugis/ubuntugis-unstable
$ sudo apt-get update
$ sudo apt-get install python-gdal

après cela, ouvrez IDLE:

from osgeo import gdal

et vous êtes prêt à partir!


3
Bonjour, merci de votre réponse, mais j’ai vraiment besoin d’un moyen d’installation via pip car je vais créer des environnements isolés à l’aide de virtualenv pendant le processus de CI.
Kevin

1
Quel est le résultat lorsque vous exécutez 'gdal-config --version' et 'gdal-config --libs'?
nickves

GDAL v1.9.1. gdal-config --libs -> -L/usr/lib -lgdal
kevin

2
@ nickves J'essaie d'installer GDAL à l'aide de virtualenvwrapper sous Ubuntu, et lorsque j'essaie de lire votre première ligne:, j'obtiens le message d' pip install --no-install GDALerreur: __main__.gdal_config_error: [Errno 2] No such file or directoryune idée?
theJollySin

3
J'ai récemment eu beaucoup de plaisir à installer GDAL sur OSX. Actuellement, les dernières liaisons Python pour GDAL dépendent de la version 2.1, mais la dernière version de GDAL disponible dans l'homebrew est 1.11.3 et 1.11.4 pour GDAL Complete. J'ai installé via homebrew brew install gdalet utilisé une version plus ancienne du package GDAL Python:pip install --global-option=build_ext --global-option="-L/usr/local/include/gdal/" 'gdal==1.9.1'
TestSubject

17

Après avoir suivi un sous-ensemble de ces conseils, voici comment j'ai installé l'installation de Python GDAL 1.11.0 (la solution doit être indépendante de la version, voir ci-dessous) pour fonctionner sur Ubuntu 14.04 avec pip:

Installez des dépendances:

sudo apt-get install libgdal-dev libgdal1h

pip installer en passant par le chemin d’inclusion (préfixe avec sudopour l’installation à l’échelle du système) et en demandant à pip d’installer la version correspondant à la version GDAL installée par le système:

pip install --global-option=build_ext --global-option="-I/usr/include/gdal" GDAL==\`gdal-config --version\`

Les réponses les mieux notées de selimnairb et de Paul Whipp ne fonctionnaient pas pour moi sur Ubuntu 15.10 et celui-ci s’est avéré efficace.
rhunwicks

1
La deuxième ligne a fonctionné pour moi après avoir pu ajouter les dépôts instables de @nickves answer. Merci à tous!
Patrick Williams

1
Merci, cela a fini par travailler pour moi. Bien que je devais modifier légèrement pour tenter de respecter scrupuleusement l’installation de cartodb, j’ai fini par l’utiliser comme ma dernière commande d’installation: sudo pip install --no-use-wheel -r python_requirements.txt --global-option=build_ext --global-option="-I/usr/include/gdal" python_requirements.txt spécifie une version plus ancienne de gdal. Pour être honnête, je doute que ce soit important, mais l'ensemble du programme d'installation du Pip se termine avec succès. U 12.04x64
vaxhax

12

Installation du paquet Python gdaldans virualenv sous Linux

GDALfournit une jolie boîte à outils pour les opérations liées à GEO. Cependant, l’installer sur virtualenv sous Linux n’est pas une tâche aisée.

Cette recette décrit comment faire cela.

Remarque

Ici, j'utilise des minuscules gdalpour le paquet Python et des majuscules GDALpour la bibliothèque système globale.

Exigences

  • autoriser l'utilisation de bibliothèques osgeo (installées via gdalle paquet Python) dans virtualenv
  • autoriser l'installation sur Linux Ubuntu

Méthodes d'installation

Il existe plusieurs méthodes d'installation. L'une nécessite une compilation et prend quelques minutes de plus.

L'autre utilise le paquet de roue pygdalet est très rapide. Quoi qu'il en soit, pour créer le paquetage wheel, il faut le créer une fois et la création inclut quand même l'étape de compilation.

À propos des GDALpackages et des versions

GDAL est une bibliothèque générale basée sur C (++) pour les calculs liés à GEO.

GDAL Les utilitaires peuvent être installés à l’échelle du système, ce qui rend les bibliothèques partagées disponibles, mais n’installe pas le paquet Python lui-même.

GDAL existe en différentes versions et chaque distribution Linux peut installer par défaut une version différente.

Le paquet Python gdalnécessite une compilation et son installation sur des systèmes Linux n'est pas une mince affaire, car il n'attend que peu de variables d'environnement. Cela rend l’installation dans virtualenv plus difficile.

Chaque gdalversion peut assumer une version différente de GDALet échouera l’installation si la version attendue n’est pas présente sur le système.

Le paquet Python pygdalest une alternative à gdal, qui installe exactement la même chose que gdal, mais le fait de manière beaucoup plus conviviale et virtuelle.

pygdalvient dans les versions reflétant la GDALversion connexe . Donc, ayant la GDAL version 1.10.1 dans le système, vous devez installer la pygdalversion 1.10.1.

Le paquet Python gdal(ainsi que pygdal) utilise le paquet python racine nommé osgeoet possède un ensemble de sous-modules, l'un d'eux osgeo.gdal.

Si nécessaire, d'autres versions que les versions par défaut GDALpeuvent être installées et utilisées. Ceci sort du cadre de cette description.

Les paquets de roues peuvent être compilés de manière croisée, ceci est également hors de portée.

Installation GDALdans le système

Comme pygdalexige des GDALbibliothèques partagées à présent, il faut les installer en premier.

En supposant qu’il GDALn’est pas encore installé, l’appel gdal-configse plaindra et vous indiquera comment faire un suivi:

$ gdal-config --version
The program 'gdal-config' is currently not installed. You can install it by typing:
sudo apt-get install libgdal-dev

Suivez l'indice et installez-le:

$ sudo apt-get install libgdal-dev

Chaque distribution peut utiliser une version différente de GDAL. Pour savoir ce que nous utilisons:

$ gdal-config --version
1.10.1

Maintenant, vous savez, GDALest installé et la version est 1.10.1 (la version peut varier).

Installer à pygdalpartir du paquet source (nécessite une compilation)

Actuellement, il pygdaln’est fourni que dans le package tar.gz, qui contient les sources du package et nécessite une compilation.

En supposant que la version de GDALis 1.10.1et que notre virtualenv soit déjà activée:

$ pip install pygdal==1.10.1

Cela peut prendre un peu de temps, s'il nécessite Numpy, ce qui peut également nécessiter une compilation. Attends.

Vérifiez, il est installé:

$ pip freeze|grep pygdal
pygdal==1.10.1.0

À partir de maintenant, vous pouvez utiliser le paquet osgeo dans votre code Python à votre guise, exactement de la même manière que si vous l'installiez avec un gdalpaquet Python.

Créer un paquet de roue pour pygdal

Notez que les packages de roue doivent être créés pour une architecture identique, à savoir:

  • Architecture de la CPU
  • OS (Linux / Windows)

Dans notre cas, il doit également correspondre à la version GDALinstallée.

Les étapes suivantes peuvent être effectuées dans virtualenv ou non, comme vous le souhaitez.

Tout d’abord, assurez-vous que le paquet de roue est installé:

$ pip install wheel

En supposant que vous ayez GDALinstallé la version 1.10.1:

$ pip wheel pygdal==1.10.1.0

et attendez, jusqu'à ce qu'il se termine.

Après cela, vous trouverez le sous-répertoire timonerie qui contiendra les paquets avec l’extension `whl`:

$ ls wheelhouse
numpy-1.9.1-cp27-none-linux_x86_64.whl
pygdal-1.10.1.0-cp27-none-linux_x86_64.whl

Installer à pygdalpartir de la roue

L'installation à partir de packages au format Wheel est beaucoup plus rapide (une seconde par rapport aux minutes), car elle ne nécessite pas de compilation.

Notez que ce répertoire avec les paquets de roue peut avoir n'importe quel nom, nous utiliserons simplement le nom timonerie.

Activez d'abord virtualenv.

Assurez-vous que vous avez dans le répertoire de la timonerie les deux ensembles de roues requis (pour pygdalet numpy).

Ensure, GDALest installé et la version correspond à la version de pygdal.

Installer à pygdalpartir du paquet de roue:

$ pip install pygdal==1.10.1.0 -f wheelhouse

La timonerie -f doit pointer vers le répertoire contenant les fichiers whl.

Il n'y a pas besoin d'installer numpy, il s'installe automatiquement.


Cette réponse s'appuie sur d'autres réponses intéressantes ici, essaie de donner des instructions complètes pour les détails, où je me suis retrouvée bloquée et ajoute des étapes pour utiliser le format de paquetage de roue pour accélérer les installations répétées dans virtualenv.
Jan Vlcinsky

pygdalpour la victoire!! pypi : "Version conviviale pour virtualenv et setuptools des liaisons Python GDAL standard" <3
gisdude

9

Oui, les opérations suivantes avant d'exécuter PIP semblent fonctionner:

exportez CPLUS_INCLUDE_PATH = / usr / include / gdal

exportation C_INCLUDE_PATH = / usr / include / gdal


6

Le problème avec pip qui installe gdal est qu’il n’obtient que les liaisons, pas toute la bibliothèque, ce qui peut poser des problèmes. Une façon de résoudre ce problème consiste à utiliser la commande pip pour télécharger, mais pas pour installer. Ensuite, vous modifiez l'emplacement de l'en-tête à partir du fichier de configuration. Ensuite, vous pouvez installer ça. meh.

J'avais le même problème, mais je me suis rendu compte que l'écriture d'un script de structure pour recompiler gdal et générer les liaisons Python allait prendre moins de temps. Vous obtenez même l'avantage de filegdb avec cela. Allez-y et utilisez ce que j'ai écrit ou modifiez-le à votre guise.


3

Peu de temps après, cela fournit le chemin d’inclusion sans avoir à sortir de l’installation du pip: Vous pouvez définir le chemin d’inclusion à l’aide d’une variable d’environnement.

En supposant que les en-têtes se trouvent dans / usr / include / gdal, envoyez un

export CPLUS_INCLUDE_PATH=/usr/include/gdal

avant d'exécuter pip.


En utilisant cela, je reçois "extensions / gdalconst_wrap.c: 2732: 18: erreur fatale: gdal.h: aucun fichier ou répertoire de ce type" même si gdal.h est présent dans/usr/include/gdal
anand.trex

1
Est-ce que l’utilisation de C_INCLUDE_PATH à la place / en plus aide =?
Crischan

3

Après avoir cherché une solution à droite et à gauche, voici quelque chose qui fonctionne pour moi sur Ubuntu 14.04, même à partir d'un environnement virtuel sans accès aux packages système:

  • Installez des dépendances:

    sudo apt-get install libgdal-dev libgdal1h libgdal1-dev
  • Définissez les drapeaux du compilateur:

    export CFLAGS=$(gdal-config --cflags)
  • Installez la version correspondant aux bibliothèques système (au moment de la rédaction de ce document, Ubuntu Trusty utilise les en-têtes 1.10):

    pip install GDAL==1.10.0

a également travaillé pour moi sur Ubuntu 16.04
Luke W

2

Maintenant, vous pouvez utiliser la version conviviale virtualenv et setuptools des liaisons pygon GDAL standard pygdal .


2

J'avais des problèmes similaires sur un Mac. Voici comment je l'ai résolu:

Tout d'abord, j'ai configuré un environnement virtuel Python 2.7 à l'aide de virtualenv. La distribution Python a été installée dans un répertoire appelé 'env'.

J'ai ensuite utilisé fink pour installer gdal

fink selfupdate
fink update-all
fink install gdal

J'ai aussi installé gdal-dev mais cela n’a peut-être pas été nécessaire car il a peut-être déjà été installé avec gdal.

J'ai vérifié la version installée à l'aide de:

gdal-config --version

Sur mon installation, il a donné le résultat 1.11.1

L'installation fink de gdal a installé le fichier d'en-tête cpl_port.h dans / sw / include / gdal1. Vérifiez votre propre installation. Je suis ensuite entré:

export CPLUS_INCLUDE_PATH=/sw/include/gdal1
export C_INCLUDE_PATH=/sw/include/gdal1
env/bin/pip install pygdal==1.11.1

Cela a semblé fonctionner pour moi mais je n'ai pas encore testé l'installation.


2

Sur Fedora 24 qui a GDAL 2.0.2 dans ses référentiels, je devais installer le paquet Python comme ceci:

pip install \
  --global-option=build_ext \
  --global-option="-I/usr/include/gdal/" \
  GDAL==2.0.1

2

J'obtenais une erreur similaire en essayant d'installer les liaisons python GDAL sur un mac (OS 10.10.5). J'ai installé le logiciel GDAL de base à partir de http://www.kyngchaos.com/software/frameworks en utilisant le téléchargement "Complet". Je devais définir trois variables d'environnement.

exportation C_INCLUDE_PATH = / Bibliothèque / Frameworks / GDAL.framework / En-têtes exportation CPLUS_INCLUDE_PATH = / Bibliothèque / Frameworks / GDAL.framework / Exportations en-têtes LIBRARY_PATH = / Bibliothèque / Frameworks / GDAL.framework / Versions / Current / unix / lib

La dernière pièce consistait à ajouter /Library/Frameworks/GDAL.framework/Programs à PATH.

echo 'export PATH = / Bibliothèque / Frameworks / GDAL.framework / Programmes: $ PATH' >> ~ / .bash_profile

Après cela, pip a pu installer GDAL pour python. J'espère que cela t'aides.


1

J'ai eu des problèmes avec gdal 1.10.1, et juste fait ce qui suitpip install --global-option=build_ext --global-option="-I/usr/include/gdal" gdal==1.10.0
ryanjdillon

1

Pour répondre à l’aspect spécifique à la virtualité de la question:

pip3 search gdal
GDAL                      - GDAL: Geospatial Data Abstraction Library
pygdal                    - Virtualenv and setuptools friendly version of
                            standard GDAL python bindings

Attention, pygdalune version de GDAL différente de celle requise par le GDALpackage de liaisons python peut être requise.


Vous trouverez ci-dessous ce que je cherchais dans les versions récentes de Fedora (20 et 23).

CPPFLAGS=-I/usr/include/gdal pip install gdal

1

Installation via Pip avec une seule commande

En supposant que le package de développement GDAL soit installé et que les versions du fichier d’en-tête soient correctes, la seule commande nécessaire pour installer GDAL à partir des dépôts PyPI est la suivante:

pip install --global-option=build_ext --global-option="-I/usr/include/gdal" gdal

Cela suppose évidemment que l'emplacement des fichiers d'en-tête est /usr/include/gdal.

Installer GDAL à jour

Pour installer GDAL à l'aide de la commande pip ci-dessus, la version des fichiers d'en-tête doit être similaire à celle utilisée par pip pour la construction. GDAL a une référence binaire mise à jour sur: https://trac.osgeo.org/gdal/wiki/DownloadingGdalBinaries .

Comment installer sur OpenSUSE

En suivant le lien ci-dessus, une URL est intégrée à un ensemble de packages SIG mis à jour pour OpenSUSE 42.1 http://download.opensuse.org/repositories/Application:/Geo/openSUSE_Leap_42.1/Application: Geo.repo

zypper ar -f <URL>

Remplacez-le par le paquet approprié. Et si vous n'utilisez pas, vous zyppertrouverez plus d'informations à l' adresse https://trac.osgeo.org/gdal/wiki/DownloadingGdalBinaries.


1

J'ai eu le même problème sous Windows 10. Après quelques expériences, je suis arrivé avec cette solution.

  1. Téléchargez et installez Python 3.6 (s'il n'est pas installé) après l'installation, modifiez les variables d'environnement. PYTHONPATH=c:\python36 PATH=C:\python36\Scripts\;C:\python36\;%PATH%
  2. Téléchargez * .whl pour obtenir la version correcte de python à l’ adresse https://www.lfd.uci.edu/~gohlke/pythonlibs/#gdal
  3. Téléchargez et installez http://landinghub.visualstudio.com/visual-cpp-build-tools
  4. pip install *.whl (* .whl de step2)

thnx, j’imaginais que python avait installé automatiquement les environnements, mais j’ai ensuite supprimé et recréé les environnements comme vous l’avez suggéré, tout fonctionnant comme un charme
Florjan

1

Si vous utilisez Docker, nous avons ouvert le code source de notre conteneur, ce qui simplifie l'utilisation de GDAL et de Python 3. Le conteneur capture les étapes décrites ci-dessus pour vous permettre d'utiliser rapidement GDAL avec vos applications.

thinkwhere / gdal-python


1

Cette approche a fonctionné pour moi:

sudo apt-get install libgdal-dev
export CPLUS_INCLUDE_PATH=/usr/include/gdal
export C_INCLUDE_PATH=/usr/include/gdal
pip3 install gdal==$(gdal-config --version)

Ou en tant que partie d'un fichier Dockerfile:

RUN apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get install -y \
                libgdal-dev \
                python3-pip
ARG CPLUS_INCLUDE_PATH=/usr/include/gdal
ARG C_INCLUDE_PATH=/usr/include/gdal
RUN pip3 install gdal==$(gdal-config --version)

0

Si vous utilisez une distribution basée sur Debian, les bibliothèques python GDAL sont disponibles via votre gestionnaire de paquets et peuvent être simplement installées avec

sudo apt install python-gdal ou sudo apt install python3-gdal


0

Sur Ubuntu 16.04 avec un conteneur in-docker (pile jupyter)

apt-get update
apt-get install libgdal1-dev -y
gdal-config --version
export CFLAGS=$(gdal-config --cflags)
pip install GDAL==1.11.2

0

Dans Ubuntu, une solution plus simple pour installer la dernière version de gdal pour python3: installer les fichiers de bibliothèque via libgdal-devet python wrapper viapython-gdal

sudo apt-get install libgdal-dev
sudo apt-get install python3-gdal

pour python2:

sudo apt-get install python-gdal

0

Vous pouvez également rencontrer des problèmes avec l'utilisation de la mémoire.

Lorsque vous exécutez pip install gdal==2.2.3gcc, lancez pour compiler quelque chose et augmente l'utilisation de la mémoire.

Si vous n’avez pas assez de mémoire, le compilateur échoue, avec un message comme

'x86_64-linux-gnu-gcc' a échoué avec le statut de sortie 4

Pour résoudre ce problème, vous devez ajouter plus de RAM ou en libérer.


0

Si vous utilisez Travis CI et avez besoin d’une version récente de GDAL pour Python, voici un exemple de la partie d’un .travis.ymlfichier qui pourrait ressembler à ceci:

language: python

env:
  global:
    - CPLUS_INCLUDE_PATH=/usr/include/gdal
    - C_INCLUDE_PATH=/usr/include/gdal

before_install:
  - sudo add-apt-repository -y ppa:ubuntugis/ppa
  - sudo apt-get -qq update
  - sudo apt-get -qq install libgdal-dev gdal-bin

install:
  - pip install gdal==`gdal-config --version`
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.