File di intestazione mancante nel pacchetto Python GDAL durante l'installazione tramite pip


68

Ho fatto questa domanda su Stack Overflow prima di rendermi conto che questo sito esisteva. Poiché questo sito è più appropriato, lo chiederò anche qui.

Sto cercando di installare gdal da pip pip install gdalall'interno di un ambiente virtuale (Ubuntu). Fallisce perché non riesce a trovarecpl_port.h

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

Tuttavia GDAL è installato correttamente e il file di intestazione si trova in /usr/include/gdal/cpl_port.h. C'è qualche variabile d'ambiente per GDAL che deve essere impostata affinché pip possa trovare i file di intestazione?


Ho un problema simile su Windows, installando gdal tramite pip in ambiente virtuale. ! [inserisci la descrizione dell'immagine qui ] ( i.stack.imgur.com/EVLWP.jpg )
Hayat Khan,

Risposte:


94

La risposta di selimnairb è vicina ma non avrai le intestazioni a meno che tu non abbia installato libgdal-dev:

sudo apt-get install libgdal-dev

con quello fatto,

export CPLUS_INCLUDE_PATH=/usr/include/gdal

export C_INCLUDE_PATH=/usr/include/gdal

e poi

pip install GDAL

La compilation è terminata e ho GDAL nel mio ambiente virtuale. Accidenti!

(modifica 2018) Nota: per essere sicuri di installare la versione corretta ed evitare qualsiasi problema. recuperare la versione con gdal-config --version. e poi:

pip install GDAL==version

Sembra essere l'unica soluzione che ha funzionato.
Bozdoz,

1
Ho provato questo su un altro sistema e penso che la combinazione di questa risposta più @nickves sia ciò che effettivamente fa.
Bozdoz,

Questo ha funzionato per me.
Jaranda,

1
Molto bene. Nel caso in cui la versione installata di GDAL nel sistema e nel pacchetto python differisca, non funziona. La soluzione è trovare la versione di GDAL nel sistema e istruire pip su come installare la versione del pacchetto python pertinente. Nel mio caso (Ubuntu 14.04) entrambi sono 10.0, quindi mi ha aiutato$ pip install GDAL==10.0
Jan Vlcinsky,

4
Posso confermare che questo funziona su Ubuntu 16.04 con pip install GDAL==1.10.0.
Beruic,

34

I file di intestazione non possono essere trovati per qualche motivo. Forse stai operando all'interno di un ambiente virtuale o non sono dove dovrebbero essere per qualche motivo. In ogni caso è possibile specificare le directory di inclusione durante l'installazione di gdal tramite pip.

primo download python's gdal:

pip install --no-install GDAL

nelle versioni successive di pip (> = 9.0.0) pip install --no-installnon esiste:

pip download GDAL

quindi specificare dove si trovano le intestazioni:

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

quindi installarlo:

pip install --no-download GDAL

nelle versioni successive di pip (> = 9.0.0) pip install --no-downloadnon esiste:

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

Ecco un altro modo per installare gdal python:

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

dopo quello aperto IDLE:

from osgeo import gdal

e sei a posto!


3
Ciao, grazie per la tua risposta, ma ho davvero bisogno di un modo per installare tramite pip in quanto creerò ambienti isolati usando virtualenv durante il processo di CI.
Kevin

1
qual è l'output quando esegui 'gdal-config --version' e 'gdal-config --libs'?
Nicks

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

2
@nickves Sto cercando di installare GDAL usando virtualenvwrapper in Ubuntu e quando provo la tua prima riga:, pip install --no-install GDALricevo l'errore: __main__.gdal_config_error: [Errno 2] No such file or directoryQualche idea?
theJollySin

3
Di recente mi sono divertito moltissimo a installare GDAL su OSX. Attualmente, gli ultimi collegamenti Python per GDAL dipendono dalla 2.1, ma l'ultimo GDAL disponibile in homebrew è 1.11.3 e 1.11.4 per GDAL Complete. Ho installato tramite homebrew brew install gdale ho usato una versione precedente del pacchetto GDAL Python:pip install --global-option=build_ext --global-option="-L/usr/local/include/gdal/" 'gdal==1.9.1'
TestSubject

17

Dopo aver seguito un sottoinsieme di questo consiglio, ecco come ho ottenuto l'installazione di Python GDAL 1.11.0 (la soluzione dovrebbe essere indipendente dalla versione, vedi sotto) per funzionare su Ubuntu 14.04 con pip:

Installa dipendenze:

sudo apt-get install libgdal-dev libgdal1h

pip install passando lungo il percorso include (prefisso con sudoper l'installazione a livello di sistema) e dando istruzioni a pip di installare la versione corrispondente alla versione GDAL installata dal sistema:

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

Le risposte più votate da selimnairb e Paul Whipp non hanno funzionato per me su Ubuntu 15.10 e questo ha funzionato.
rhunwicks,

1
La seconda riga ha funzionato per me dopo aver aggiunto apt i repository instabili dalla risposta di @nickves. Grazie a tutti!
Patrick Williams,

1
Grazie, questo ha funzionato per me. Anche se ho dovuto modificare leggermente mentre sto tentando di attenermi all'installazione di cartodb il più rigorosamente possibile, ho finito per usarlo come comando di installazione finale funzionante: sudo pip install --no-use-wheel -r python_requirements.txt --global-option=build_ext --global-option="-I/usr/include/gdal" python_requirements.txt specifica una versione precedente di gdal. Dubito che sarebbe importante essere onesti, ma l'intero set di installazione pip si completa correttamente. U 12.04x64
vaxhax,

12

Installazione del pacchetto Python gdalin virualenv su Linux

GDALfornisce un bel toolkit per le operazioni relative a GEO Tuttavia, installarlo su virtualenv su Linux non è cosa da poco.

Questa ricetta descrive come farlo.

Nota

qui uso lettere minuscole gdalper pacchetto Python e lettere maiuscole GDALper la libreria generale di sistema.

Requisiti

  • consentire l'utilizzo delle librerie osgeo (installate tramite gdalpacchetto Python) in virtualenv
  • consentire l'installazione su Linux Ubuntu

Metodi di installazione

Esistono diversi metodi per l'installazione. Uno richiede la compilazione e richiede qualche minuto in più.

L'altro sta usando il pacchetto ruote del pygdalpacchetto ed è molto veloce. Ad ogni modo, per creare il pacchetto ruote è necessario crearlo una volta e la creazione include comunque la fase di compilazione.

Informazioni su GDALpacchetti e versioni

GDAL è una libreria generale basata su C (++) per calcoli relativi a GEO.

GDAL le utility possono essere installate a livello di sistema, ciò che rende disponibili le librerie condivise, ma non installa il pacchetto Python stesso.

GDAL è disponibile in diverse versioni e ogni distribuzione Linux può installare di default una versione diversa.

Il pacchetto Python gdalrichiede la compilazione e non è banale da installare su sistemi basati su Linux poiché prevede che vengano impostate poche variabili ambientali. Ciò rende l'installazione in virtualenv più difficile.

Ogni gdalversione potrebbe assumere una versione diversa GDALe l'installazione non riuscirà se la versione prevista non è presente nel sistema.

Il pacchetto Python pygdalè un'alternativa a gdal, che installa esattamente le stesse cose di gdal, ma lo fa in modo molto più intuitivo.

pygdalviene nelle versioni che riflettono la GDALversione relativa . Quindi con la GDAL versione 1.10.1 nel sistema devi installare la pygdalversione 1.10.1.

Il pacchetto Python gdal(così come pygdal) usa il pacchetto root python chiamato osgeoe ha un insieme di sottomoduli, uno dei quali osgeo.gdal.

Se necessario, è GDALpossibile installare e utilizzare diverse versioni predefinite di . Questo non rientra nell'ambito di questa descrizione.

I pacchetti ruote possono essere compilati in modo incrociato, anche questo non rientra nell'ambito di applicazione.

Installazione GDALnel sistema

Poiché è pygdalnecessario GDALche siano presenti librerie condivise, è necessario installarle prima.

Supponendo che GDALnon sia ancora installato, la chiamata gdal-configsi lamenterà e ti darà un suggerimento su come seguire:

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

Segui il suggerimento e installalo:

$ sudo apt-get install libgdal-dev

Ogni distribuzione può utilizzare una versione diversa di GDAL. Per scoprire quale utilizziamo:

$ gdal-config --version
1.10.1

Ora sai, GDALè installato e la versione è 1.10.1 (la versione può variare).

Installa pygdaldal pacchetto sorgente (richiede la compilazione)

Attualmente pygdalviene fornito solo nel pacchetto tar.gz, che contiene le origini del pacchetto e richiede la compilazione.

Supponendo, la versione di GDALis 1.10.1e che il nostro virtualenv sia già attivato:

$ pip install pygdal==1.10.1

Potrebbe volerci un po 'per completare, se ha bisogno di intorpidimento, che potrebbe anche richiedere un po' di compilazione. Aspetta.

Verifica, è installato:

$ pip freeze|grep pygdal
pygdal==1.10.1.0

Da ora in poi, puoi usare il pacchetto osgeo nel tuo codice Python come preferisci esattamente come se lo installassi dal gdalpacchetto Python.

Creazione del pacchetto ruote per pygdal

Si noti che i pacchetti di ruote devono essere creati esattamente per la stessa architettura, vale a dire devono corrispondere a:

  • Architettura della CPU
  • SO (Linux / Windows)

Nel nostro caso, deve anche corrispondere alla versione di GDALinstallata.

I seguenti passaggi possono essere eseguiti in virtualenv o meno, come preferisci.

Innanzitutto, assicurati che il pacchetto ruote sia installato:

$ pip install wheel

Supponendo che tu abbia GDALinstallato e abbia la versione 1.10.1:

$ pip wheel pygdal==1.10.1.0

e aspetta, fino al completamento.

Successivamente, troverai la timoneria della sottodirectory e conterrà i pacchetti con estensione "whl":

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

Installa pygdalda pacchetti ruote

L'installazione da pacchetti formattati con ruote è molto più veloce (un secondo rispetto ai minuti), in quanto non richiede compilazione.

Nota che quella directory con i pacchetti di ruote può avere qualsiasi nome, useremo solo il nome della timoneria.

Attiva prima virtualenv.

Assicurati di avere nella directory timoneria entrambi i pacchetti ruote richiesti (per pygdale numpy).

Assicurarsi che GDALsia installato e che la versione corrisponda alla versione di pygdal.

Installa pygdaldal pacchetto ruote:

$ pip install pygdal==1.10.1.0 -f wheelhouse

La timoneria -f deve puntare alla directory con i file whl.

Non è necessario installarlo numpy, viene installato automaticamente.


questa risposta si basa su altre grandi risposte qui, cerca di dare istruzioni complete per i dettagli, dove mi sono bloccato e aggiunge passaggi per l'utilizzo del formato del pacchetto ruote per velocizzare installazioni ripetute in virtualenv.
Jan Vlcinsky,

pygdalper la vittoria!! pypi : "Virtualenv e setuptools versione amichevole degli attacchi python GDAL standard" <3
gisdude

9

Sì, prima di eseguire PIP sembra che:

export CPLUS_INCLUDE_PATH = / usr / include / gdal

export C_INCLUDE_PATH = / usr / include / gdal


6

Il problema con l'installazione di pip su gdal è che ottiene solo i collegamenti, non l'intera libreria, quindi può essere complicato. Un modo per risolverlo è utilizzare il comando pip per scaricare, ma non installare. Quindi modificare la posizione dell'intestazione dal file di configurazione. Quindi lo installi. meh.

Stavo avendo lo stesso problema, ma mi sono reso conto che scrivere uno script di fabric per ricompilare gdal e generare i binding di Python avrebbe richiesto meno tempo. Ottieni anche il vantaggio di filegdb con quello. Vai avanti e usa l'essenza che ho scritto o modificalo in base ai tuoi cuori.


3

Qualche tempo dopo, questo fornisce il percorso di inclusione senza dover uscire dall'installazione pip: è possibile impostare il percorso di inclusione usando una variabile di ambiente.

Supponendo che le intestazioni siano in / usr / include / gdal, rilascia un

export CPLUS_INCLUDE_PATH=/usr/include/gdal

prima di eseguire pip.


Usando questo, ottengo "extensions / gdalconst_wrap.c: 2732: 18: errore fatale: gdal.h: nessun file o directory simile" anche se gdal.h è presente in/usr/include/gdal
anand.trex

1
L'uso di C_INCLUDE_PATH invece / aiuta ulteriormente =?
Crischan,

3

Dopo aver cercato una soluzione a destra ea sinistra, ecco qualcosa che funziona per me su Ubuntu 14.04, anche da un ambiente virtuale senza accesso ai pacchetti di sistema:

  • Installa dipendenze:

    sudo apt-get install libgdal-dev libgdal1h libgdal1-dev
  • Imposta i flag del compilatore:

    export CFLAGS=$(gdal-config --cflags)
  • Installa la versione corrispondente alle librerie di sistema (al momento della stesura di Ubuntu Trusty utilizza le intestazioni 1.10):

    pip install GDAL==1.10.0

ha anche lavorato per me su Ubuntu 16.04
Luke W,


2

Avevo problemi simili su un Mac. Ecco come l'ho risolto:

Innanzitutto, ho creato un ambiente virtuale Python 2.7 usando virtualenv. La distribuzione Python è stata installata in una directory chiamata 'env'.

Ho quindi usato Fink per installare gdal

fink selfupdate
fink update-all
fink install gdal

Ho anche installato gdal-dev ma questo potrebbe non essere stato richiesto poiché potrebbe essere già stato installato con gdal.

Ho verificato la versione installata usando:

gdal-config --version

Sulla mia installazione, ha prodotto il risultato 1.11.1

L'installazione fink di gdal ha installato il file di intestazione cpl_port.h in / sw / include / gdal1. Controlla la tua installazione. Ho quindi inserito:

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

Sembrava funzionare per me, ma non ho ancora testato l'installazione.


2

Su Fedora 24 che ha GDAL 2.0.2 nei suoi repository, ho dovuto installare il pacchetto Python in questo modo:

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

2

Stavo ottenendo un errore simile durante il tentativo di installare i collegamenti GDAL python su un mac (OS 10.10.5). Ho installato il software GDAL di base da http://www.kyngchaos.com/software/frameworks utilizzando il download "Completo". Ho dovuto impostare tre variabili di ambiente.

export C_INCLUDE_PATH = / Library / Frameworks / GDAL.framework / Headers export CPLUS_INCLUDE_PATH = / Library / Frameworks / GDAL.framework / Headers export LIBRARY_PATH = / Library / Frameworks / GDAL.framework / Versioni / Current / unix / lib

L'ultimo pezzo è stato aggiungere /Library/Frameworks/GDAL.framework/Programs al mio PERCORSO.

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

Successivamente quel pip è stato in grado di installare GDAL per Python. Spero che sia di aiuto.


1

Anch'io ho avuto problemi con gdal 1.10.1, e ho appena fatto la seguentepip install --global-option=build_ext --global-option="-I/usr/include/gdal" gdal==1.10.0
Ryandillon,

1

Per rispondere all'aspetto specifico di virtualenv della domanda:

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

Fai attenzione che pygdalpotrebbe richiedere una versione diversa di GDAL, rispetto a ciò che GDALrichiede il pacchetto di collegamenti python.


Di seguito è quello che ho usato per ottenerlo nelle recenti versioni di Fedora (20 e 23).

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

1

Installazione tramite Pip con comando singolo

Supponendo che il pacchetto di sviluppo GDAL sia installato e che le versioni del file di intestazione siano corrette, l'unico comando necessario per installare GDAL dai repository PyPI è il seguente:

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

Ciò presuppone ovviamente che la posizione dei file di intestazione sia /usr/include/gdal.

Installa GDAL aggiornato

Per installare GDAL con il comando pip sopra, la versione dei file di intestazione deve essere simile alla versione che pip farà la build. GDAL ha un riferimento binario aggiornato su: https://trac.osgeo.org/gdal/wiki/DownloadingGdalBinaries .

Come installare su OpenSUSE

Seguendo il link sopra, c'è un URL incorporato più in basso verso un set aggiornato di pacchetti GIS per OpenSUSE 42.1 http://download.opensuse.org/repositories/Application:/Geo/openSUSE_Leap_42.1/Application: Geo.repo

zypper ar -f <URL>

Sostituire con il pacchetto appropriato. E se non si usano zypperci sono maggiori informazioni su https://trac.osgeo.org/gdal/wiki/DownloadingGdalBinaries


1

Ho avuto lo stesso problema su Windows 10. Dopo alcuni esperimenti sono arrivato con questa soluzione.

  1. Scarica e installa Python 3.6 (se non installato) dopo l'installazione modifica le variabili di ambiente PYTHONPATH=c:\python36 PATH=C:\python36\Scripts\;C:\python36\;%PATH%
  2. Scarica * .whl per la corretta versione di Python da https://www.lfd.uci.edu/~gohlke/pythonlibs/#gdal
  3. Scarica e installa http://landinghub.visualstudio.com/visual-cpp-build-tools
  4. pip install *.whl (* .whl dal passaggio 2)

grazie, ho pensato che Python abbia installato automaticamente gli ambienti, ma poi ho rimosso e ricreato gli ambienti come hai suggerito che tutto funzioni come un fascino.
Florjan,

1

Se stai usando Docker apriamo il nostro contenitore, che semplifica l'utilizzo di GDAL e Python 3. Il contenitore acquisisce i passaggi sopra descritti per consentirti di utilizzare rapidamente GDAL con le tue app.

thinkwhere / GDAL-python


1

Questo approccio ha funzionato per me:

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)

O come parte di un 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

Se stai eseguendo una distro basata su Debian, le librerie python GDAL sono disponibili tramite il tuo gestore pacchetti e possono essere semplicemente installate con

sudo apt install python-gdal o sudo apt install python3-gdal


0

Su Ubuntu 16.04 con conda nel contenitore docker (stack 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

In Ubuntu, una soluzione più semplice per installare l'ultima gdal per python3: installa i file di libreria tramite libgdal-deve python wrapper tramitepython-gdal

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

per python2:

sudo apt-get install python-gdal

0

Potresti anche riscontrare problemi con l'utilizzo della memoria.

Quando si esegue pip install gdal==2.2.3gcc viene avviato per compilare qualcosa e aumenta l'utilizzo della memoria.

Se non si dispone di memoria sufficiente, il compilatore ha esito negativo, con un messaggio simile

'x86_64-linux-gnu-gcc' non è riuscito con lo stato di uscita 4

Per risolverlo, devi aggiungere più ram o liberarne un po '.


0

Se stai usando Travis CI e hai bisogno di una versione recente di GDAL per Python, ecco un esempio di come .travis.ymlsarebbe una parte di un file:

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`
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.