В пакете 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 в виртуальной среде. ! [введите описание изображения здесь ] ( i.stack.imgur.com/EVLWP.jpg )
Хаят Хан

Ответы:

94

Ответ 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 - вот что на самом деле делает.
Боздоз
Это сработало для меня.
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.
Беруик,
34

Заголовочные файлы не могут быть найдены по какой-либо причине. Может быть, вы работаете внутри Виртуальной среды, или они не там, где должны быть по какой-то причине. В любом случае вы можете указать include dirs при установке gdal через pip.

Первая загрузка Python's GDAL:

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

и ты в порядке!

nickves
источник
3
Привет, спасибо за ваш ответ, но мне действительно нужен способ установки через pip, так как я буду создавать изолированные среды, используя virtualenv во время процесса CI.
Кевин
1
что выводится, когда вы запускаете «gdal-config --version» и «gdal-config --libs»?
nickves
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 для homebrew - 1.11.3 и 1.11.4 для GDAL Complete. Я установил через 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 install путем передачи пути включения (префикс с sudoдля общесистемной установки) и указания pip для установки версии, совпадающей с установленной системой версией GDAL:

pip install --global-option=build_ext --global-option="-I/usr/include/gdal" GDAL==\`gdal-config --version\`
dennisobrien
источник
Ответы с более высоким рейтингом от selimnairb и Пола Уиппа не работали для меня в 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. Я сомневаюсь, что это будет иметь значение, если честно, но весь набор установки pip завершается успешно. U 12.04x64
vaxhax
12

Установка пакета Python gdalв virualenv в Linux

GDALпредоставляет хороший инструментарий для операций, связанных с GEO. Тем не менее, установка его в virtualenv в Linux не является тривиальной задачей.

Этот рецепт описывает, как это сделать.

нота

здесь я использую строчные буквы gdalдля пакета Python и прописные буквы GDALдля общесистемной библиотеки.

Требования

  • разрешить использование библиотек osgeo (установленных через gdalпакет Python) в virtualenv
  • разрешить установку на Linux Ubuntu

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

Есть несколько способов установки. Один требует компиляции и занимает несколько минут больше.

Другой использует пакет pygdalпакета колеса и очень быстр. В любом случае, для создания пакета wheel нужно создать его один раз, и в любом случае создание включает в себя этап компиляции.

О 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, который содержит исходные коды пакета и требует компиляции.

Предполагая, что версия GDALis 1.10.1и что наш virtualenv уже активирован:

$ pip install pygdal==1.10.1

Может потребоваться некоторое время, чтобы завершить, если это нужно NumPy, что также может потребовать некоторой компиляции. Просто подожди.

Проверьте, установлено ли:

$ pip freeze|grep pygdal
pygdal==1.10.1.0

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

Создание пакета колес для pygdal

Обратите внимание, что пакеты wheel должны быть созданы для точно такой же архитектуры, а именно должны соответствовать:

  • Архитектура процессора
  • ОС (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с колесных пакетов

Установка из пакетов в формате wheel выполняется намного быстрее (секунда по сравнению с минутами), так как не требует компиляции.

Обратите внимание, что каталог с пакетами wheel может иметь любое имя, мы будем использовать только имя wheelhouse.

Сначала активируйте virtualenv.

Убедитесь, что в каталоге рулевой рубки есть оба требуемых пакета колес (для pygdalи numpy).

Убедитесь, GDALчто установлен и версия соответствует версии pygdal.

Установить pygdalиз пакета колеса:

$ pip install pygdal==1.10.1.0 -f wheelhouse

-F рубка должна указывать на каталог с файлами whl.

Нет необходимости устанавливать numpy, он устанавливается автоматически.

Ян Влчинский
источник
Этот ответ основывается на других замечательных ответах здесь, пытается дать полные инструкции для деталей, в которых я застрял, и добавляет шаги для использования формата пакета wheel для ускорения повторных установок в virtualenv.
Ян Влчинский
pygdalдля победы!! pypi : «Virtualenv и setuptools дружественная версия стандартных привязок Python GDAL» <3
gisdude
9

Да, выполнение следующей операции перед запуском PIP:

export CPLUS_INCLUDE_PATH = / usr / include / gdal

export C_INCLUDE_PATH = / usr / include / gdal

selimnairb
источник
6

Проблема с pip, устанавливающим gdal, заключается в том, что он получает только привязки, а не всю библиотеку, поэтому он может быть сложным. Один из способов решить эту проблему - использовать команду pip для загрузки, но не для установки. Затем вы настраиваете расположение заголовка из файла конфигурации. Затем вы устанавливаете это. Мех.

У меня возникла та же проблема, но я понял, что написание сценария фабрики для перекомпиляции gdal и генерации привязок python займет меньше времени. Вы даже получаете преимущество filegdb с этим. Идите дальше и используйте суть, которую я написал, или подправьте ее к своему сердцу.

Раги Язер Бурхум
источник
3

Некоторое время спустя, это обеспечивает путь включения без необходимости спасения от установки pip: можно установить путь включения, используя переменную среды.

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

export CPLUS_INCLUDE_PATH=/usr/include/gdal

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

Crischan
источник
Используя это, я получаю «extensions / 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
FX
источник
также работал для меня на Ubuntu 16.04
Люк W
2

Теперь вы можете использовать virtualenv и setuptools дружественную версию стандартных привязок Python GDAL pygdal .

drnextgis
источник
2

У меня были похожие проблемы на Mac. Вот как я решил это:

Во-первых, я установил виртуальную среду Python 2.7, используя virtualenv. Дистрибутив Python был установлен в каталог с именем 'env'.

Затем я использовал Fink для установки GDAL

fink selfupdate
fink update-all
fink install gdal

Я также установил gdal-dev, но это, возможно, не требовалось, так как он, возможно, уже был установлен с gdal.

Я проверил версию, установленную с помощью:

gdal-config --version

На моей установке это дало результат 1.11.1

При установке fink в 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

Мне показалось, что это работает, но я еще не тестировал установку.

user1718097
источник
2

На Fedora 24, которая имеет GDAL 2.0.2 в своих репозиториях, мне пришлось установить пакет Python следующим образом:

pip install \
  --global-option=build_ext \
  --global-option="-I/usr/include/gdal/" \
  GDAL==2.0.1
akaihola
источник
2

Я получал похожую ошибку при попытке установить привязки Python GDAL на Mac (OS 10.10.5). Я установил базовое программное обеспечение GDAL с http://www.kyngchaos.com/software/frameworks, используя «Complete». Мне пришлось установить три переменные среды.

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

После этого pip смог установить GDAL для Python. Надеюсь это поможет.

Гари Кан
источник
1

Эти пакеты gdal 0.10.1 хорошо работают для Ubuntu 12.04: https://launchpad.net/~ubuntugis/+archive/ubuntu/ubuntugis-unstable/+sourcepub/4353415/+listing-archive-extra

Пакеты gdal 0.10.1 для другой версии Ubuntu: https://launchpad.net/~ubuntugis/+archive/ubuntu/ubuntugis-unstable/+packages?field.name_filter=gdal&field.status_filter=published&field.series_filter=

Signo
источник
У меня была проблема с 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
Kevin
источник
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-адрес, встроенный в нижнюю точку обновленного набора ГИС-пакетов для 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

DanCat
источник
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 (* .wl с шага 2)
zimirrr
источник
THNX, я думал, что Python установил автоматически среды, но затем я удалил и воссоздал среды, как вы предложили, все работает как шарм
Флориан
1

Если вы используете Docker, мы открываем исходный код нашего контейнера, что упрощает использование GDAL и Python 3. Контейнер содержит шаги, описанные выше, чтобы вы могли быстро использовать GDAL с вашими приложениями.

thinkwhere / GDAL-Python

Иан хантер
источник
1

Этот подход работал для меня:

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

Если вы используете дистрибутив на основе Debian, библиотеки Python GDAL доступны через ваш менеджер пакетов и могут быть просто установлены с

sudo apt install python-gdal или же sudo apt install python3-gdal

Алекс МакВитти
источник
0

В Ubuntu 16.04 с conda в докер-контейнере (стек jupyter)

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
beahacker
источник
0

Вы также можете столкнуться с проблемой использования памяти.

При запуске pip install gdal==2.2.3gcc запускается для компиляции чего-либо, и это увеличивает использование памяти.

Если у вас недостаточно памяти, произойдет сбой компилятора с сообщением

Сбой x86_64-linux-gnu-gcc со статусом выхода 4

Чтобы это исправить, вам нужно добавить больше оперативной памяти или освободить некоторые.

Yvain
источник
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`
Майк Т
источник