W pakiecie Python GDAL brakuje pliku nagłówka podczas instalacji przez pip

68

Zadałem to pytanie na temat przepełnienia stosu, zanim zdałem sobie sprawę, że ta strona istnieje. Ponieważ ta strona jest bardziej odpowiednia, poproszę ją również tutaj.

Próbuję zainstalować gdal z pipa pip install gdalw środowisku wirtualnym (Ubuntu). Nie udaje się, ponieważ nie można go znaleźćcpl_port.h

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

Jednak GDAL jest poprawnie zainstalowany, a plik nagłówka znajduje się w /usr/include/gdal/cpl_port.h. Czy istnieje jakaś zmienna środowiskowa dla GDAL, którą należy ustawić, aby pip mógł znaleźć pliki nagłówkowe?

Kevin
źródło
Mam podobny problem w systemie Windows, instalując gdal przez pip w wirtualnej env. ! [wprowadź opis zdjęcia tutaj ] ( i.stack.imgur.com/EVLWP.jpg )
Hayat Khan

Odpowiedzi:

93

Odpowiedź selimnairb jest bliska, ale nie będziesz mieć nagłówków, chyba że zainstalowałeś libgdal-dev:

sudo apt-get install libgdal-dev

z tym zrobione,

export CPLUS_INCLUDE_PATH=/usr/include/gdal

export C_INCLUDE_PATH=/usr/include/gdal

i wtedy

pip install GDAL

Kompilacja dobiegła końca i mam GDAL w mojej wirtualnej env. Uff!

(edycja 2018) Uwaga: Aby mieć pewność, że zainstalujesz poprawną wersję i unikniesz problemów. pobierz wersję za pomocą gdal-config --version. i wtedy:

pip install GDAL==version
Paul Whipp
źródło
Wydaje się, że to jedyne skuteczne rozwiązanie.
bozdoz
1
Próbowałem tego na innym systemie i myślę, że kombinacja odpowiedzi plus plus @nickves jest tym, co faktycznie to robi.
bozdoz
To zadziałało dla mnie.
jaranda
1
Bardzo dobre. W przypadku, gdy zainstalowana wersja GDAL w pakiecie systemowym i Pythonie różni się, kończy się to niepowodzeniem. Rozwiązaniem jest znalezienie wersji GDAL w systemie i poinstruowanie pip, aby zainstalował odpowiednią wersję pakietu Pythona. W moim przypadku (Ubuntu 14.04) oba mają 10,0, więc pomogło$ pip install GDAL==10.0
Jan Vlcinsky
4
Mogę potwierdzić, że działa na Ubuntu 16.04 z pip install GDAL==1.10.0.
beruic
34

Header Z jakiegoś powodu nie można znaleźć plików nagłówkowych. Być może działasz w środowisku wirtualnym lub z jakiegoś powodu nie ma ich tam, gdzie powinny być. W każdym razie możesz podać katalogi dołączania podczas instalacji gdal przez pip.

pierwsze pobranie gdal pythona:

pip install --no-install GDAL

w późniejszych wersjach pip (> = 9.0.0) pip install --no-installnie istnieje:

pip download GDAL

następnie określ, gdzie są nagłówki:

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

następnie zainstaluj:

pip install --no-download GDAL

w późniejszych wersjach pip (> = 9.0.0) pip install --no-downloadnie istnieje:

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

Oto inny sposób instalacji gdal python:

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

po tym otwórz IDLE:

from osgeo import gdal

i możesz iść!

nickves
źródło
3
Cześć, dziękuję za odpowiedź, ale naprawdę potrzebuję sposobu instalacji za pośrednictwem pip, ponieważ będę tworzyć izolowane środowiska przy użyciu virtualenv podczas procesu CI.
kevin
1
jakie są dane wyjściowe po uruchomieniu „gdal-config --version” i „gdal-config --libs”?
nickves
GDAL v1.9.1. gdal-config --libs -> -L/usr/lib -lgdal
kevin
2
@nickves Próbuję zainstalować GDAL za pomocą virtualenvwrapper w Ubuntu, a kiedy próbuję pierwszego wiersza: pojawia pip install --no-install GDALsię błąd: __main__.gdal_config_error: [Errno 2] No such file or directoryjakiś pomysł?
theJollySin
3
Niedawno świetnie się bawiłem instalując GDAL na OSX. Obecnie najnowsze wiązania Pythona dla GDAL zależą od wersji 2.1, ale najnowszą dostępną wersją GDAL w wersji Homebrew jest wersja 1.11.3 i 1.11.4 dla GDAL Complete. Zainstalowałem przez homebrew brew install gdali użyłem starszej wersji pakietu GDAL Python:pip install --global-option=build_ext --global-option="-L/usr/local/include/gdal/" 'gdal==1.9.1'
TestSubject
17

Po zapoznaniu się z częścią tej rady otrzymałem instalację Pythona GDAL 1.11.0 (rozwiązanie powinno być niezależne od wersji, patrz poniżej), aby działał na Ubuntu 14.04 z pipem:

Zainstaluj zależności:

sudo apt-get install libgdal-dev libgdal1h

zainstaluj pip, przekazując ścieżkę dołączania (przedrostek sudodla instalacji ogólnosystemowej) i instruując pip, aby zainstalował wersję pasującą do zainstalowanej w systemie wersji GDAL:

pip install --global-option=build_ext --global-option="-I/usr/include/gdal" GDAL==\`gdal-config --version\`
dennisobrien
źródło
Wyższe oceny odpowiedzi selimnairb i Paul Whipp nie działały dla mnie na Ubuntu 15.10 i ta zadziałała.
rhunwicks,
1
Drugi wiersz zadziałał dla mnie po dodaniu przez apt-niestabilne repozytoria odpowiedzi @nickves. Dziękuje za wszystko!
Patrick Williams
1
Dziękuję, to skończyło się dla mnie. Chociaż musiałem nieco zmodyfikować, próbując jak najściślej trzymać się instalacji kartodb, ostatecznie użyłem tego jako mojej ostatniej działającej komendy instalacyjnej: sudo pip install --no-use-wheel -r python_requirements.txt --global-option=build_ext --global-option="-I/usr/include/gdal" python_requirements.txt określa starszą wersję gdal. Wątpię, czy to miałoby znaczenie, ale cały zestaw instalacyjny pip zakończył się powodzeniem. U 12,04x64
vaxhax
12

Instalowanie pakietu Python gdalw virualenv w systemie Linux

GDALzapewnia ładny zestaw narzędzi do operacji związanych z GEO. Jednak instalacja go do virtualenv w systemie Linux nie jest łatwym zadaniem.

Ten przepis opisuje, jak to zrobić.

Uwaga

tutaj używam małych liter gdaldla pakietu Python i wielkich liter GDALdla ogólnej biblioteki systemowej.

Wymagania

  • zezwól na używanie bibliotek osgeo (instalowanych przez gdalpakiet Python) w virtualenv
  • zezwól na instalację w systemie Linux Ubuntu

Metody instalacji

Istnieje wiele metod instalacji. Jeden wymaga kompilacji i zajmuje kilka minut dłużej.

Drugi używa pakietu kół pygdali jest bardzo szybki. W każdym razie, aby utworzyć pakiet koła, należy go utworzyć raz, a tworzenie i tak obejmuje etap kompilacji.

Informacje o GDALpakietach i wersjach

GDAL to ogólna biblioteka oparta na C (++) do obliczeń związanych z GEO.

GDAL narzędzia można zainstalować w całym systemie, co udostępnia biblioteki współdzielone, ale nie instaluje samego pakietu Python.

GDAL występuje w różnych wersjach, a każda dystrybucja Linuksa może domyślnie instalować inną wersję.

Pakiet Pythona gdalwymaga kompilacji i nie jest trywialny w instalacji w systemach Linux, ponieważ wymaga ustawienia kilku zmiennych środowiskowych. Utrudnia to instalację w virtualenv.

Każda gdalwersja może zakładać inną wersję GDALi instalacja zakończy się niepowodzeniem, jeśli w systemie nie ma oczekiwanej wersji.

Pakiet Python pygdaljest alternatywą dla gdal, która instaluje dokładnie to samo, co gdal, ale robi to w znacznie bardziej przyjazny dla virtualenv sposób.

pygdalwystępuje w wersjach odzwierciedlających GDALwersję pokrewną . Mając GDAL wersję 1.10.1 w systemie, należy zainstalować pygdalwersję 1.10.1.

Pakiet Python gdal(jak również pygdal) korzysta z pakietu root Python o nazwie osgeoi ma zestaw submodułów, z których jeden jest osgeo.gdal.

W razie potrzeby GDALmożna zainstalować i używać innych niż domyślne wersji . Jest to poza zakresem tego opisu.

Pakiety kół można kompilować krzyżowo, to również nie wchodzi w zakres.

Instalowanie GDALw systemie

Ponieważ pygdalwymaga GDALobecności bibliotek współdzielonych, musimy je najpierw zainstalować.

Zakładając, że GDALnie jest jeszcze zainstalowany, dzwonienie gdal-confignarzeka i daje ci wskazówkę, jak postępować:

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

Postępuj zgodnie ze wskazówkami i zainstaluj:

$ sudo apt-get install libgdal-dev

Każda dystrybucja może korzystać z innej wersji GDAL. Aby dowiedzieć się, którego używamy:

$ gdal-config --version
1.10.1

Teraz wiesz, że GDALjest zainstalowany, a wersja to 1.10.1 (wersja może się różnić).

Zainstaluj pygdalz pakietu źródłowego (wymaga kompilacji)

Obecnie pygdaljest dostępny tylko w pakiecie tar.gz, który zawiera źródła pakietów i wymaga kompilacji.

Zakładając, że wersja GDALis 1.10.1i że nasza virtualenv jest już aktywowana:

$ pip install pygdal==1.10.1

Może to trochę potrwać, ponieważ wymaga numpy, co może również wymagać kompilacji. Poczekaj.

Sprawdź, czy jest zainstalowany:

$ pip freeze|grep pygdal
pygdal==1.10.1.0

Od teraz możesz używać pakietu osgeo w swoim kodzie Python, tak jak chcesz, dokładnie tak samo, jakbyś instalował go za pomocą gdalpakietu Python.

Tworzenie pakietu kół dla pygdal

Uwaga: pakiety kół muszą być tworzone dla dokładnie tej samej architektury, a mianowicie muszą być zgodne:

  • Architektura procesora
  • System operacyjny (Linux / Windows)

W naszym przypadku musi również pasować do wersji GDALzainstalowanej.

Poniższe kroki można wykonać w virtualenv lub nie, jak chcesz.

Najpierw upewnij się, że pakiet kół jest zainstalowany:

$ pip install wheel

Zakładając, że masz GDALzainstalowany i ma on wersję 1.10.1:

$ pip wheel pygdal==1.10.1.0

i poczekaj, aż się zakończy.

Następnie znajdziesz podkatalog sterówki, który będzie zawierał paczki z rozszerzeniem `whl`:

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

Zainstaluj pygdalz pakietów kół

Instalacja z pakietów sformatowanych z użyciem kół jest znacznie szybsza (sekunda w porównaniu do minut), ponieważ nie wymaga kompilacji.

Zauważ, że katalog z pakietami kół może mieć dowolną nazwę, użyjemy tylko nazwy wheelhouse.

Najpierw aktywuj virtualenv.

Upewnij się, że masz w katalogu sterówki oba wymagane pakiety kół (dla pygdali numpy).

Upewnij się, że GDALjest zainstalowany, a wersja pasuje do wersji pygdal.

Zainstaluj pygdalz pakietu kół:

$ pip install pygdal==1.10.1.0 -f wheelhouse

-F sterówka wskazuje katalog z plikami whl.

Nie trzeba instalować numpy, instaluje się automatycznie.

Jan Vlcinsky
źródło
ta odpowiedź opiera się na innych świetnych odpowiedziach tutaj, próbuje podać pełne instrukcje dotyczące szczegółów, w których utknąłem i dodaje kroki dotyczące korzystania z formatu pakietu koła w celu przyspieszenia wielokrotnych instalacji w virtualenv.
Jan Vlcinsky
pygdaldla zwycięstwa!! pypi : „Przyjazna dla Virtualenv i setuptools wersja standardowych powiązań Pythona GDAL” <3
gisdude
9

Tak, wydaje się, że przed uruchomieniem PIP wydaje się działać:

eksport CPLUS_INCLUDE_PATH = / usr / include / gdal

eksport C_INCLUDE_PATH = / usr / include / gdal

selimnairb
źródło
6

Problem z instalacją gdal przez pip jest taki, że pobiera tylko wiązania, a nie całą bibliotekę, więc może być trudny. Jednym ze sposobów rozwiązania tego problemu jest pobranie polecenia pip, ale nie instalacja. Następnie popraw lokalizację nagłówka z pliku konfiguracyjnego. Następnie zainstaluj to. meh

Miałem ten sam problem, ale zdałem sobie sprawę, że napisanie skryptu tekstylnego w celu ponownej kompilacji gdal i wygenerowania powiązań pytona zajmie mniej czasu. Dzięki temu zyskujesz nawet korzyści z filegdb. Śmiało, skorzystaj z treści, którą napisałem, lub dostosuj ją do swoich serc.

Ragi Yaser Burhum
źródło
3

Chwilę później zapewnia to ścieżkę dołączania bez konieczności ratowania instalacji pip: Można ustawić ścieżkę dołączania za pomocą zmiennej środowiskowej.

Zakładając, że nagłówki znajdują się w / usr / include / gdal, wydaj an

export CPLUS_INCLUDE_PATH=/usr/include/gdal

przed uruchomieniem pip.

Crischan
źródło
Korzystając z tego, otrzymuję „extensions / gdalconst_wrap.c: 2732: 18: błąd krytyczny: gdal.h: Brak takiego pliku lub katalogu”, mimo że gdal.h jest obecny w/usr/include/gdal
anand.trex
1
Czy użycie C_INCLUDE_PATH zamiast / dodatkowo pomaga =?
Crischan,
3

Po szukaniu rozwiązania w prawo i w lewo, oto coś, co działa dla mnie na Ubuntu 14.04, nawet z poziomu virtualenv bez dostępu do pakietów systemowych:

  • Zainstaluj zależności:

    sudo apt-get install libgdal-dev libgdal1h libgdal1-dev
  • Ustaw flagi kompilatora:

    export CFLAGS=$(gdal-config --cflags)
  • Zainstaluj wersję odpowiadającą bibliotekom systemowym (w momencie pisania Ubuntu Trusty używa nagłówków 1.10):

    pip install GDAL==1.10.0
FX
źródło
pracował również dla mnie na Ubuntu 16.04
Łukasz W
2

Teraz możesz używać przyjaznej dla virtualenv i setuptools wersji standardowych powiązań pythonowych GDAL pygdal .

drnextgis
źródło
2

Miałem podobne problemy na komputerze Mac. Oto jak to rozwiązałem:

Po pierwsze, skonfigurowałem wirtualne środowisko Python 2.7 za pomocą virtualenv. Dystrybucja Pythona została zainstalowana w katalogu o nazwie „env”.

Następnie użyłem Fink, aby zainstalować gdal

fink selfupdate
fink update-all
fink install gdal

Zainstalowałem również gdal-dev, ale może nie było to wymagane, ponieważ mogło być już zainstalowane z gdal.

Sprawdziłem zainstalowaną wersję za pomocą:

gdal-config --version

W mojej instalacji wygenerował wynik 1.11.1

Instalacja fink gdal zainstalowała plik nagłówka cpl_port.h w / sw / include / gdal1. Sprawdź własną instalację. Następnie wprowadziłem:

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

Wydawało się, że to działa, ale nie przetestowałem jeszcze instalacji.

użytkownik1718097
źródło
2

Na Fedorze 24, która ma GDAL 2.0.2 w swoich repozytoriach, musiałem zainstalować pakiet Python w następujący sposób:

pip install \
  --global-option=build_ext \
  --global-option="-I/usr/include/gdal/" \
  GDAL==2.0.1
akaihola
źródło
2

Otrzymałem podobny błąd podczas próby instalacji powiązań GDAL Pythona na komputerze Mac (OS 10.10.5). Zainstalowałem podstawowe oprogramowanie GDAL ze strony http://www.kyngchaos.com/software/frameworks, pobierając plik „Complete”. Musiałem ustawić trzy zmienne środowiskowe.

eksport 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

Ostatnim elementem było dodanie /Library/Frameworks/GDAL.framework/Programs do mojej ŚCIEŻKI.

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

Po tym pip mógł zainstalować GDAL dla Pythona. Mam nadzieję że to pomoże.

Gary Kahn
źródło
1

Te pakiety gdal 0.10.1 działają dobrze dla Ubuntu 12.04: https://launchpad.net/~ubuntugis/+archive/ubuntu/ubuntugis-unstable/+sourcepub/4353415/+listing-archive-extra

Pakiety gdal 0.10.1 dla innej wersji ubuntu: https://launchpad.net/~ubuntugis/+archive/ubuntu/ubuntugis-unstable/+packages?field.name_filter=gdal&field.status_filter=published&field.series_filter=

signo
źródło
Miałem też kłopoty gdal 1.10.1i właśnie zrobiłem następującepip install --global-option=build_ext --global-option="-I/usr/include/gdal" gdal==1.10.0
ryanjdillon
1

Aby odpowiedzieć na konkretny aspekt pytania virtualenv:

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

Uwaga, pygdalmoże wymagać innej wersji GDAL, w porównaniu z tym, czego GDALwymaga pakiet powiązań Pythona.


Poniżej znajduje się to, co otrzymałem w najnowszych wersjach Fedory (20 i 23).

CPPFLAGS=-I/usr/include/gdal pip install gdal
Kevin
źródło
1

Instalowanie za pomocą Pip z pojedynczym poleceniem

Zakładając, że pakiet programistyczny GDAL jest zainstalowany i wersje plików nagłówkowych są poprawne, jedyne polecenie potrzebne do zainstalowania GDAL z repozytoriów PyPI jest następujące:

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

To oczywiście zakłada lokalizację plików nagłówkowych /usr/include/gdal.

Zainstaluj aktualny GDAL

Aby zainstalować GDAL za pomocą powyższej komendy pip, wersja plików nagłówkowych musi być podobna do wersji, którą pip wykona. GDAL ma zaktualizowane odniesienie binarne na stronie : https://trac.osgeo.org/gdal/wiki/DownloadingGdalBinaries .

Jak zainstalować na OpenSUSE

Po powyższym linku znajduje się adres URL umieszczony dalej w dół do aktualnego zestawu pakietów GIS dla OpenSUSE 42.1 http://download.opensuse.org/repositories/Application:/Geo/openSUSE_Leap_42.1/Aplikacja: Geo.repo

zypper ar -f <URL>

Zastąp odpowiednim pakietem. A jeśli nie używasz zypper, jest więcej informacji na https://trac.osgeo.org/gdal/wiki/DownloadingGdalBinaries

DanCat
źródło
1

Miałem ten sam problem w systemie Windows 10. Po kilku eksperymentach przyszedłem z tym rozwiązaniem.

  1. Pobierz i zainstaluj Python 3.6 (jeśli nie jest zainstalowany) po instalacji zmień zmienne środowiskowe PYTHONPATH=c:\python36 PATH=C:\python36\Scripts\;C:\python36\;%PATH%
  2. Pobierz * .whl dla poprawnej wersji Pythona ze strony https://www.lfd.uci.edu/~gohlke/pythonlibs/#gdal
  3. Pobierz i zainstaluj http://landinghub.visualstudio.com/visual-cpp-build-tools
  4. pip install *.whl (* .whl z kroku 2)
zimirrr
źródło
Dzięki, myślałem, że Python zainstalował środowiska automatycznie, ale potem usunąłem i odtworzyłem środowiska, ponieważ sugerujesz, że wszystko działa jak urok.
Florjan
1

Jeśli korzystasz z Dockera, otwieramy nasz kontener, co upraszcza korzystanie z GDAL i Pythona 3. Kontener przechwytuje kroki opisane powyżej, abyś mógł szybko używać GDAL z twoimi aplikacjami.

thinkwhere / gdal-python

Iain Hunter
źródło
0

Jeśli korzystasz z dystrybucji opartej na Debianie, biblioteki Pythona GDAL są dostępne za pośrednictwem menedżera pakietów i można je po prostu zainstalować za pomocą

sudo apt install python-gdal lub sudo apt install python3-gdal

Alex McVittie
źródło
0

Na Ubuntu 16.04 z condą w kontenerze dokera (stos jupyter)

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.
źródło
0

W Ubuntu, prostsze rozwiązanie do zainstalowania najnowszej gdal dla python3: instaluj pliki bibliotek przez libgdal-devi otoki Pythona przezpython-gdal

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

dla python2:

sudo apt-get install python-gdal
beahacker
źródło
0

Możesz również napotkać problem z użyciem pamięci.

Po uruchomieniu pip install gdal==2.2.3gcc uruchamia się, aby coś skompilować i zwiększa zużycie pamięci.

Jeśli nie masz wystarczającej ilości pamięci, kompilator nie powiedzie się z komunikatem typu

Błąd „x86_64-linux-gnu-gcc” nie powiódł się ze statusem wyjścia 4

Aby to naprawić, musisz dodać więcej pamięci RAM lub zwolnić trochę.

Yvain
źródło
0

To podejście zadziałało dla mnie:

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)

Lub jako część 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
źródło
0

Jeśli używasz Travis CI i potrzebujesz najnowszej wersji GDAL dla Pythona, oto przykład tego, jak wyglądałaby część .travis.ymlpliku:

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.
źródło