Pacote Python GDAL ausente no arquivo de cabeçalho ao instalar via pip

68

Eu fiz essa pergunta no Stack Overflow antes de perceber que esse site existia. Como este site é mais apropriado, vou pedir aqui também.

Estou tentando instalar o gdal do pip pip install gdaldentro de um ambiente virtual (Ubuntu). Falha porque não consegue encontrarcpl_port.h

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

No entanto, o GDAL está instalado corretamente e o arquivo de cabeçalho está localizado em /usr/include/gdal/cpl_port.h. Existe alguma variável de ambiente para GDAL que precisa ser definida para que o pip encontre os arquivos de cabeçalho?

Kevin
fonte
Eu tenho um problema semelhante no Windows, instalando o gdal via pip no ambiente virtual. ! [insira a descrição da imagem aqui ] ( i.stack.imgur.com/EVLWP.jpg )
Hayat Khan

Respostas:

94

A resposta do selimnairb está próxima, mas você não terá os cabeçalhos, a menos que tenha instalado o libgdal-dev:

sudo apt-get install libgdal-dev

com isso feito,

export CPLUS_INCLUDE_PATH=/usr/include/gdal

export C_INCLUDE_PATH=/usr/include/gdal

e depois

pip install GDAL

A compilação foi concluída e eu tenho o GDAL no meu ambiente virtual. Ufa!

(editar 2018) Nota: Certifique-se de instalar a versão correta e evitar qualquer problema. recupere a versão com gdal-config --version. e depois:

pip install GDAL==version
Paul Whipp
fonte
Parece ser a única solução que funcionou.
bozdoz
11
Tentei isso em outro sistema, e acho que a combinação dessa resposta mais @nickves é o que realmente faz.
bozdoz
Isso funcionou para mim.
Jaranda
11
Muito bom. Caso a versão instalada do GDAL no sistema e no pacote python seja diferente, ela falhará. A solução é encontrar a versão do GDAL no sistema e instruir o pip a instalar a versão relevante do pacote python. No meu caso (Ubuntu 14.04), ambos são 10.0, por isso ajudou$ pip install GDAL==10.0
Jan Vlcinsky
4
Posso confirmar que isso funciona no Ubuntu 16.04 com pip install GDAL==1.10.0.
beruic 11/08/16
34

Os arquivos de cabeçalho não podem ser encontrados por algum motivo. Talvez você esteja operando dentro de um ambiente virtual ou eles não estejam onde deveriam estar por algum motivo. Em qualquer caso, você pode especificar os diretórios de inclusão ao instalar o gdal via pip.

primeiro download gdal do python:

pip install --no-install GDAL

nas versões posteriores do pip (> = 9.0.0) pip install --no-installnão existe:

pip download GDAL

especifique onde estão os cabeçalhos:

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

instale-o:

pip install --no-download GDAL

nas versões posteriores do pip (> = 9.0.0) pip install --no-downloadnão existe:

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

Aqui está outra maneira de instalar o gdal python:

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

depois que aberto IDLE:

from osgeo import gdal

e você está pronto para ir!

nickves
fonte
3
Oi, obrigado por você responder, mas eu realmente preciso de uma maneira de instalar via pip, pois vou criar ambientes isolados usando virtualenv durante o processo de IC.
kevin
11
qual é a saída quando você executa 'gdal-config --version' e 'gdal-config --libs'?
91112 nickves
GDAL v1.9.1. gdal-config --libs -> -L/usr/lib -lgdal
kevin
2
@nickves Estou tentando instalar o GDAL usando o virtualenvwrapper no Ubuntu, e quando tento sua primeira linha:, pip install --no-install GDALrecebo o erro: __main__.gdal_config_error: [Errno 2] No such file or directoryAlguma idéia?
theJollySin 23/03
3
Recentemente, tive um tempo maravilhoso instalando o GDAL no OSX. Atualmente, as ligações Python mais recentes para o GDAL dependem do 2.1, mas o GDAL disponível mais recente no homebrew é 1.11.3 e 1.11.4 para o GDAL Complete. Eu instalei via homebrew brew install gdalpip install --global-option=build_ext --global-option="-L/usr/local/include/gdal/" 'gdal==1.9.1'
,,
17

Depois de seguir um subconjunto deste conselho, foi assim que consegui instalar o Python GDAL 1.11.0 (a solução deve ser independente da versão, veja abaixo) para funcionar no Ubuntu 14.04 com pip:

Instale dependências:

sudo apt-get install libgdal-dev libgdal1h

instalação do pip, transmitindo o caminho de inclusão (prefixo sudopara instalação em todo o sistema) e instruindo o pip a instalar a versão correspondente à versão GDAL do sistema instalada:

pip install --global-option=build_ext --global-option="-I/usr/include/gdal" GDAL==\`gdal-config --version\`
dennisobrien
fonte
As respostas mais bem classificadas de selimnairb e Paul Whipp não funcionaram para mim no Ubuntu 15.10 e esta funcionou.
rhunwicks
11
A segunda linha funcionou para mim depois de adicionar o repositório instável da resposta @nickves do apt. Obrigado a todos!
Patrick Williams
11
Obrigado, isso acabou funcionando para mim. Embora eu tenha que modificar um pouco enquanto estou tentando manter a instalação do cartodb o mais estritamente possível, acabei usando isso como meu comando de instalação final: sudo pip install --no-use-wheel -r python_requirements.txt --global-option=build_ext --global-option="-I/usr/include/gdal" python_requirements.txt especifica uma versão mais antiga do gdal. Duvido que seja importante para ser honesto, mas todo o conjunto de instalação do pip é concluído com êxito. U 12.04x64
vaxhax
12

Instalando o pacote Python gdalno virualenv no Linux

GDALfornece um bom conjunto de ferramentas para operações relacionadas ao GEO. No entanto, instalá-lo no virtualenv no Linux não é tarefa trivial.

Esta receita descreve como fazer isso.

Nota

aqui eu uso letras minúsculas gdalpara o pacote Python e maiúsculas GDALpara a biblioteca geral do sistema.

Exigências

  • permite o uso de bibliotecas osgeo (instaladas via gdalpacote Python) no virtualenv
  • permitir a instalação no Linux Ubuntu

Métodos de instalação

Existem vários métodos para instalação. Um requer compilação e leva mais alguns minutos.

O outro está usando o pacote de rodas pygdale é muito rápido. De qualquer forma, para criar o pacote wheel, é necessário criá-lo uma vez e a criação inclui a etapa de compilação de qualquer maneira.

Sobre GDALpacotes e versões

GDAL é uma biblioteca geral baseada em C (++) para cálculos relacionados ao GEO.

GDAL Os utilitários podem ser instalados em todo o sistema, o que disponibiliza bibliotecas compartilhadas, mas não instala o próprio pacote Python.

GDAL vem em versões diferentes e cada distribuição Linux pode, por padrão, instalar uma versão diferente.

O pacote Python gdalrequer compilação e não é trivial para instalação em sistemas baseados em Linux, pois espera que poucas variáveis ​​ambientais sejam definidas. Isso dificulta a instalação no virtualenv.

Cada gdalversão pode assumir uma versão diferente GDALe falhará na instalação se a versão esperada não estiver presente no sistema.

O pacote Python pygdalé uma alternativa ao gdal, que instala exatamente as mesmas coisas que gdal, mas o faz de uma maneira muito mais amigável para o ambiente virtual.

pygdalvem em versões que refletem a GDALversão relacionada . Portanto, com a GDAL versão 1.10.1 no sistema, você deve instalar a pygdalversão 1.10.1.

O pacote Python gdal(assim como pygdal) usa o pacote python raiz nomeado osgeoe possui um conjunto de submódulos, sendo um deles osgeo.gdal.

Se necessário, versões diferentes do padrão GDALpodem ser instaladas e usadas. Isso está fora do escopo desta descrição.

Os pacotes de rodas podem ser compilados de forma cruzada, isso também está fora do escopo.

Instalando GDALno sistema

Como pygdalrequer GDALa presença de bibliotecas compartilhadas, devemos instalá-las primeiro.

Supondo que GDALainda não esteja instalado, a ligação gdal-configreclamará e lhe dará uma dica de como acompanhar:

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

Siga a dica e instale-a:

$ sudo apt-get install libgdal-dev

Cada distribuição pode usar uma versão diferente de GDAL. Para descobrir qual usamos:

$ gdal-config --version
1.10.1

Agora você sabe, GDALestá instalado e a versão é 1.10.1 (a versão pode variar).

Instalar a pygdalpartir do pacote de origem (requer compilação)

Atualmente, pygdalé fornecido apenas no pacote tar.gz, que contém fontes de pacote e requer compilação.

Supondo que a versão do GDALis 1.10.1e que o nosso virtualenv já esteja ativado:

$ pip install pygdal==1.10.1

Pode demorar um pouco para ser concluído, se precisar de sonolência, o que também pode exigir alguma compilação. Apenas espere.

Verifique, está instalado:

$ pip freeze|grep pygdal
pygdal==1.10.1.0

A partir de agora, você poderá usar o pacote osgeo em seu código Python como desejar exatamente da mesma maneira como se fosse instalá-lo pelo gdalpacote Python.

Criando um pacote de rodas para pygdal

Observe que os pacotes wheel devem ser criados para exatamente a mesma arquitetura, ou seja, devem corresponder:

  • Arquitetura da CPU
  • SO (Linux / Windows)

No nosso caso, também deve corresponder à versão do GDALinstalado.

As etapas a seguir podem ser feitas no virtualenv ou não, como você desejar.

Primeiro, verifique se o pacote de rodas está instalado:

$ pip install wheel

Supondo que você tenha GDALinstalado e a versão 1.10.1:

$ pip wheel pygdal==1.10.1.0

e espere até que seja concluído.

Depois disso, você encontrará a casa do leme do subdiretório e deve conter pacotes com a extensão `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 a pygdalpartir de pacotes de rodas

A instalação a partir de pacotes formatados com rodas é muito mais rápida (um segundo em comparação com minutos), pois não requer compilação.

Observe que esse diretório com pacotes wheel pode ter qualquer nome, usaremos apenas o nome wheelhouse.

Ative o virtualenv primeiro.

Verifique se você possui no diretório wheelhouse os dois pacotes de roda necessários (para pygdale numpy).

Verifique se GDALestá instalado e se a versão corresponde à versão de pygdal.

Instale a pygdalpartir do pacote da roda:

$ pip install pygdal==1.10.1.0 -f wheelhouse

A casa do leme -f deve apontar para o diretório com arquivos whl.

Não há necessidade de instalar numpy, ele é instalado automaticamente.

Jan Vlcinsky
fonte
Essa resposta baseia-se em outras ótimas respostas aqui, tenta dar instruções completas para os detalhes, onde fiquei preso e adiciona etapas para usar o formato de pacote wheel para acelerar instalações repetidas no virtualenv.
Jan Vlcinsky
pygdalpara a vitória!! pypi : "Virtualenv e setuptools versão amigável da GDAL padrão vínculos python" <3
gisdude
9

Sim, fazer o seguinte antes de executar o PIP parece funcionar:

exportar CPLUS_INCLUDE_PATH = / usr / include / gdal

exportar C_INCLUDE_PATH = / usr / include / gdal

selimnairb
fonte
6

O problema com a instalação do pip gdal é que ele apenas obtém as ligações, não a biblioteca inteira, para que possa ficar complicado. Uma maneira de resolvê-lo é usar o comando pip para fazer o download - mas não instalar. Depois, você ajusta o local do cabeçalho no arquivo de configuração. Então você instala isso. meh.

Eu estava tendo o mesmo problema, mas percebi que escrever um script de malha para recompilar o gdal e gerar as ligações python levaria menos tempo. Você ainda obtém o benefício do filegdb com isso. Vá em frente e use a essência que eu escrevi ou ajuste-a no conteúdo do seu coração.

Ragi Yaser Burhum
fonte
3

Um tempo depois, isso fornece o caminho de inclusão sem precisar sair da instalação do pip: É possível definir o caminho de inclusão usando uma variável de ambiente.

Supondo que os cabeçalhos estejam em / usr / include / gdal, emita um

export CPLUS_INCLUDE_PATH=/usr/include/gdal

antes de executar o pip.

Crischan
fonte
Usando isso, eu recebo "extensões / gdalconst_wrap.c: 2732: 18: erro fatal: gdal.h: Nenhum tal lima ou diretório", embora gdal.h está presente em/usr/include/gdal
anand.trex
11
Usar C_INCLUDE_PATH em vez disso / adicionalmente ajuda =?
Crischan
3

Depois de procurar uma solução à direita e à esquerda, aqui está algo que funciona para mim no Ubuntu 14.04, mesmo dentro de um virtualenv sem acesso aos pacotes do sistema:

  • Instale dependências:

    sudo apt-get install libgdal-dev libgdal1h libgdal1-dev
  • Defina os sinalizadores do compilador:

    export CFLAGS=$(gdal-config --cflags)
  • Instale a versão correspondente às bibliotecas do sistema (no momento em que o Ubuntu Trusty está usando os cabeçalhos 1.10):

    pip install GDAL==1.10.0
FX
fonte
também funcionou para mim no ubuntu 16.04
Luke W
2

Agora você pode usar a versão amigável de virtualenv e setuptools das ligações python padrão do GDAL pygdal .

drnextgis
fonte
2

Eu estava tendo problemas semelhantes em um Mac. Foi assim que resolvi:

Primeiramente, configurei um ambiente virtual Python 2.7 usando o virtualenv. A distribuição Python foi instalada em um diretório chamado 'env'.

Eu então usei o fink para instalar o gdal

fink selfupdate
fink update-all
fink install gdal

Também instalei o gdal-dev, mas isso pode não ter sido necessário, pois já pode ter sido instalado com o gdal.

Eu verifiquei a versão instalada usando:

gdal-config --version

Na minha instalação, produziu o resultado 1.11.1

A instalação do fdal do gdal instalou o arquivo de cabeçalho cpl_port.h em / sw / include / gdal1. Verifique sua própria instalação. Eu então entrei:

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

Isso pareceu funcionar para mim, mas ainda não testei a instalação.

user1718097
fonte
2

No Fedora 24, que possui o GDAL 2.0.2 em seus repositórios, eu tive que instalar o pacote Python assim:

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

Eu estava recebendo um erro semelhante ao tentar instalar as ligações python GDAL em um mac (OS 10.10.5). Instalei o software GDAL básico em http://www.kyngchaos.com/software/frameworks usando o download "Completo". Eu tive que definir três variáveis ​​de ambiente.

exportar C_INCLUDE_PATH = / Biblioteca / Frameworks / GDAL.framework / Cabeçalhos exportar CPLUS_INCLUDE_PATH = / Biblioteca / Frameworks / GDAL.framework / Cabeçalhos exportar LIBRARY_PATH = / Biblioteca / Frameworks / GDAL.framework / Versões / Atual / unix / lib

A peça final foi adicionar /Library/Frameworks/GDAL.framework/Programs ao meu PATH.

echo 'export PATH = / Biblioteca / Estruturas / GDAL.framework / Programas: $ PATH' >> ~ / .bash_profile

Depois disso, o pip conseguiu instalar o GDAL para python. Espero que isto ajude.

Gary Kahn
fonte
1

Estes pacotes gdal 0.10.1 funcionam bem para o Ubuntu 12.04: https://launchpad.net/~ubuntugis/+archive/ubuntu/ubuntugis-unstable/+sourcepub/4353415/+listing-archive-extra

Pacotes gdal 0.10.1 para outra versão do ubuntu: https://launchpad.net/~ubuntugis/+archive/ubuntu/ubuntugis-unstable/+packages?field.name_filter=gdal&field.status_filter=published&field.series_filter=

signo
fonte
Eu também tive problemas gdal 1.10.1e fiz o seguintepip install --global-option=build_ext --global-option="-I/usr/include/gdal" gdal==1.10.0
ryanjdillon 28/05
1

Para responder ao aspecto específico da virtualenv da pergunta:

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

Cuidado que pygdalpode exigir uma versão diferente do GDAL, em comparação com o que o GDALpacote de ligações python exige.


Abaixo está o que eu usei para obtê-lo nas versões recentes do Fedora (20 e 23).

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

Instalando via Pip com comando único

Supondo que o pacote de desenvolvimento GDAL esteja instalado e as versões do arquivo de cabeçalho estejam corretas, o único comando necessário para instalar o GDAL a partir de repositórios PyPI é o seguinte:

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

Obviamente, isso pressupõe a localização dos arquivos de cabeçalho /usr/include/gdal.

Instale o GDAL atualizado

Para instalar o GDAL com o comando pip acima, a versão dos arquivos de cabeçalho precisa ser semelhante à versão em que o pip fará a compilação. O GDAL tem uma referência binária atualizada em: https://trac.osgeo.org/gdal/wiki/DownloadingGdalBinaries .

Como instalar no OpenSUSE

Seguindo o link acima, há uma URL incorporada mais abaixo para um conjunto atualizado de pacotes GIS para o OpenSUSE 42.1 http://download.opensuse.org/repositories/Application:/Geo/openSUSE_Leap_42.1/Application: Geo.repo

zypper ar -f <URL>

Substitua pela embalagem apropriada. E se não estiver usando, zypperhá mais informações em https://trac.osgeo.org/gdal/wiki/DownloadingGdalBinaries

DanCat
fonte
1

Eu tive o mesmo problema no Windows 10. Depois de algumas experiências, vim com esta solução.

  1. Baixe e instale o Python 3.6 (se não estiver instalado) após a instalação alterar as variáveis ​​de ambiente PYTHONPATH=c:\python36 PATH=C:\python36\Scripts\;C:\python36\;%PATH%
  2. Faça o download do * .whl para obter a versão correta do python em https://www.lfd.uci.edu/~gohlke/pythonlibs/#gdal
  3. Baixe e instale http://landinghub.visualstudio.com/visual-cpp-build-tools
  4. pip install *.whl (* .whl da etapa 2)
zimirrr
fonte
thnx, pensei que o python instalasse automaticamente ambientes, mas depois removi e recriei ambientes, como você sugeriu que tudo funcionasse como um encanto.
Florjan
1

Se você estiver usando o Docker, abrimos nosso contêiner de origem, o que simplifica o uso do GDAL e do Python 3. O contêiner captura as etapas descritas acima para permitir que você use rapidamente o GDAL com seus aplicativos.

thinkwhere / gdal-python

Caçador de Iain
fonte
0

Se você estiver executando uma distribuição baseada no Debian, as bibliotecas python GDAL estão disponíveis no gerenciador de pacotes e podem ser simplesmente instaladas com

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

Alex McVittie
fonte
0

No Ubuntu 16.04 com conda no 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
Luke W
fonte
0

No ubuntu, uma solução mais simples para instalar o gdal mais recente para python3: instalar arquivos de biblioteca via libgdal-deve wrapper python viapython-gdal

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

para python2:

sudo apt-get install python-gdal
beahacker
fonte
0

Você também pode encontrar problemas com o uso da memória.

Ao executar o pip install gdal==2.2.3gcc, é iniciado para compilar algo e aumenta o uso de memória.

Se você não tiver memória suficiente, o compilador falhará, com uma mensagem como

'x86_64-linux-gnu-gcc' falhou com o status de saída 4

Para corrigi-lo, você precisa adicionar mais RAM ou liberar alguns.

Yvain
fonte
0

Essa abordagem funcionou para mim:

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 como parte de um 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
fonte
0

Se você estiver usando o Travis CI e precisar de uma versão recente do GDAL para Python, aqui está um exemplo de como seria a parte de um .travis.ymlarquivo:

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
fonte