Файл заголовка пакета Python GDAL відсутній під час встановлення через pip


68

Я поставив це запитання щодо переповнення стека ще до того, як зрозумів, що існує цей сайт. Оскільки цей сайт більш підходящий, я його запитаю і тут.

Я намагаюся встановити gdal з pip pip install gdalвсередині віртуального середовища (Ubuntu). Він не вдається, тому що не може знайтиcpl_port.h

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

Однак GDAL встановлений правильно і файл заголовка знаходиться за адресою /usr/include/gdal/cpl_port.h. Чи є якась змінна середовища для GDAL, яку потрібно встановити для того, щоб pip знаходив файли заголовка?


У мене є аналогічна проблема у Windows, встановлення gdal через pip у віртуальній env. ! [введіть тут опис зображень ] ( i.stack.imgur.com/EVLWP.jpg )
Хаят Хан

Відповіді:


93

Відповідь selimnairb близька, але у вас не буде заголовків, якщо ви не встановили libgdal-dev:

sudo apt-get install libgdal-dev

з цим,

export CPLUS_INCLUDE_PATH=/usr/include/gdal

export C_INCLUDE_PATH=/usr/include/gdal

і потім

pip install GDAL

Компіляція закінчилася, і я маю GDAL у своїй віртуальній середовищі. Фу!

(відредагувати 2018 р.) Примітка. Щоб бути впевненим, що ви встановите правильну версію та уникнете будь-яких проблем. отримати версію за допомогою gdal-config --version. і потім:

pip install GDAL==version

Здається, це єдине рішення, яке спрацювало.
bozdoz

1
Спробував це в іншій системі, і я думаю, що комбінація цієї відповіді плюс @nickves - це те, що насправді це робить.
bozdoz

Це працювало для мене.
jaranda

1
Дуже добре. У випадку, якщо встановлена ​​версія GDAL в пакеті системи та python відрізняється, вона не працює. Рішення полягає у пошуку версії GDAL у системі та дорученні pip встановити відповідну версію пакету python. У моєму випадку (Ubuntu 14.04) обидва - 10.0, тож це допомогло$ pip install GDAL==10.0
Ян Вльчинський

4
Я можу підтвердити, що це працює на Ubuntu 16.04 с pip install GDAL==1.10.0.
beruic

34

Файли заголовків з певних причин неможливо знайти. Можливо, ви працюєте всередині Віртуальної навколишнього середовища, або вони з певних причин не там, де вони повинні бути. У будь-якому випадку ви можете вказати включати dirs при установці gdal через pip.

спочатку скачайте gdal python:

pip install --no-install GDAL

у пізніших версіях pip (> = 9.0.0) pip install --no-installне існує:

pip download GDAL

то вкажіть, де розташовані заголовки:

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

потім встановіть його:

pip install --no-download GDAL

у пізніших версіях pip (> = 9.0.0) pip install --no-downloadне існує:

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

Ось ще один спосіб встановлення gdal python:

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

після цього відкрийте IDLE:

from osgeo import gdal

і ти добре підеш!


3
Привіт спасибі за вашу відповідь, але мені дуже потрібен спосіб встановлення через pip, оскільки я буду створювати ізольовані середовища з використанням virtualenv під час процесу CI.
кевін

1
Який вихід при запуску 'gdal-config --version' та 'gdal-config --libs'?
ніки

GDAL v1.9.1. gdal-config --libs -> -L/usr/lib -lgdal
кевін

2
@nickves Я намагаюся встановити GDAL за допомогою virtualenvwrapper в Ubuntu, і коли я спробую ваш перший рядок:, pip install --no-install GDALя отримую помилку: __main__.gdal_config_error: [Errno 2] No such file or directoryБудь-яка ідея?
theJollySin

3
Нещодавно у мене була чудова пора встановлення GDAL на OSX. Наразі останні прив’язки Python для GDAL залежать від 2.1, але остання доступна GDAL в домашній мові становить 1.11.3, а для GDAL завершена 1.11.4. Я встановив через homebrew brew install gdalі використав старішу версію пакету GDAL Python:pip install --global-option=build_ext --global-option="-L/usr/local/include/gdal/" 'gdal==1.9.1'
TestSubject

17

Дотримуючись підмножини цієї поради, ось як я отримав встановлення Python GDAL 1.11.0 (рішення повинно бути незалежним від версії, див. Нижче) для роботи на Ubuntu 14.04 з pip:

Встановити залежності:

sudo apt-get install libgdal-dev libgdal1h

встановити pip, пройшовши по шляху включення (префікс з sudoдля загальносистемної установки) та доручивши pip встановити версію, що відповідає встановленій системі версії GDAL:

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

Відповіді, які отримали більш високий рейтинг від selimnairb та Paul Whipp, не працювали для мене на Ubuntu 15.10, і це так.
rhunwicks

1
Другий рядок працював у мене після apt-додавання нестабільних сховищ з @nickves відповіді. Дякую всім!
Патрік Вільямс

1
Дякую, це закінчилося для мене. Хоча мені довелося трохи змінити, оскільки я намагаюся дотримуватися установки Cartodb якомога суворіше, я в кінцевому підсумку використовував це як останню робочу команду встановлення: sudo pip install --no-use-wheel -r python_requirements.txt --global-option=build_ext --global-option="-I/usr/include/gdal" python_requirements.txt визначає старішу версію gdal. Я сумніваюся, було б чесно, але весь набір встановлення файлів успішно завершується. U 12.04x64
vaxhax

12

Встановлення пакета Python gdalу virualenv в Linux

GDALзабезпечує приємний набір інструментів для операцій, пов'язаних з GEO. Однак встановити його на virtualenv в Linux не є тривіальною задачею.

У цьому рецепті описано, як це зробити.

Примітка

тут я використовую малі регістри gdalдля пакету Python та верхній регістр GDALдля загальної бібліотеки, що працює в системі.

Вимоги

  • дозволяють використовувати бібліотеки osgeo (встановлені через gdalпакет Python) у virtualenv
  • дозволяють встановити на Linux Ubuntu

Методи установки

Існує кілька методів установки. Один вимагає компіляції і займає кілька хвилин більше.

Інший використовує колесо з pygdalпакетом і дуже швидко. У будь-якому випадку, для створення колесного колеса потрібно створити його один раз, а створення все-таки включає етап компіляції.

Про GDALпакети та версії

GDAL - загальна бібліотека на основі C (++) для розрахунків, пов'язаних з GEO.

GDAL утиліти можна встановити системно, що робить спільні бібліотеки доступними, але не встановлює сам пакет Python.

GDAL поставляється в різних версіях, і кожен дистрибутив Linux за замовчуванням може встановити іншу версію.

Пакет Python gdalвимагає компіляції і не є тривіальним для встановлення на базі систем Linux, оскільки він очікує, що буде встановлено декілька змінних середовища. Це ускладнює встановлення у virtualenv.

Кожна gdalверсія може припускати іншу версію GDALі не вдасться встановити, якщо очікуваної версії немає в системі.

Пакет Python pygdal- це альтернатива тому gdal, що встановлює точно такі ж речі, як і gdal, але робить це набагато більш віртуально дружньо.

pygdalпоставляється у версіях, що відображають відповідну GDALверсію. Отже, маючи GDAL версію 1.10.1 в системі, ви повинні встановити pygdalверсію 1.10.1.

Пакет Python gdal(як і pygdal) використовує корінний пакет python, названий osgeoі має набір підмодулів, одна істота osgeo.gdal.

Якщо потрібно, GDALможна встановити та використовувати інші версії за замовчуванням . Це не входить до цього опису.

Пакети коліс можуть бути складені між собою, це також виходить за межі сфери.

Встановлення GDALв систему

Оскільки pygdalвимагає GDALприсутності спільних бібліотек, ми повинні їх встановити спочатку.

Якщо припустити, що GDALще не встановлено, дзвінок gdal-configпоскаржиться та підкаже, як слід подати далі:

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

Дотримуйтесь підказки та встановіть її:

$ sudo apt-get install libgdal-dev

Кожен дистрибутив може використовувати різні версії GDAL. Щоб дізнатися, які ми використовуємо:

$ gdal-config --version
1.10.1

Тепер ви знаєте, GDALвстановлено і версія 1.10.1 (версія може змінюватися).

Встановити pygdalз вихідного пакету (вимагає компіляції)

На даний момент pygdalнадається лише у пакунку tar.gz, який містить джерела пакунків та потребує компіляції.

Якщо припустити, що версія GDALє 1.10.1і що наші virtualenv вже активовані:

$ pip install pygdal==1.10.1

Це може зайняти деякий час, чи потрібен нумез, який також може вимагати певної компіляції. Просто зачекай.

Перевірте, він встановлений:

$ pip freeze|grep pygdal
pygdal==1.10.1.0

Відтепер ви можете використовувати пакет osgeo у вашому коді Python точно так само, як якщо б ви встановили його за допомогою gdalпакета Python.

Створення колесного пакету для pygdal

Зауважте, що колесові пакети повинні бути створені для такої самої архітектури, а саме повинні відповідати:

  • Архітектура процесора
  • ОС (Linux / Windows)

У нашому випадку він також повинен відповідати встановленій версії GDAL.

Наступні кроки можна зробити у virtualenv чи ні, як вам подобається.

По-перше, переконайтеся, що встановлений пакет колеса:

$ pip install wheel

Якщо припустити, ви GDALвстановили і вона має версію 1.10.1:

$ pip wheel pygdal==1.10.1.0

і чекайте, поки воно завершиться.

Після цього ви знайдете підкаталогічний будинок для рулівок, і він повинен містити пакунки з розширенням `whl`:

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

Встановити pygdalз колесних пакетів

Установка з пакетів, відформатованих колесом, відбувається набагато швидше (секунду порівняно з хвилинами), оскільки не потребує компіляції.

Зауважте, що каталог з колесними пакетами може мати будь-яку назву, ми будемо використовувати лише назву рубки.

Активуйте virtualenv спочатку.

Переконайтеся, що у каталозі рульових будинків є необхідні пакети коліс (для pygdalта numpy).

Переконайтесь, що GDALвстановлено та версія відповідає версії pygdal.

Встановити pygdalз колеса:

$ pip install pygdal==1.10.1.0 -f wheelhouse

Колірка -f повинна вказувати на каталог із файлами whl.

Не потрібно встановлювати numpy, він встановлюється автоматично.


цей захисник ґрунтується на інших чудових відповідях тут, намагається дати повну інструкцію щодо деталей, де я застряг та додає кроки для використання формату колесного пакету для прискорення повторних встановлень у virtualenv.
Ян Вльчинський

pygdalза перемогу!! pypi : "Virtualenv та setuptools дружній версії стандартних прив'язок пітонів GDAL" <3
gisdude

9

Так, перед тим, як запустити PIP, працює:

експортувати CPLUS_INCLUDE_PATH = / usr / include / gdal

export C_INCLUDE_PATH = / usr / include / gdal


6

Проблема з встановленням gpal на pip полягає в тому, що він отримує лише прив’язки, а не всю бібліотеку, тому він може отримати складність. Один із способів вирішити це - використовувати команду pip для завантаження, але не встановлення. Потім ви налаштуєте розташування заголовка з конфігураційного файла. Тоді ви встановите, що встановити піп. мех.

У мене виникли ті ж проблеми, але я зрозумів, що написання тканинного сценарію для перекомпіляції gdal та створення прив'язки пітона потребуватиме менше часу. Ви навіть отримаєте перевагу filegdb з цим. Вперед і користуйся тією історією, яку я написав або змістив її вмісту.


3

Незважаючи на деякий час, це забезпечує шлях включення без необхідності викорінювати встановлення файлів: можна встановити шлях включення за допомогою змінної середовища.

Припускаючи, що заголовки знаходяться в / usr / include / gdal, видайте an

export CPLUS_INCLUDE_PATH=/usr/include/gdal

перед запуском піп.


Використовуючи це, я отримую "розширення / gdalconst_wrap.c: 2732: 18: фатальна помилка: gdal.h: Немає такого файлу чи каталогу", навіть якщо gdal.h присутній у/usr/include/gdal
anand.trex

1
Чи використання C_INCLUDE_PATH замість / додатково допомагає =?
Кріщан

3

Подивившись праворуч і ліворуч на рішення, ось щось, що працює для мене на Ubuntu 14.04, навіть зсередини virtualenv без доступу до системних пакетів:

  • Встановити залежності:

    sudo apt-get install libgdal-dev libgdal1h libgdal1-dev
  • Встановити прапори компілятора:

    export CFLAGS=$(gdal-config --cflags)
  • Встановіть версію, відповідну системним бібліотекам (на момент написання Ubuntu Trusty використовує заголовки 1,10):

    pip install GDAL==1.10.0

також працював для мене на ubuntu 16.04
Luke W

2

Тепер ви можете використовувати virtualenv та зручну для встановлення версію стандартних GDAL python прив'язок pygdal .


2

У мене були подібні проблеми на Mac. Ось як я це вирішив:

По-перше, я створив віртуальне середовище Python 2.7 за допомогою virtualenv. Розподіл Python був встановлений у каталозі "env".

Потім я використовував фінк для встановлення gdal

fink selfupdate
fink update-all
fink install gdal

Я також встановив gdal-dev, але це може не знадобитися, оскільки воно, можливо, вже було встановлено з gdal.

Я перевірив встановлену версію за допомогою:

gdal-config --version

На моїй установці це дало результат 1.11.1

У фінальній установці gdal встановлено файл заголовка cpl_port.h в / sw / include / gdal1. Перевірте власну установку. Потім я ввійшов:

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

Це, здавалося, працює для мене, але я ще не перевірив установку.


2

На Fedora 24, який має GDAL 2.0.2 у своїх сховищах, мені довелося встановити пакет Python таким чином:

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

2

Я отримував подібну помилку під час спроби встановити прив'язки python GDAL на mac (ОС 10.10.5). Я встановив базове програмне забезпечення GDAL з веб-сайту http://www.kyngchaos.com/software/frameworks, використовуючи завантаження "Повне". Мені довелося встановити три змінні середовища.

export C_INCLUDE_PATH = / Бібліотека / Рамки / GDAL.framework / Заголовки експорту CPLUS_INCLUDE_PATH = / Бібліотека / Рамки / GDAL.framework / Експорт заголовків LIBRARY_PATH = / Бібліотека / Рамки / GDAL.framework / Версії / Поточний / Unix / lib

Останній твір повинен був додати /Library/Frameworks/GDAL.framework/Programs до моєї PATH.

echo 'export PATH = / Бібліотека / Рамки / GDAL.framework / Програми: $ PATH' >> ~ / .bash_profile

Після цього піп зміг встановити GDAL для python. Сподіваюся, це допомагає.


1

У мене теж були проблеми gdal 1.10.1, і я просто зробив наступнеpip install --global-option=build_ext --global-option="-I/usr/include/gdal" gdal==1.10.0
ryanjdillon,

1

Щоб відповісти на конкретний аспект питання virtualenv:

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

Остерігайтеся, що pygdalможе знадобитися інша версія GDAL, порівняно з тим, що GDALвимагає пакет зв'язків python.


Нижче описано те, що я використовував для отримання останніх версій Fedora (20 та 23).

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

1

Установка через Pip за допомогою єдиної команди

Якщо припустимо, що пакет розробки GDAL встановлений і версії файлів заголовка правильні, єдиною командою, необхідною для встановлення GDAL з репозиції PyPI, є наступна:

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

Це, очевидно, передбачає розташування файлів заголовків /usr/include/gdal .

Встановіть сучасний GDAL

Для того, щоб встановити GDAL з командою pip, наведеною вище, версія файлів заголовка повинна бути схожою на версію, в якій буде виконано збірку pip. У GDAL є оновлена ​​двійкова посилання за адресою: https://trac.osgeo.org/gdal/wiki/DownloadingGdalBinaries .

Як встановити на OpenSUSE

За вищенаведеним посиланням є URL-адреса, вбудована далі вниз, до актуального набору GIS-пакетів для OpenSUSE 42.1 http://download.opensuse.org/repositories/Application:/Geo/openSUSE_Leap_42.1/Application: Geo.repo

zypper ar -f <URL>

Замініть відповідним пакетом. А якщо не використовується zypper, більше інформації на https://trac.osgeo.org/gdal/wiki/DownloadingGdalBinaries


1

У мене була така ж проблема в Windows 10. Після деяких експериментів я прийшов з цим рішенням.

  1. Завантажте та встановіть Python 3.6 (якщо він не встановлений) після встановлення змін змінних середовища PYTHONPATH=c:\python36 PATH=C:\python36\Scripts\;C:\python36\;%PATH%
  2. Завантажте * .whl для правильної версії python від https://www.lfd.uci.edu/~gohlke/pythonlibs/#gdal
  3. Завантажте та встановіть http://landinghub.visualstudio.com/visual-cpp-build-tools
  4. pip install *.whl (* .whl з кроку 2)

thnx, я думав, python автоматично встановив середовища, але потім я видалив та відтворив середовища, як ти запропонував, що все працює як шарм.
Флорджан

1

Якщо ви використовуєте Docker, ми відкриваємо наш контейнер, що спрощує використання GDAL та Python 3. Контейнер фіксує описані вище кроки, щоб ви могли швидко використовувати GDAL у своїх додатках.

думки десь / gdal-python


0

Якщо ви використовуєте дистрибутив на базі Debian, бібліотеки python GDAL доступні через менеджера пакунків і їх можна просто встановити за допомогою

sudo apt install python-gdal або sudo apt install python3-gdal


0

У Ubuntu 16.04 з кондою в докер-контейнері (стек-джуптер)

apt-get update
apt-get install libgdal1-dev -y
gdal-config --version
export CFLAGS=$(gdal-config --cflags)
pip install GDAL==1.11.2

0

У ubuntu - більш просте рішення для встановлення останнього gdal для python3: встановлення файлів бібліотеки через libgdal-devі обгортки python черезpython-gdal

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

для python2:

sudo apt-get install python-gdal

0

Ви також можете зіткнутися з проблемою використання пам'яті.

При запуску pip install gdal==2.2.3gcc запускається, щоб щось компілювати, і це збільшує використання пам'яті.

Якщо у вас недостатньо пам'яті, компілятор виходить з ладу, з таким повідомленням

"x86_64-linux-gnu-gcc" не вдалося зі статусом виходу 4

Щоб виправити це, потрібно додати більше оперативної пам’яті або звільнити кілька.


0

Такий підхід спрацював для мене:

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)

Або як частина 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

Якщо ви використовуєте Travis CI і вам потрібна остання версія GDAL для Python, ось приклад того, як .travis.ymlвиглядатиме частина файлу:

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`
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.