Bei der Installation über pip fehlt im Python-GDAL-Paket die Header-Datei


68

Ich habe diese Frage zu Stack Overflow gestellt, bevor mir klar wurde, dass diese Site existiert. Da diese Seite passender ist, werde ich sie auch hier fragen.

Ich versuche, gdal von pip pip install gdalin einer virtuellen Umgebung (Ubuntu) zu installieren . Es schlägt fehl, weil es nicht finden kanncpl_port.h

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

GDAL ist jedoch korrekt installiert und die Header-Datei befindet sich unter /usr/include/gdal/cpl_port.h. Gibt es eine Umgebungsvariable für GDAL, die festgelegt werden muss, damit pip die Header-Dateien findet?


Ich habe ein ähnliches Problem unter Windows, indem ich gdal über pip in virtual env installiere. ! [Bildbeschreibung hier eingeben ] ( i.stack.imgur.com/EVLWP.jpg )
Hayat Khan

Antworten:


94

Die Antwort von selimnairb ist nah, aber Sie werden die Header nicht haben, es sei denn, Sie haben libgdal-dev installiert:

sudo apt-get install libgdal-dev

mit dem getan,

export CPLUS_INCLUDE_PATH=/usr/include/gdal

export C_INCLUDE_PATH=/usr/include/gdal

und dann

pip install GDAL

Die Zusammenstellung lief bis zum Abschluss und ich habe GDAL in meiner virtuellen Umgebung. Puh!

(edit 2018) Hinweis: Um sicherzustellen, dass Sie die richtige Version installieren und Probleme vermeiden. Rufen Sie die Version mit gdal-config --version. und dann:

pip install GDAL==version

Scheint die einzige Lösung zu sein, die funktioniert hat.
Bozdoz

1
Versuchte dies auf einem anderen System, und ich denke, die Kombination dieser plus @nickves Antwort ist, was es tatsächlich tut.
Bozdoz

Das hat bei mir funktioniert.
Jaranda

1
Sehr gut. Falls die installierte Version von GDAL im System- und Python-Paket unterschiedlich ist, schlägt dies fehl. Die Lösung besteht darin, die Version von GDAL im System zu finden und pip anzuweisen, die entsprechende Python-Paketversion zu installieren. In meinem Fall (Ubuntu 14.04) sind beide 10.0, also hat es geholfen$ pip install GDAL==10.0
Jan Vlcinsky

4
Ich kann bestätigen, dass dies unter Ubuntu 16.04 mit funktioniert pip install GDAL==1.10.0.
Berühmte

34

Die Header-Dateien können aus irgendeinem Grund nicht gefunden werden. Vielleicht arbeiten Sie in einer virtuellen Umgebung oder sie befinden sich aus irgendeinem Grund nicht dort, wo sie sein sollten. In jedem Fall können Sie die Include-Verzeichnisse bei der Installation von gdal via pip angeben.

lade zuerst pythons gdal herunter:

pip install --no-install GDAL

in späteren Versionen von pip (> = 9.0.0) pip install --no-installgibt es nicht:

pip download GDAL

Geben Sie dann an, wo sich die Überschriften befinden:

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

dann installiere es:

pip install --no-download GDAL

in späteren Versionen von pip (> = 9.0.0) pip install --no-downloadgibt es nicht:

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

Hier ist eine andere Möglichkeit, gdal python zu installieren:

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

danach offene IDLE:

from osgeo import gdal

und du bist gut zu gehen!


3
Hallo, danke, dass du geantwortet hast, aber ich brauche wirklich eine Möglichkeit, über Pip zu installieren, da ich während des CI-Prozesses mithilfe von virtualenv isolierte Umgebungen erstellen werde.
Kevin

1
Was ist die Ausgabe, wenn Sie 'gdal-config --version' und 'gdal-config --libs' ausführen?
nickves

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

2
@nickves Ich versuche, GDAL mit virtualenvwrapper in Ubuntu zu installieren, und wenn ich Ihre erste Zeile versuche: pip install --no-install GDALerhalte ich die Fehlermeldung: __main__.gdal_config_error: [Errno 2] No such file or directoryIrgendeine Idee?
theJollySin

3
Ich hatte vor kurzem eine wundervolle Zeit, GDAL unter OSX zu installieren. Gegenwärtig hängen die neuesten Python-Bindungen für GDAL von 2.1 ab, die neueste verfügbare GDAL in Homebrew ist 1.11.3 und 1.11.4 für GDAL Complete. Ich habe über Homebrew installiert brew install gdalund eine ältere Version des GDAL-Python-Pakets verwendet:pip install --global-option=build_ext --global-option="-L/usr/local/include/gdal/" 'gdal==1.9.1'
TestSubject

17

Nachdem ich einer Untergruppe dieser Ratschläge gefolgt war, habe ich Python GDAL 1.11.0 (die Lösung sollte versionsunabhängig sein, siehe unten) installiert, um unter Ubuntu 14.04 mit pip zu funktionieren:

Abhängigkeiten installieren:

sudo apt-get install libgdal-dev libgdal1h

Die Pip-Installation erfolgt über den Include-Pfad (Präfix sudofür die systemweite Installation) und weist pip an, die Version zu installieren, die der auf dem System installierten GDAL-Version entspricht:

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

Die höher bewerteten Antworten von Selimnairb und Paul Whipp funktionierten für mich unter Ubuntu 15.10 nicht und diese auch nicht.
Rhunwicks

1
Die zweite Zeile funktionierte für mich nach dem Hinzufügen der instabilen Repositorys von @nickves answer. Dank an alle!
Patrick Williams

1
Danke, das hat bei mir geklappt. Obwohl ich etwas ändern musste, um mich so streng wie möglich an die Cartodb-Installation zu halten, habe ich dies als letzten funktionierenden Installationsbefehl verwendet: sudo pip install --no-use-wheel -r python_requirements.txt --global-option=build_ext --global-option="-I/usr/include/gdal" python_requirements.txt spezifiziert eine ältere Version von gdal. Ich bezweifle, dass es wichtig wäre, ehrlich zu sein, aber das gesamte Pip-Installationsset wird erfolgreich abgeschlossen. U 12.04x64
vaxhax

12

Installieren des Python-Pakets gdalin virualenv unter Linux

GDALBietet ein nützliches Toolkit für GEO-bezogene Operationen. Die Installation auf virtualenv unter Linux ist jedoch keine triviale Aufgabe.

Dieses Rezept beschreibt, wie das geht.

Hinweis

Hier verwende ich Kleinbuchstaben gdalfür Python-Pakete und Großbuchstaben GDALfür allgemeine systemweite Bibliotheken.

Bedarf

  • Ermöglichen Sie die Verwendung von osgeo-Bibliotheken (die über das gdalPython-Paket installiert werden ) in virtualenv
  • Erlaube die Installation unter Linux Ubuntu

Installationsmethoden

Es gibt mehrere Installationsmethoden. Eine Kompilierung ist erforderlich und dauert einige Minuten länger.

Das andere verwendet Radpaket des pygdalPakets und ist sehr schnell. Um das Radpaket zu erstellen, muss es auf jeden Fall einmal erstellt werden, und die Erstellung umfasst ohnehin den Kompilierungsschritt.

Über GDALPakete und Versionen

GDAL ist eine allgemeine C (++) - basierte Bibliothek für GEO-bezogene Berechnungen.

GDAL Dienstprogramme können systemweit installiert werden, wodurch gemeinsam genutzte Bibliotheken verfügbar werden, das Python-Paket selbst wird jedoch nicht installiert.

GDAL Es gibt verschiedene Versionen und jede Linux-Distribution kann standardmäßig eine andere Version installieren.

Das Python-Paket gdalmuss kompiliert werden und ist auf Linux-basierten Systemen nicht einfach zu installieren, da nur wenige Umgebungsvariablen festgelegt werden müssen. Dies erschwert die Installation in virtualenv.

Für jede gdalVersion wird möglicherweise eine andere Version von GDALvorausgesetzt, und die Installation schlägt fehl, wenn die erwartete Version nicht im System vorhanden ist.

Python-Paket pygdalist eine Alternative zu Python gdal, das genau dasselbe installiert wie Python gdal, aber viel virtueller ist.

pygdalkommt in Versionen, die verwandte Versionen widerspiegeln GDAL. GDAL Wenn Sie also Version 1.10.1 im System haben, müssen Sie pygdalVersion 1.10.1 installieren .

Python-Paket gdal(wie auch pygdal) verwendet das Root-Python-Paket mit dem Namen osgeound einer Reihe von Submodulen osgeo.gdal.

Bei Bedarf können andere als die Standardversionen von GDALinstalliert und verwendet werden. Dies liegt außerhalb des Umfangs dieser Beschreibung.

Radpakete können übergreifend kompiliert werden, dies ist auch nicht im Umfang.

Installation GDALim System

Da es pygdalerforderlich ist, dass GDALgemeinsam genutzte Bibliotheken vorhanden sind, müssen diese zuerst installiert werden.

Vorausgesetzt, dass GDALnoch nicht installiert ist, gdal-configbeschwert sich der Anruf und gibt Ihnen einen Hinweis, wie Sie nachverfolgen können:

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

Folgen Sie dem Hinweis und installieren Sie ihn:

$ sudo apt-get install libgdal-dev

Jede Distribution kann eine andere Version von verwenden GDAL. Um herauszufinden, welche wir verwenden:

$ gdal-config --version
1.10.1

Jetzt wissen Sie, GDAList installiert und die Version ist 1.10.1 (die Version kann variieren).

Installation pygdalvom Quellpaket (Kompilierung erforderlich)

Derzeit pygdalwird nur das tar.gz-Paket bereitgestellt, das Paketquellen enthält und kompiliert werden muss.

Vorausgesetzt, die Version von GDAList 1.10.1und dass unser virtualenv bereits aktiviert ist:

$ pip install pygdal==1.10.1

Es kann eine Weile dauern, bis der Vorgang abgeschlossen ist. Dies erfordert möglicherweise auch eine Kompilierung. Warte einfach.

Überprüfen Sie, ob es installiert ist:

$ pip freeze|grep pygdal
pygdal==1.10.1.0

Ab sofort können Sie das osgeo-Paket in Ihrem Python-Code genau so verwenden, wie Sie es mit dem gdalPython-Paket installieren würden .

Radpaket erstellen für pygdal

Beachten Sie, dass Radpakete für genau dieselbe Architektur erstellt werden müssen, und zwar für Folgendes:

  • CPU-Architektur
  • Betriebssystem (Linux / Windows)

In unserem Fall muss es auch mit der GDALinstallierten Version übereinstimmen .

Die folgenden Schritte können in virtualenv ausgeführt werden oder nicht, wie Sie möchten.

Stellen Sie zunächst sicher, dass das Radpaket installiert ist:

$ pip install wheel

Vorausgesetzt, Sie haben GDALinstalliert und es hat Version 1.10.1:

$ pip wheel pygdal==1.10.1.0

und warten Sie, bis es abgeschlossen ist.

Danach finden Sie das Unterverzeichnis wheelhouse und es enthält Pakete mit der Erweiterung `whl`:

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

Von Radpaketen pygdaleinbauen

Die Installation von radformatierten Paketen ist viel schneller (eine Sekunde im Vergleich zu Minuten), da keine Kompilierung erforderlich ist.

Beachten Sie, dass das Verzeichnis mit den Wheel-Paketen einen beliebigen Namen haben kann. Wir verwenden nur den Namen Wheelhouse.

Aktivieren Sie zuerst virtualenv.

Stellen Sie sicher, dass Sie im Steuerhausverzeichnis beide erforderlichen Radpakete (für pygdalund numpy) haben.

Stellen Sie sicher, dass GDALinstalliert ist und die Version mit der Version von übereinstimmt pygdal.

Installieren pygdalvon Rad - Paket:

$ pip install pygdal==1.10.1.0 -f wheelhouse

Das -f Steuerhaus muss auf das Verzeichnis mit den Whl-Dateien verweisen.

Es ist keine Installation erforderlich numpy, es wird automatisch installiert.


Diese Antwort baut auf anderen tollen Antworten auf, versucht, vollständige Anweisungen für die Details zu geben, bei denen ich hängen geblieben bin, und fügt Schritte zur Verwendung des Wheel-Package-Formats zur Beschleunigung wiederholter Installationen in virtualenv hinzu.
Jan Vlcinsky

pygdalfür den Sieg!! pypi : "Virtualenv und setuptools freundliche Version von Standard-GDAL-Python-Bindungen" <3
16.

9

Ja, die folgenden Schritte vor dem Ausführen von PIP scheinen zu funktionieren:

export CPLUS_INCLUDE_PATH = / usr / include / gdal

Exportieren Sie C_INCLUDE_PATH = / usr / include / gdal


6

Das Problem bei der Installation von gdal durch den Pip ist, dass nur die Bindings abgerufen werden und nicht die gesamte Bibliothek, sodass es schwierig werden kann. Eine Möglichkeit, dies zu lösen, besteht darin, den Befehl pip zum Herunterladen zu verwenden, aber nicht zu installieren. Dann optimieren Sie den Header-Speicherort aus der Konfigurationsdatei. Dann installierst du das. meh.

Ich hatte das gleiche Problem, stellte jedoch fest, dass das Schreiben eines Fabric-Skripts zum Neukompilieren von gdal und zum Generieren der Python-Bindungen weniger Zeit in Anspruch nehmen würde. Damit erhalten Sie sogar den Vorteil von filegdb. Mach weiter und benutze das, was ich geschrieben habe, oder optimiere es nach Herzenslust.


3

Eine Weile später wird der Include-Pfad bereitgestellt, ohne dass die Pip-Installation beendet werden muss: Der Include-Pfad kann mithilfe einer Umgebungsvariablen festgelegt werden.

Angenommen, die Header befinden sich in / usr / include / gdal

export CPLUS_INCLUDE_PATH=/usr/include/gdal

bevor pip läuft.


Auf diese Weise erhalte ich "extensions / gdalconst_wrap.c: 2732: 18: schwerwiegender Fehler: gdal.h: Keine solche Datei oder kein solches Verzeichnis", obwohl gdal.h in/usr/include/gdal
anand.trex

1
Hilft stattdessen / zusätzlich die Verwendung von C_INCLUDE_PATH =?
Crischan

3

Nachdem ich nach einer Lösung gesucht habe, ist hier etwas, das für mich unter Ubuntu 14.04 funktioniert, auch innerhalb einer virtuellen Umgebung ohne Zugriff auf die Systempakete:

  • Abhängigkeiten installieren:

    sudo apt-get install libgdal-dev libgdal1h libgdal1-dev
  • Setze die Compiler Flags:

    export CFLAGS=$(gdal-config --cflags)
  • Installieren Sie die Version, die den Systembibliotheken entspricht (zum Zeitpunkt des Schreibens verwendet Ubuntu Trusty die 1.10-Header):

    pip install GDAL==1.10.0

arbeitete auch für mich am Ubuntu 16.04
Luke W


2

Ich hatte ähnliche Probleme auf einem Mac. So habe ich es gelöst:

Zunächst richte ich mit virtualenv eine virtuelle Python 2.7-Umgebung ein. Die Python-Distribution wurde in einem Verzeichnis namens "env" installiert.

Ich habe dann fink verwendet, um gdal zu installieren

fink selfupdate
fink update-all
fink install gdal

Ich habe auch gdal-dev installiert, aber dies ist möglicherweise nicht erforderlich, da es möglicherweise bereits mit gdal installiert wurde.

Ich habe die installierte Version überprüft mit:

gdal-config --version

Auf meiner Installation ergab sich das Ergebnis 1.11.1

Die fink-Installation von gdal installierte die Header-Datei cpl_port.h in / sw / include / gdal1. Überprüfen Sie Ihre eigene Installation. Ich habe dann eingegeben:

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

Das schien für mich zu funktionieren, aber ich habe die Installation noch nicht getestet.


2

Auf Fedora 24, dessen Repository GDAL 2.0.2 enthält, musste ich das Python-Paket folgendermaßen installieren:

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

2

Beim Versuch, die Python-GDAL-Bindungen auf einem Mac (OS 10.10.5) zu installieren, trat ein ähnlicher Fehler auf. Ich habe die Basis-GDAL-Software von http://www.kyngchaos.com/software/frameworks mithilfe des Downloads "Complete" installiert . Ich musste drei Umgebungsvariablen setzen.

export C_INCLUDE_PATH = / Library / Frameworks / GDAL.framework / Header export CPLUS_INCLUDE_PATH = / Library / Frameworks / GDAL.framework / Header export LIBRARY_PATH = / Library / Frameworks / GDAL.framework / Versions / Current / unix / lib

Das letzte Stück war, /Library/Frameworks/GDAL.framework/Programs zu meinem PATH hinzuzufügen.

echo 'export PATH = / Library / Frameworks / GDAL.framework / Programs: $ PATH' >> ~ / .bash_profile

Danach konnte pip GDAL für Python installieren. Hoffe das hilft.


1

Ich hatte auch Probleme damit gdal 1.10.1und habe gerade folgendes gemachtpip install --global-option=build_ext --global-option="-I/usr/include/gdal" gdal==1.10.0
Ryanjdillon

1

So beantworten Sie den virtualenv-spezifischen Aspekt der Frage:

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

Beachten Sie, dass pygdalmöglicherweise eine andere Version von GDAL erforderlich ist als im GDALPaket der Python-Bindungen.


Nachfolgend finden Sie die Informationen, die ich für die neuesten Fedora-Versionen (20 und 23) verwendet habe.

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

1

Installation über Pip mit einem einzigen Befehl

Vorausgesetzt, das GDAL-Entwicklungspaket ist installiert und die Header-Dateiversionen sind korrekt, ist der einzige Befehl zum Installieren von GDAL von PyPI-Repos wie folgt:

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

Dies setzt natürlich voraus, dass der Speicherort der Header-Dateien ist /usr/include/gdal.

Installieren Sie die aktuelle GDAL

Um GDAL mit dem obigen Befehl pip zu installieren, muss die Version der Header-Dateien der Version entsprechen, mit der pip den Build ausführt. GDAL hat eine aktualisierte Binärreferenz unter: https://trac.osgeo.org/gdal/wiki/DownloadingGdalBinaries .

So installieren Sie unter OpenSUSE

Unter dem obigen Link befindet sich eine URL, die weiter unten eingebettet ist und einen aktuellen Satz von GIS-Paketen für OpenSUSE 42.1 enthält. Http://download.opensuse.org/repositories/Application:/Geo/openSUSE_Leap_42.1/Application: Geo.repo

zypper ar -f <URL>

Ersetzen Sie durch die entsprechende Verpackung. Und wenn nicht, zyppergibt es weitere Informationen unter https://trac.osgeo.org/gdal/wiki/DownloadingGdalBinaries


1

Ich hatte das gleiche Problem unter Windows 10. Nach einigen Experimenten kam ich mit dieser Lösung.

  1. Laden Sie Python 3.6 herunter und installieren Sie es (falls nicht installiert), nachdem Sie die Umgebungsvariablen geändert haben PYTHONPATH=c:\python36 PATH=C:\python36\Scripts\;C:\python36\;%PATH%
  2. Laden Sie * .whl für die korrekte Python-Version von https://www.lfd.uci.edu/~gohlke/pythonlibs/#gdal herunter
  3. Laden Sie http://landinghub.visualstudio.com/visual-cpp-build-tools herunter und installieren Sie es
  4. pip install *.whl (* .whl von Schritt 2)

Trotzdem dachte ich, Python hätte automatisch Umgebungen installiert, aber dann habe ich Umgebungen entfernt und neu erstellt, da Sie vorgeschlagen haben, dass alles wie ein Zauber funktioniert.
Florjan

1

Wenn Sie Docker verwenden, verwenden wir unseren Container als Open-Source-Version, was die Verwendung von GDAL und Python 3 vereinfacht. Der Container erfasst die oben beschriebenen Schritte, damit Sie GDAL schnell mit Ihren Apps verwenden können.

thinkwhere / gdal-python


0

Wenn Sie eine Debian-basierte Distribution ausführen, sind die GDAL-Python-Bibliotheken über Ihren Paketmanager verfügbar und können einfach mit installiert werden

sudo apt install python-gdal oder sudo apt install python3-gdal


0

Auf Ubuntu 16.04 mit Conda im Docker Container (Jupyter Stack)

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

0

In Ubuntu eine einfachere Lösung, um das neueste GDAL für Python3 zu installieren: Installieren von Bibliotheksdateien über libgdal-devund Python-Wrapper überpython-gdal

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

für python2:

sudo apt-get install python-gdal

0

Möglicherweise treten auch Probleme mit der Speichernutzung auf.

Wenn pip install gdal==2.2.3gcc ausgeführt wird, wird es gestartet, um etwas zu kompilieren, und es erhöht die Speichernutzung.

Wenn Sie nicht genügend Speicher haben, schlägt der Compiler mit einer Meldung wie fehl

'x86_64-linux-gnu-gcc' ist mit Exit-Status 4 fehlgeschlagen

Um das Problem zu beheben, müssen Sie mehr RAM hinzufügen oder einige freigeben.


0

Dieser Ansatz hat bei mir funktioniert:

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)

Oder als Teil einer 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

Wenn Sie Travis CI verwenden und eine aktuelle Version von GDAL für Python benötigen, sehen Sie hier ein Beispiel dafür, wie ein Teil einer .travis.ymlDatei aussehen würde:

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`
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.