Falta el archivo de encabezado del paquete Python GDAL cuando se instala a través de pip

68

Hice esta pregunta en Stack Overflow antes de darme cuenta de que este sitio existía. Como este sitio es más apropiado, lo preguntaré aquí también.

Estoy tratando de instalar gdal desde pip pip install gdaldentro de un entorno virtual (Ubuntu). Falla porque no puede encontrarcpl_port.h

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

Sin embargo, GDAL está instalado correctamente y el archivo de encabezado se encuentra en /usr/include/gdal/cpl_port.h. ¿Hay alguna variable de entorno para GDAL que deba establecerse para que pip encuentre los archivos de encabezado?

Kevin
fuente
Tengo un problema similar en Windows, instalando gdal a través de pip en virtual env. ! [ingrese la descripción de la imagen aquí ] ( i.stack.imgur.com/EVLWP.jpg )
Hayat Khan

Respuestas:

94

La respuesta de selimnairb es cercana pero no tendrá los encabezados a menos que haya instalado libgdal-dev:

sudo apt-get install libgdal-dev

con eso hecho

export CPLUS_INCLUDE_PATH=/usr/include/gdal

export C_INCLUDE_PATH=/usr/include/gdal

y entonces

pip install GDAL

La compilación se completó y tengo GDAL en mi entorno virtual. ¡Uf!

(editar 2018) Nota: para asegurarse de instalar la versión correcta y evitar cualquier problema. recuperar la versión con gdal-config --version. y entonces:

pip install GDAL==version
Paul Whipp
fuente
Parece ser la única solución que funcionó.
bozdoz
1
Intenté esto en otro sistema, y ​​creo que la combinación de esta respuesta plus @nickves es lo que realmente hace.
bozdoz
Esto funcionó para mí.
jaranda
1
Muy bien. En caso de que la versión instalada de GDAL en el paquete de sistema y python difiera, falla. La solución es encontrar la versión de GDAL en el sistema e indicar a pip que instale la versión relevante del paquete de Python. En mi caso (Ubuntu 14.04) ambos son 10.0, por lo que ayudó$ pip install GDAL==10.0
Jan Vlcinsky
44
Puedo confirmar que esto funciona en Ubuntu 16.04 con pip install GDAL==1.10.0.
beruic
34

Los archivos de encabezado no se pueden encontrar por alguna razón. Tal vez usted está operando dentro de un entorno virtual o no están donde deberían estar por alguna razón. En cualquier caso, puede especificar los directorios de inclusión al instalar gdal a través de pip.

primera descarga del gdal de python:

pip install --no-install GDAL

en versiones posteriores de pip (> = 9.0.0) pip install --no-installno existe:

pip download GDAL

luego especifique dónde están los encabezados:

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

luego instálalo:

pip install --no-download GDAL

en versiones posteriores de pip (> = 9.0.0) pip install --no-downloadno existe:

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

Aquí hay otra forma de instalar gdal python:

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

después de eso abra IDLE:

from osgeo import gdal

y estás listo para ir!

nickves
fuente
3
Hola, gracias por tu respuesta, pero realmente necesito una forma de instalar a través de pip, ya que crearé entornos aislados usando virtualenv durante el proceso de CI.
Kevin
1
¿Cuál es el resultado cuando ejecuta 'gdal-config --version' y 'gdal-config --libs'?
nickves
GDAL v1.9.1. gdal-config --libs -> -L/usr/lib -lgdal
Kevin
2
@nickves Estoy tratando de instalar GDAL usando virtualenvwrapper en Ubuntu, y cuando intento su primera línea: aparece pip install --no-install GDALel error: ¿ __main__.gdal_config_error: [Errno 2] No such file or directoryAlguna idea?
theJollySin
3
Recientemente tuve un tiempo maravilloso instalando GDAL en OSX. Actualmente, los últimos enlaces de Python para GDAL dependen de 2.1, pero el último GDAL disponible en homebrew es 1.11.3 y 1.11.4 para GDAL Complete. Lo instalé a través de homebrew, brew install gdaly usé una versión anterior del paquete GDAL Python:pip install --global-option=build_ext --global-option="-L/usr/local/include/gdal/" 'gdal==1.9.1'
TestSubject,
17

Después de seguir un subconjunto de estos consejos, así es como obtuve la instalación de Python GDAL 1.11.0 (la solución debería ser independiente de la versión, ver más abajo) para trabajar en Ubuntu 14.04 con pip:

Instalar dependencias:

sudo apt-get install libgdal-dev libgdal1h

pip install pasando la ruta de inclusión (prefijo con sudopara la instalación en todo el sistema) e indicando a pip que instale la versión que coincida con la versión GDAL instalada del sistema:

pip install --global-option=build_ext --global-option="-I/usr/include/gdal" GDAL==\`gdal-config --version\`
dennisobrien
fuente
Las respuestas mejor calificadas de selimnairb y Paul Whipp no ​​funcionaron para mí en Ubuntu 15.10 y este sí.
rhunwicks
1
La segunda línea funcionó para mí después de agregar apt los repositorios inestables de @nickves answer. ¡Gracias a todos!
Patrick Williams
1
Gracias, esto terminó funcionando para mí. Aunque tuve que modificar un poco, ya que intento mantener la instalación de cartodb lo más estrictamente posible, terminé usando esto como mi último comando de instalación de trabajo: sudo pip install --no-use-wheel -r python_requirements.txt --global-option=build_ext --global-option="-I/usr/include/gdal" python_requirements.txt especifica una versión anterior de gdal. Dudo que sea honesto, pero todo el conjunto de instalación de pip se completa con éxito. U 12.04x64
vaxhax
12

Instalar el paquete Python gdalen virualenv en Linux

GDALproporciona un buen conjunto de herramientas para operaciones relacionadas con GEO. Sin embargo, instalarlo en virtualenv en Linux no es una tarea trivial.

Esta receta describe cómo hacerlo.

Nota

Aquí uso minúsculas gdalpara el paquete Python y mayúsculas GDALpara la biblioteca general del sistema.

Requisitos

  • permitir el uso de bibliotecas osgeo (instaladas a través del gdalpaquete Python) en virtualenv
  • permitir la instalación en Linux Ubuntu

Métodos de instalación

Existen múltiples métodos para la instalación. Uno requiere compilación y toma unos minutos más.

El otro está usando el paquete de la rueda del pygdalpaquete y es muy rápido. De todos modos, para crear el paquete de rueda, uno debe crearlo una vez y la creación incluye el paso de compilación de todos modos.

Sobre GDALpaquetes y versiones

GDAL es una biblioteca general basada en C (++) para cálculos relacionados con GEO.

GDAL Las utilidades se pueden instalar en todo el sistema, lo que hace que las bibliotecas compartidas estén disponibles, pero no instala el paquete Python.

GDAL viene en diferentes versiones y cada distribución de Linux puede instalar por defecto una versión diferente.

El paquete Python gdalrequiere compilación y no es trivial de instalar en sistemas basados ​​en Linux, ya que espera que se establezcan pocas variables ambientales. Esto hace que la instalación en virtualenv sea más difícil.

Cada gdalversión puede asumir una versión diferente GDALy fallará la instalación si la versión esperada no está presente en el sistema.

El paquete Python pygdales una alternativa gdal, que instala exactamente las mismas cosas que gdal, pero lo hace de una manera mucho más amigable.

pygdalviene en versiones que reflejan la GDALversión relacionada . Entonces, teniendo la GDAL versión 1.10.1 en el sistema, deberá instalar la pygdalversión 1.10.1.

El paquete Python gdal(así como también pygdal) usa el paquete raíz de Python llamado osgeoy tiene un conjunto de submódulos, uno de ellos osgeo.gdal.

Si es necesario, GDALse pueden instalar y usar versiones distintas de las predeterminadas . Esto está fuera del alcance de esta descripción.

Los paquetes de ruedas pueden compilarse de forma cruzada, esto también está fuera de alcance

Instalando GDALen el sistema

Como pygdalrequiere que GDALlas bibliotecas compartidas estén presentes, primero debemos instalarlas.

Suponiendo GDALque aún no está instalado, las llamadas gdal-configse quejarán y le darán una pista sobre cómo seguir:

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

Sigue la pista e instálala:

$ sudo apt-get install libgdal-dev

Cada distribución puede usar una versión diferente de GDAL. Para saber cuál usamos:

$ gdal-config --version
1.10.1

Ahora ya sabes, GDALestá instalado y la versión es 1.10.1 (la versión puede variar).

Instalar pygdaldesde el paquete fuente (requiere compilación)

Actualmente pygdalsolo se proporciona en el paquete tar.gz, que contiene fuentes de paquetes y requiere compilación.

Suponiendo, la versión de GDALes 1.10.1y que nuestro virtualenv ya está activado:

$ pip install pygdal==1.10.1

Puede tardar un tiempo en completarse, si necesita numpy, lo que también puede requerir cierta compilación. Solo espera

Comprueba, está instalado:

$ pip freeze|grep pygdal
pygdal==1.10.1.0

De ahora en adelante, puede usar el paquete osgeo en su código Python como lo desee exactamente de la misma manera que si lo instalara con el gdalpaquete Python.

Crear paquete de ruedas para pygdal

Tenga en cuenta que los paquetes de rueda deben crearse exactamente para la misma arquitectura, es decir, deben coincidir:

  • Arquitectura de la CPU
  • SO (Linux / Windows)

En nuestro caso, también debe coincidir con la versión de GDALinstalado.

Los siguientes pasos se pueden hacer en virtualenv o no, como lo desee.

Primero, asegúrese de que el paquete de la rueda esté instalado:

$ pip install wheel

Suponiendo que ha GDALinstalado y tiene la versión 1.10.1:

$ pip wheel pygdal==1.10.1.0

y espera, hasta que se complete.

Después de esto, encontrará la caseta del subdirectorio y contendrá paquetes con la extensión `whl`:

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

Instalar pygdaldesde paquetes de ruedas

La instalación desde paquetes con formato de rueda es mucho más rápida (un segundo en comparación con minutos), ya que no requiere compilación.

Tenga en cuenta que ese directorio con paquetes de ruedas puede tener cualquier nombre, usaremos solo el nombre de la timonera.

Active virtualenv primero.

Asegúrese de tener en el directorio de la timonera los dos paquetes de ruedas necesarios (para pygdaly numpy)

Asegúrese de que GDALesté instalado y la versión coincida con la versión de pygdal.

Instalar pygdaldesde el paquete de la rueda:

$ pip install pygdal==1.10.1.0 -f wheelhouse

La timonera -f apuntará al directorio con archivos whl.

No es necesario instalarlo numpy, se instala automáticamente.

Jan Vlcinsky
fuente
esta respuesta se basa en otras excelentes respuestas aquí, trata de dar instrucciones completas para los detalles, donde me quedé atrapado y agrega pasos para usar el formato de paquete de rueda para acelerar las instalaciones repetidas en virtualenv.
Jan Vlcinsky
pygdal¡¡por la victoria!! pypi : "Virtualenv y setuptools versión amigable de enlaces estándar de Python GDAL" <3
Gisdude
9

Sí, hacer lo siguiente antes de ejecutar PIP parece funcionar:

export CPLUS_INCLUDE_PATH = / usr / include / gdal

exportar C_INCLUDE_PATH = / usr / include / gdal

selimnairb
fuente
6

El problema con el gip de instalación de pip es que solo obtiene los enlaces, no toda la biblioteca, por lo que puede ser complicado. Una forma de resolverlo es usar el comando pip para descargar, pero no instalar. Luego modifica la ubicación del encabezado desde el archivo de configuración. Luego pip instalar eso. meh

Estaba teniendo el mismo problema, pero me di cuenta de que escribir un script de tela para recompilar gdal y generar los enlaces de Python iba a tomar menos tiempo. Incluso obtienes el beneficio de filegdb con eso. Siga adelante y use lo que escribí o modifíquelo a su gusto.

Ragi Yaser Burhum
fuente
3

Un tiempo después, esto proporciona la ruta de inclusión sin tener que abandonar la instalación de pip: se puede establecer la ruta de inclusión utilizando una variable de entorno.

Suponiendo que los encabezados están en / usr / include / gdal, emita un

export CPLUS_INCLUDE_PATH=/usr/include/gdal

antes de correr pip.

Crischan
fuente
Al usar esto, obtengo "extensiones / gdalconst_wrap.c: 2732: 18: error fatal: gdal.h: No existe tal archivo o directorio" a pesar de que gdal.h está presente en/usr/include/gdal
anand.trex
1
¿Usar C_INCLUDE_PATH en su lugar / además ayuda =?
Crischan
3

Después de buscar una solución a la derecha y a la izquierda, aquí hay algo que funciona para mí en Ubuntu 14.04, incluso desde dentro de un virtualenv sin acceso a los paquetes del sistema:

  • Instalar dependencias:

    sudo apt-get install libgdal-dev libgdal1h libgdal1-dev
  • Establecer las banderas del compilador:

    export CFLAGS=$(gdal-config --cflags)
  • Instale la versión correspondiente a las bibliotecas del sistema (al momento de escribir Ubuntu Trusty está usando los encabezados 1.10):

    pip install GDAL==1.10.0
FX
fuente
también funcionó para mí en ubuntu 16.04
Luke W
2

Ahora puede usar la versión amigable de virtualenv y setuptools de pygdal de enlaces estándar de Python GDAL .

drnextgis
fuente
2

Estaba teniendo problemas similares en una Mac. Así es como lo resolví:

En primer lugar, configuré un entorno virtual Python 2.7 usando virtualenv. La distribución de Python se instaló en un directorio llamado 'env'.

Luego usé fink para instalar gdal

fink selfupdate
fink update-all
fink install gdal

También instalé gdal-dev, pero es posible que esto no haya sido necesario, ya que podría haber sido instalado con gdal.

Verifiqué la versión instalada usando:

gdal-config --version

En mi instalación, produjo el resultado 1.11.1

La instalación fink de gdal instaló el archivo de encabezado cpl_port.h en / sw / include / gdal1. Comprueba tu propia instalación. Entonces entré:

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

Eso pareció funcionar para mí, pero aún no he probado la instalación.

usuario1718097
fuente
2

En Fedora 24 que tiene GDAL 2.0.2 en sus repositorios, tuve que instalar el paquete Python de esta manera:

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

Recibí un error similar al intentar instalar los enlaces de Python GDAL en una Mac (OS 10.10.5). Instalé el software GDAL base de http://www.kyngchaos.com/software/frameworks usando la descarga "Completa". Tuve que establecer tres variables de entorno.

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

La pieza final fue agregar /Library/Frameworks/GDAL.framework/Programs a mi RUTA.

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

Después de eso, pip pudo instalar GDAL para python. Espero que esto ayude.

Gary Kahn
fuente
1

Estos paquetes gdal 0.10.1 funcionan bien para Ubuntu 12.04: https://launchpad.net/~ubuntugis/+archive/ubuntu/ubuntugis-unstable/+sourcepub/4353415/+listing-archive-extra

Paquetes gdal 0.10.1 para otra versión de ubuntu: https://launchpad.net/~ubuntugis/+archive/ubuntu/ubuntugis-unstable/+packages?field.name_filter=gdal&field.status_filter=published&field.series_filter=

signo
fuente
También tuve problemas gdal 1.10.1, y acabo de hacer lo siguientepip install --global-option=build_ext --global-option="-I/usr/include/gdal" gdal==1.10.0
ryanjdillon
1

Para responder al aspecto virtualenv específico de la pregunta:

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

Tenga en cuenta que pygdalpuede requerir una versión diferente de GDAL, en comparación con lo que GDALrequiere el paquete de enlaces de python.


A continuación se muestra lo que solía obtener en versiones recientes de Fedora (20 y 23).

CPPFLAGS=-I/usr/include/gdal pip install gdal
Kevin
fuente
1

Instalación a través de Pip con un solo comando

Suponiendo que el paquete de desarrollo GDAL está instalado y las versiones del archivo de encabezado son correctas, el único comando necesario para instalar GDAL desde los repositorios de PyPI es el siguiente:

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

Obviamente, esto supone que la ubicación de los archivos de encabezado es /usr/include/gdal.

Instalar GDAL actualizado

Para instalar GDAL con el comando pip anterior, la versión de los archivos de encabezado debe ser similar a la versión que pip realizará la compilación. GDAL tiene una referencia binaria actualizada en: https://trac.osgeo.org/gdal/wiki/DownloadingGdalBinaries .

Cómo instalar en OpenSUSE

Siguiendo el enlace anterior, hay una URL incrustada que apunta hacia abajo a un conjunto actualizado de paquetes SIG para OpenSUSE 42.1 http://download.opensuse.org/repositories/Application:/Geo/openSUSE_Leap_42.1/Application: Geo.repo

zypper ar -f <URL>

Reemplace con el paquete apropiado. Y si no lo usa, zypperhay más información en https://trac.osgeo.org/gdal/wiki/DownloadingGdalBinaries

DanCat
fuente
1

He tenido el mismo problema en Windows 10. Después de algunos experimentos, vine con esta solución.

  1. Descargue e instale Python 3.6 (si no está instalado) después de la instalación, modifique las variables de entorno PYTHONPATH=c:\python36 PATH=C:\python36\Scripts\;C:\python36\;%PATH%
  2. Descargue * .whl para obtener la versión correcta de Python desde https://www.lfd.uci.edu/~gohlke/pythonlibs/#gdal
  3. Descargue e instale http://landinghub.visualstudio.com/visual-cpp-build-tools
  4. pip install *.whl (* .whl del paso 2)
zimirrr
fuente
Gracias, pensé que Python había instalado entornos automáticamente, pero luego eliminé y recreé entornos, ya que sugirió que todo funciona a las mil maravillas.
Florjan
1

Si está usando Docker, abrimos nuestro contenedor, que simplifica el uso de GDAL y Python 3. El contenedor captura los pasos descritos anteriormente para permitirle usar rápidamente GDAL con sus aplicaciones.

thinkwhere / gdal-python

Iain Hunter
fuente
1

Este enfoque funcionó para mí:

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 como parte de 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)
Ivan Kovtun
fuente
0

Si está ejecutando una distribución basada en Debian, las bibliotecas Python GDAL están disponibles a través de su administrador de paquetes y se pueden instalar simplemente con

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

Alex McVittie
fuente
0

En Ubuntu 16.04 con conda en el contenedor docker (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
Luke W
fuente
0

En ubuntu, una solución más simple para instalar el último gdal para python3: instalar archivos de biblioteca a través de libgdal-devy python wrapper a través depython-gdal

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

para python2:

sudo apt-get install python-gdal
Beahacker
fuente
0

También puede encontrar problemas con el uso de la memoria.

Cuando se ejecuta pip install gdal==2.2.3gcc se inicia para compilar algo y aumenta el uso de memoria.

Si no tiene suficiente memoria, el compilador falla, con un mensaje como

'x86_64-linux-gnu-gcc' falló con el estado de salida 4

Para solucionarlo, debe agregar más ram o liberar algunos.

Yvain
fuente
0

Si está utilizando Travis CI y necesita una versión reciente de GDAL para Python, aquí hay un ejemplo de cómo .travis.ymlse vería una parte de un archivo:

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`
Mike T
fuente