Paket Python GDAL hilang file header saat menginstal melalui pip

68

Saya mengajukan pertanyaan ini pada Stack Overflow sebelum saya menyadari situs ini ada. Karena situs ini lebih sesuai, saya akan bertanya di sini juga.

Saya mencoba menginstal gdal dari pip pip install gdaldi dalam lingkungan virtual (Ubuntu). Gagal karena tidak dapat ditemukancpl_port.h

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

Namun GDAL diinstal dengan benar dan file header terletak di /usr/include/gdal/cpl_port.h. Apakah ada beberapa variabel lingkungan untuk GDAL yang perlu diatur agar pip dapat menemukan file header?

kevin
sumber
Saya memiliki masalah serupa di windows, menginstal gdal via pip di virtual env. ! [masukkan deskripsi gambar di sini ] ( i.stack.imgur.com/EVLWP.jpg )
Hayat Khan

Jawaban:

94

jawaban selimnairb dekat, tetapi Anda tidak akan memiliki header kecuali Anda telah menginstal libgdal-dev:

sudo apt-get install libgdal-dev

dengan itu dilakukan,

export CPLUS_INCLUDE_PATH=/usr/include/gdal

export C_INCLUDE_PATH=/usr/include/gdal

lalu

pip install GDAL

Kompilasi berjalan sampai selesai dan saya memiliki GDAL di virtual env saya. Fiuh!

(edit 2018) Catatan: Untuk memastikan bahwa Anda menginstal versi yang benar dan menghindari masalah. ambil versi dengan gdal-config --version. lalu:

pip install GDAL==version
Paul Whipp
sumber
Tampaknya menjadi satu-satunya solusi yang berhasil.
bozdoz
1
Mencoba ini di sistem lain, dan saya pikir kombinasi dari jawaban plus @nickves inilah yang sebenarnya melakukannya.
bozdoz
Ini berhasil untuk saya.
jaranda
1
Baik sekali. Dalam kasus, versi GDAL yang terinstal di sistem dan paket python berbeda, gagal. Solusinya adalah menemukan versi GDAL dalam sistem dan menginstruksikan pip untuk menginstal versi paket python yang relevan. Dalam kasus saya (Ubuntu 14.04) keduanya 10.0, jadi itu membantu$ pip install GDAL==10.0
Jan Vlcinsky
4
Saya dapat mengkonfirmasi bahwa ini berfungsi pada Ubuntu 16.04 dengan pip install GDAL==1.10.0.
beruic
34

File header tidak dapat ditemukan karena alasan tertentu. Mungkin Anda Anda beroperasi di dalam Lingkungan Virtual atau mereka tidak berada di tempat yang seharusnya karena alasan tertentu. Dalam hal apa pun Anda dapat menentukan dir sertakan ketika menginstal gdal via pip.

Pertama unduh python gdal:

pip install --no-install GDAL

dalam versi pip yang lebih baru (> = 9.0.0) pip install --no-installtidak ada:

pip download GDAL

kemudian tentukan di mana tajuknya:

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

lalu instal:

pip install --no-download GDAL

dalam versi pip yang lebih baru (> = 9.0.0) pip install --no-downloadtidak ada:

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

Berikut cara lain untuk menginstal gdal python:

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

setelah itu IDLE terbuka:

from osgeo import gdal

dan kamu baik untuk pergi!

Nickes
sumber
3
Hai terima kasih atas jawaban Anda, tetapi saya benar-benar membutuhkan cara untuk menginstal melalui pip karena saya akan membuat lingkungan terisolasi menggunakan virtualenv selama proses CI.
kevin
1
apa output ketika Anda menjalankan 'gdal-config --version' dan 'gdal-config --libs'?
Nickves
GDAL v1.9.1. gdal-config --libs -> -L/usr/lib -lgdal
kevin
2
@nickves Saya mencoba untuk menginstal GDAL menggunakan virtualenvwrapper di Ubuntu, dan ketika saya mencoba baris pertama Anda:, saya pip install --no-install GDALmendapatkan kesalahan: __main__.gdal_config_error: [Errno 2] No such file or directoryAda ide?
theJollySin
3
Saya baru-baru ini bersenang-senang menginstal GDAL di OSX. Saat ini, binding Python terbaru untuk GDAL bergantung pada 2.1, tetapi GDAL terbaru yang tersedia di homebrew adalah 1.11.3, dan 1.11.4 untuk GDAL Complete. Saya menginstal melalui homebrew,, brew install gdaldan menggunakan versi yang lebih lama dari paket Python GDAL:pip install --global-option=build_ext --global-option="-L/usr/local/include/gdal/" 'gdal==1.9.1'
TestSubject
17

Setelah mengikuti subset dari saran ini, ini adalah bagaimana saya mendapatkan Python GDAL 1.11.0 (solusinya harus versi-independen, lihat di bawah) instal untuk bekerja di Ubuntu 14.04 dengan pip:

Instal dependensi:

sudo apt-get install libgdal-dev libgdal1h

instal pip dengan melewati path include (awalan dengan sudountuk instal seluruh sistem) dan menginstruksikan pip untuk menginstal versi yang cocok dengan sistem yang menginstal versi GDAL:

pip install --global-option=build_ext --global-option="-I/usr/include/gdal" GDAL==\`gdal-config --version\`
dennisobrien
sumber
Jawaban dengan nilai lebih tinggi dari selimnairb dan Paul Whipp tidak berfungsi untuk saya di Ubuntu 15.10 dan yang ini berhasil.
rhunwicks
1
Baris kedua bekerja untuk saya setelah menambahkan repositori yang tidak stabil dari @nickves answer. Terimakasih untuk semua!
Patrick Williams
1
Terima kasih, ini akhirnya berhasil untuk saya. Meskipun saya harus memodifikasi sedikit karena saya berusaha untuk tetap menempel pada instalasi cartodb semaksimal mungkin, saya akhirnya menggunakan ini sebagai perintah instalasi kerja terakhir saya: sudo pip install --no-use-wheel -r python_requirements.txt --global-option=build_ext --global-option="-I/usr/include/gdal" python_requirements.txt menentukan versi gdal yang lebih lama. Saya ragu itu penting untuk jujur, tetapi seluruh set instalasi pip selesai dengan sukses. U 12.04x64
vaxhax
12

Menginstal paket Python gdalke dalam virualenv di Linux

GDALmenyediakan toolkit yang bagus untuk operasi terkait GEO. Namun, menginstalnya ke virtualenv di Linux bukanlah tugas sepele.

Resep ini menjelaskan, bagaimana cara melakukannya.

catatan

di sini saya menggunakan huruf kecil gdaluntuk paket Python dan huruf besar GDALuntuk sistem perpustakaan umum.

Persyaratan

  • memungkinkan menggunakan pustaka osgeo (diinstal melalui gdalpaket Python) ke dalam virtualenv
  • memungkinkan menginstal di Linux Ubuntu

Metode pemasangan

Ada beberapa metode untuk instalasi. Seseorang membutuhkan kompilasi dan membutuhkan beberapa menit lagi.

Yang lain menggunakan paket paket roda pygdaldan sangat cepat. Lagi pula, untuk membuat paket roda, orang perlu membuatnya sekali dan pembuatannya tetap menyertakan langkah kompilasi.

Tentang GDALpaket dan versi

GDAL adalah pustaka umum berbasis C (++) untuk perhitungan terkait GEO.

GDAL utilitas dapat menginstal sistem secara luas yang membuat pustaka bersama tersedia, tetapi tidak menginstal paket Python itu sendiri.

GDAL datang dalam versi yang berbeda dan setiap distribusi Linux secara default menginstal versi yang berbeda.

Paket Python gdalmembutuhkan kompilasi dan tidak sepele untuk menginstal pada sistem berbasis Linux karena mengharapkan beberapa variabel lingkungan yang akan ditetapkan. Ini membuat instalasi menjadi virtualenv lebih sulit.

Setiap gdalversi mungkin menggunakan versi yang berbeda GDALdan akan gagal menginstal jika versi yang diharapkan tidak ada dalam sistem.

Paket python pygdaladalah alternatif gdal, yang menginstal hal yang persis sama gdal, tetapi melakukannya dengan cara yang jauh lebih ramah virtual.

pygdaldatang dalam versi yang mencerminkan GDALversi terkait . Jadi memiliki GDAL versi 1.10.1 dalam sistem Anda harus menginstal pygdalversi 1.10.1.

Paket python gdal(dan juga pygdal) menggunakan paket root python bernama osgeodan memiliki set submodules, satu sedang osgeo.gdal.

Jika diperlukan, selain versi default GDALdapat diinstal dan digunakan. Ini di luar cakupan deskripsi ini.

Paket roda dapat dikompilasi silang, ini juga di luar jangkauan.

Menginstal GDALke sistem

Karena pygdalmemerlukan GDALpustaka bersama untuk hadir, kita harus menginstalnya terlebih dahulu.

Dengan asumsi GDALbelum terinstal, panggilan gdal-configakan mengeluh dan memberi Anda petunjuk bagaimana menindaklanjuti:

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

Ikuti petunjuknya dan pasang:

$ sudo apt-get install libgdal-dev

Setiap distribusi dapat menggunakan versi yang berbeda dari GDAL. Untuk mengetahui yang kami gunakan:

$ gdal-config --version
1.10.1

Sekarang Anda tahu, GDALsudah terinstal dan versinya adalah 1.10.1 (versinya bisa bervariasi).

Instal pygdaldari paket sumber (memerlukan kompilasi)

Saat pygdalini disediakan hanya dalam paket tar.gz, yang berisi sumber paket dan membutuhkan kompilasi.

Dengan asumsi, versi GDALis 1.10.1dan virtualenv kami sudah diaktifkan:

$ pip install pygdal==1.10.1

Mungkin perlu beberapa saat untuk menyelesaikannya, apakah itu perlu numpy, yang mungkin juga memerlukan kompilasi. Tunggu saja.

Periksa, sudah terpasang:

$ pip freeze|grep pygdal
pygdal==1.10.1.0

Mulai sekarang, Anda dapat menggunakan paket osgeo dalam kode Python yang Anda inginkan dengan cara yang persis sama seolah-olah Anda akan menginstalnya dengan gdalpaket Python.

Membuat paket roda untuk pygdal

Perhatikan, paket roda itu harus dibuat untuk arsitektur yang persis sama, yaitu harus cocok:

  • Arsitektur CPU
  • OS (Linux / Windows)

Dalam kasus kami, itu juga harus cocok dengan versi yang GDALdiinstal.

Langkah-langkah berikut dapat dilakukan dalam virtualenv atau tidak, sesuka Anda.

Pertama, pastikan, paket roda diinstal:

$ pip install wheel

Dengan asumsi, Anda telah GDALmenginstal dan memiliki versi 1.10.1:

$ pip wheel pygdal==1.10.1.0

dan tunggu, sampai selesai.

Setelah ini, Anda akan menemukan ruang kemudi subdirektori dan berisi paket dengan ekstensi `whl`:

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

Instal pygdaldari paket roda

Instalasi dari paket berformat roda jauh lebih cepat (satu detik dibandingkan menit), karena tidak memerlukan kompilasi.

Catatan, direktori dengan paket roda dapat memiliki nama apa pun, kami hanya akan menggunakan nama ruang kemudi.

Aktifkan virtualenv terlebih dahulu.

Pastikan, Anda memiliki dalam direktori ruang kemudi kedua paket roda yang diperlukan (untuk pygdaldan numpy).

Pastikan, GDALdiinstal dan versi cocok dengan versi pygdal.

Instal pygdaldari paket roda:

$ pip install pygdal==1.10.1.0 -f wheelhouse

Ruang kemudi -f akan menunjuk ke direktori dengan file whl.

Tidak perlu menginstal numpy, itu akan diinstal secara otomatis.

Jan Vlcinsky
sumber
server ini dibangun berdasarkan jawaban-jawaban hebat lainnya di sini, mencoba memberikan instruksi lengkap untuk perincian, di mana saya terjebak dan menambahkan langkah-langkah untuk menggunakan format paket roda untuk mempercepat pemasangan berulang ke dalam virtualenv.
Jan Vlcinsky
pygdalUntuk kemenangan!! pypi : "Virtualenv dan versi setuptools friendly dari binding python GDAL standar" <3
gisdude
9

Ya, melakukan hal berikut sebelum menjalankan PIP tampaknya berhasil:

ekspor CPLUS_INCLUDE_PATH = / usr / include / gdal

export C_INCLUDE_PATH = / usr / include / gdal

selimnairb
sumber
6

Masalah dengan pip menginstal gdal adalah bahwa ia hanya mendapatkan binding, bukan seluruh perpustakaan, sehingga bisa menjadi rumit. Salah satu cara untuk mengatasinya adalah dengan menggunakan perintah pip untuk mengunduh - tetapi tidak menginstal. Kemudian Anda men-tweak lokasi header dari file konfigurasi. Kemudian Anda menginstalnya. meh.

Saya mengalami masalah yang sama tetapi menyadari bahwa menulis skrip kain untuk mengkompilasi ulang gdal dan menghasilkan binding python akan memakan waktu lebih sedikit. Anda bahkan mendapatkan manfaat dari filegdb dengan itu. Silakan dan gunakan inti yang saya tulis atau sesuaikan dengan isi hati Anda.

Ragi Yaser Burhum
sumber
3

Sementara beberapa saat kemudian, ini memberikan path include tanpa harus bail out dari instalasi pip: Seseorang dapat mengatur path include menggunakan variabel lingkungan.

Dengan asumsi header di / usr / include / gdal, isikan a

export CPLUS_INCLUDE_PATH=/usr/include/gdal

sebelum menjalankan pip.

Crischan
sumber
Dengan menggunakan ini, saya mendapatkan "extensions / gdalconst_wrap.c: 2732: 18: kesalahan fatal: gdal.h: Tidak ada file atau direktori" meskipun gdal.h hadir di/usr/include/gdal
anand.trex
1
Apakah menggunakan C_INCLUDE_PATH sebagai gantinya / tambahan membantu =?
Crischan
3

Setelah melihat ke kanan dan ke kiri untuk solusi, berikut adalah sesuatu yang bekerja untuk saya di Ubuntu 14.04, bahkan dari dalam virtualenv tanpa akses ke paket sistem:

  • Instal dependensi:

    sudo apt-get install libgdal-dev libgdal1h libgdal1-dev
  • Setel flag kompiler:

    export CFLAGS=$(gdal-config --cflags)
  • Instal versi yang sesuai dengan pustaka sistem (pada saat penulisan Ubuntu Trusty menggunakan header 1,10):

    pip install GDAL==1.10.0
FX
sumber
juga bekerja untuk saya di ubuntu 16.04
Luke W
2

Sekarang Anda dapat menggunakan versi virtualenv dan setuptools yang ramah dari binding python GDAL python standar .

drnextgis
sumber
2

Saya mengalami masalah serupa di Mac. Inilah cara saya mengatasinya:

Pertama, saya mengatur lingkungan virtual Python 2.7 menggunakan virtualenv. Distribusi Python dipasang di direktori yang disebut 'env'.

Saya kemudian menggunakan fink untuk menginstal gdal

fink selfupdate
fink update-all
fink install gdal

Saya juga menginstal gdal-dev tetapi ini mungkin tidak diperlukan karena mungkin sudah diinstal dengan gdal.

Saya memeriksa versi yang diinstal menggunakan:

gdal-config --version

Pada instalasi saya, itu menghasilkan hasil 1.11.1

Instalasi fink dari gdal menginstal file header cpl_port.h di / sw / include / gdal1. Periksa instalasi Anda sendiri. Saya kemudian masuk:

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

Itu sepertinya bekerja untuk saya tetapi saya belum menguji instalasi.

pengguna1718097
sumber
2

Pada Fedora 24 yang memiliki repositori GDAL 2.0.2, saya harus menginstal paket Python seperti ini:

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

Saya mendapatkan kesalahan yang sama ketika mencoba untuk menginstal binding GDAL python pada mac (OS 10.10.5). Saya menginstal perangkat lunak dasar GDAL dari http://www.kyngchaos.com/software/frameworks menggunakan unduhan "Lengkap". Saya harus menetapkan tiga variabel lingkungan.

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 / Version / Current / unix / lib

Bagian terakhir adalah menambahkan /Library/Frameworks/GDAL.framework/Programs ke PATH saya.

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

Setelah itu pip dapat menginstal GDAL untuk python. Semoga ini membantu.

Gary Kahn
sumber
1

Paket gdal ini 0.10.1 berfungsi dengan baik untuk Ubuntu 12.04: https://launchpad.net/~ubuntugis/+archive/ubuntu/ubuntugis-unstable/+sourcepub/4353415/+listing-archive-extra

Paket gdal 0.10.1 untuk versi ubuntu lainnya: https://launchpad.net/~ubuntugis/+archive/ubuntu/ubuntugis-unstable/+packages?field.name_filter=gdal&field.status_filter=published&field.series_filter=

signo
sumber
Saya memiliki masalah dengan gdal 1.10.1juga, dan hanya melakukan hal berikutpip install --global-option=build_ext --global-option="-I/usr/include/gdal" gdal==1.10.0
ryanjdillon
1

Untuk menjawab aspek spesifik virtualenv dari pertanyaan:

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

Waspadalah yang pygdalmungkin membutuhkan versi GDAL yang berbeda, dibandingkan dengan apa yang GDALdibutuhkan paket binding python.


Di bawah ini adalah apa yang saya gunakan untuk mendapatkannya di versi terbaru dari Fedora (20 dan 23).

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

Menginstal melalui Pip dengan Perintah Tunggal

Dengan asumsi paket pengembangan GDAL diinstal dan versi file header sudah benar, satu-satunya perintah yang diperlukan untuk menginstal GDAL dari repo PyPI adalah sebagai berikut:

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

Ini jelas mengasumsikan lokasi file header /usr/include/gdal.

Instal GDAL Terbaru

Untuk menginstal GDAL dengan perintah pip di atas, versi file header harus serupa dengan versi yang akan dibuat oleh pip. GDAL memiliki referensi biner yang diperbarui di: https://trac.osgeo.org/gdal/wiki/DownloadingGdalBinaries .

Cara Menginstal di OpenSUSE

Mengikuti tautan di atas, ada URL yang tertanam lebih jauh ke bawah ke paket GIS terbaru untuk OpenSUSE 42.1 http://download.opensuse.org/repositories/Application:/Geo/openSUSE_Leap_42.1/Application: Geo.repo

zypper ar -f <URL>

Ganti dengan paket yang sesuai. Dan jika tidak menggunakan zypperada info lebih lanjut di https://trac.osgeo.org/gdal/wiki/DownloadingGdalBinaries

DanCat
sumber
1

Saya memiliki masalah yang sama pada Windows 10. Setelah beberapa percobaan saya datang dengan solusi ini.

  1. Unduh dan pasang Python 3.6 (jika tidak diinstal) setelah instalasi mengubah variabel lingkungan PYTHONPATH=c:\python36 PATH=C:\python36\Scripts\;C:\python36\;%PATH%
  2. Unduh * .whl untuk versi python yang benar dari https://www.lfd.uci.edu/~gohlke/pythonlibs/#gdal
  3. Mendownload dan menginstal http://landinghub.visualstudio.com/visual-cpp-build-tools
  4. pip install *.whl (* .whl dari langkah2)
zimirrr
sumber
thnx, saya pikir python telah menginstal lingkungan secara otomatis, tetapi kemudian saya menghapus dan menciptakan kembali lingkungan ketika Anda menyarankan semuanya berfungsi seperti pesona.
Florjan
1

Jika Anda menggunakan Docker, kami membuka sumber kami, yang menyederhanakan menggunakan GDAL dan Python 3. Kontainer menangkap langkah-langkah yang diuraikan di atas untuk memungkinkan Anda menggunakan GDAL dengan cepat dengan aplikasi Anda.

thinkwhere / gdal-python

Iain Hunter
sumber
0

Jika Anda menjalankan distro berbasis Debian, pustaka python GDAL tersedia melalui manajer paket Anda dan dapat dengan mudah diinstal dengan

sudo apt install python-gdal atau sudo apt install python3-gdal

Alex McVittie
sumber
0

Di Ubuntu 16.04 dengan conda dalam wadah buruh pelabuhan (tumpukan 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
sumber
0

Di ubuntu, solusi yang lebih sederhana untuk menginstal gdal terbaru untuk python3: menginstal file library via libgdal-dev, dan python wrapper viapython-gdal

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

untuk python2:

sudo apt-get install python-gdal
Beahacker
sumber
0

Anda juga dapat mengalami masalah dengan penggunaan memori.

Saat menjalankan pip install gdal==2.2.3gcc diluncurkan untuk mengkompilasi sesuatu dan itu meningkatkan penggunaan memori.

Jika Anda tidak memiliki cukup memori, kompiler gagal, dengan pesan seperti

'x86_64-linux-gnu-gcc' gagal dengan status keluar 4

Untuk memperbaikinya, Anda perlu menambahkan lebih banyak ram atau membebaskan beberapa.

Yvain
sumber
0

Pendekatan ini bekerja untuk saya:

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)

Atau sebagai bagian dari 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
sumber
0

Jika Anda menggunakan Travis CI dan memerlukan versi GDAL terbaru untuk Python, berikut adalah contoh bagian dari .travis.ymlfile yang akan terlihat:

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
sumber