通过pip安装时,Python GDAL软件包缺少头文件


68

我意识到这个网站存在之前,我曾在Stack Overflow上问过这个问题。由于该站点更合适,因此我也会在这里提出要求。

我正在尝试从pip install gdal虚拟环境(Ubuntu)中的pip安装gdal 。失败,因为找不到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上有类似的问题,通过虚拟环境中的pip安装gdal。![在此处输入图片描述 ](i.stack.imgur.com/EVLWP.jpg
Hayat Khan,

Answers:


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 2014年

这对我有用。
jaranda 2014年

1
很好。如果系统和python软件包中GDAL的安装版本不同,则它将失败。解决方案是在系统中找到GDAL版本,并指示pip安装相关的python软件包版本。以我的情况(Ubuntu 14.04)均为10.0,所以它有所帮助$ pip install GDAL==10.0
Jan Vlcinsky 2014年

4
我可以使用确认这在Ubuntu 16.04上有效pip install GDAL==1.10.0
比利时

34

由于某种原因找不到头文件。也许您是在虚拟环境中操作,或者由于某种原因它们不在应有的位置。在任何情况下,通过pip安装gdal时都可以指定include dirs。

首先下载python的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

你很高兴去!


3
您好,谢谢您的回答,但是我真的需要一种通过pip进行安装的方法,因为我将在CI流程中使用virtualenv创建隔离的环境。
凯文2012年

1
当您运行“ gdal-config --version”和“ gdal-config --libs”时,输出是什么?
尼克

GDAL v1.9.1。gdal-config --libs -> -L/usr/lib -lgdal
凯文

2
@nickves我正在尝试在Ubuntu中使用virtualenvwrapper安装GDAL,当我尝试第一行:时pip install --no-install GDAL,出现错误:__main__.gdal_config_error: [Errno 2] No such file or directory知道吗?
theJollySin

3
我最近在OSX上安装GDAL时过得很愉快。当前,用于GDAL的最新Python绑定依赖于2.1,但是自制软件中可用的最新GDAL是1.11.3,而用于GDAL Complete的最新版本是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 2016年

17

在遵循了此建议的子集之后,这就是我如何安装Python GDAL 1.11.0(该解决方案应与版本无关,请参阅下文)的方法,以便在带pip的Ubuntu 14.04上运行:

安装依赖项:

sudo apt-get install libgdal-dev libgdal1h

通过传递包含路径(sudo用于系统范围安装的前缀)并指示pip安装与系统安装的GDAL版本匹配的版本来进行pip安装:

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

来自selimnairb和Paul Whipp的较高评分答案在Ubuntu 15.10上对我不起作用,而这个答案对我有用。
rhunwicks 2015年

1
在从@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

gdal在Linux上将Python软件包安装到virualenv中

GDAL为GEO相关操作提供了很好的工具包。但是,在Linux上将其安装到virtualenv并非易事。

本食谱描述了如何做到这一点。

注意

在这里,我将小写gdal用于Python程序包,将大写GDAL用于一般系统范围的库。

要求

  • 允许使用osgeo库(通过gdalPython软件包安装)到virtualenv
  • 允许在Linux Ubuntu上安装

安装方式

有多种安装方法。一个需要编译,并且要花几分钟的时间。

另一种是使用轮式包装的pygdal包装,速度很快。无论如何,要创建轮包,就需要创建一次,并且创建过程始终包括编译步骤。

关于GDAL软件包和版本

GDAL 是用于GEO相关计算的通用C(++)库。

GDAL 可以在系统范围内安装实用程序,这使得共享库可用,但不会安装Python包本身。

GDAL 有不同的版本,每个Linux发行版可能默认安装不同的版本。

Python软件包gdal需要编译,并且在基于Linux的系统上安装并不容易,因为它希望设置很少的环境变量。这使得安装到virtualenv更加困难。

每个gdal版本可能假定使用不同的版本,GDAL并且如果系统中没有预期的版本,则安装将失败。

Python包pygdal是的替代品gdal,它安装了与完全相同的东西gdal,但是以更友好的virtualenv方式进行安装。

pygdal提供反映相关GDAL版本的版本。因此,GDAL 在系统中有1.10.1版时,您应该安装pygdal1.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

从现在开始,您可以按照自己喜欢的方式在Python代码中使用osgeo软件包,就像使用gdalPython软件包安装osgeo软件包一样。

创建用于 pygdal

请注意,必须为完全相同的架构创建轮包,即必须匹配:

  • CPU架构
  • 作业系统(Linux / Windows)

在我们的情况下,它还必须与GDAL已安装的版本匹配。

您可以根据需要在virtualenv中完成以下步骤。

首先,请确保已安装轮包:

$ pip install wheel

假设您已经GDAL安装并且其版本为1.10.1:

$ pip wheel pygdal==1.10.1.0

然后等待,直到完成。

在这之后,您将找到子目录wheelhouse,其中应包含扩展名为“ 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软件包的目录可以具有任何名称,我们将仅使用名字wheelhouse。

首先激活virtualenv。

确保在驾驶室目录中拥有两个必需的轮包(用于pygdalnumpy)。

确保GDAL已安装,并且版本与的版本匹配pygdal

pygdal从车轮包装上安装:

$ pip install pygdal==1.10.1.0 -f wheelhouse

-f操舵室应指向带有whl文件的目录。

无需安装numpy,它会自动安装。


这个答案基于其他出色的答案,试图给出详细的完整说明,但在这里我陷入了困境,并增加了使用轮包格式来加快重复安装到virtualenv的步骤。
Jan Vlcinsky 2014年

pygdal为了胜利!!pypi:“标准GDAL python绑定的Virtualenv和setuptools友好版本” <3
gisdude

9

是的,在运行PIP之前执行以下操作似乎有效:

导出CPLUS_INCLUDE_PATH = / usr / include / gdal

导出C_INCLUDE_PATH = / usr / include / gdal


6

pip安装gdal的问题在于,它仅获取绑定,而不是整个库,因此可能会很棘手。解决该问题的一种方法是使用pip命令下载-但不安装。然后,从配置文件中调整标题位置。然后你点安装。嗯

我遇到了同样的问题,但意识到编写结构脚本来重新编译gdal并生成python绑定将花费更少的时间。您甚至可以从中获得filegdb的好处。继续使用我写的内容,或将其调整到您满意的程度。


3

过了一会儿,这提供了include路径,而不必退出pip安装:可以使用环境变量来设置include路径。

假设标头位于/ usr / include / gdal中,请发出

export CPLUS_INCLUDE_PATH=/usr/include/gdal

在运行点之前。


使用此方法,即使gdal.h存在于/usr/include/gdal
anand.trex,2013年

1
是否使用C_INCLUDE_PATH替代/另外有帮助?
Crischan 2013年

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

我在Mac上也遇到类似的问题。这是我解决的方法:

首先,我使用virtualenv建立了一个虚拟的Python 2.7环境。Python发行版安装在名为“ env”的目录中。

然后我用芬克安装了gdal

fink selfupdate
fink update-all
fink install gdal

我还安装了gdal-dev,但这可能不是必需的,因为它可能已经与gdal一起安装了。

我使用以下命令检查了安装的版本:

gdal-config --version

在我的安装中,结果为1.11.1

gdal的fink安装将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

在其存储库中具有GDAL 2.0.2的Fedora 24上,我必须像这样安装Python软件包:

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

2

尝试在Mac(OS 10.10.5)上安装python GDAL绑定时遇到类似的错误。我使用“完整”下载从http://www.kyngchaos.com/software/frameworks安装了基本的GDAL软件。我必须设置三个环境变量。

导出C_INCLUDE_PATH = / Library / Frameworks / GDAL.framework / Headers导出CPLUS_INCLUDE_PATH = / Library / Frameworks / GDAL.framework / Headers导出LIBRARY_PATH = / Library / Frameworks / GDAL.framework / Versions / Current / unix / lib

最后一步是将/Library/Frameworks/GDAL.framework/Programs添加到我的PATH。

echo'导出PATH = / Library / Frameworks / GDAL.framework / Programs:$ PATH'>>〜/ .bash_profile

之后,该点可以为python安装GDAL。希望这可以帮助。


1

这些gdal软件包0.10.1适用于Ubuntu 12.04: https : //launchpad.net/~ubuntugis/+archive/ubuntu/ubuntugis-unstable/+sourcepub/4353415/+listing-archive-extra

适用于其他ubuntu版本的gdal软件包0.10.1: https ://launchpad.net/~ubuntugis/+archive/ubuntu/ubuntugis-unstable/+packages?field.name_filter=gdal&field.status_filter=published&field.series_filter =


我也遇到了麻烦,请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,与GDALpython绑定软件包所要求的相比,可能需要不同版本的GDAL 。


以下是我用来在最新版本的Fedora(20和23)上获得的信息。

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

1

使用单个命令通过Pip安装

假设已安装GDAL开发包并且头文件版本正确,则从PyPI存储库安装GDAL所需的唯一命令如下:

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

显然,这假定头文件的位置是/usr/include/gdal

安装最新的GDAL

为了使用上面的pip命令安装GDAL,头文件的版本必须与pip进行构建的版本相似。GDAL在以下位置有更新的二进制参考:https : //trac.osgeo.org/gdal/wiki/DownloadingGdalBinaries

如何在OpenSUSE上安装

在上面的链接之后,有一个URL嵌入到指向OpenSUSE 42.1 的最新GIS软件包集的更进一步的下行位置http://download.opensuse.org/repositories/Application:/Geo/openSUSE_Leap_42.1/Application:地理回购

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. https://www.lfd.uci.edu/~gohlke/pythonlibs/#gdal下载* .whl以获取正确的python版本
  3. 下载并安装http://landinghub.visualstudio.com/visual-cpp-build-tools
  4. pip install *.whl (*。步骤2中的whl)

thnx,我以为python已自动安装了环境,但是随后我删除并重新创建了环境,因为您建议一切正常。
Florjan

1

如果您使用的是Docker,我们将开源容器,从而简化了GDAL和Python 3的使用。该容器捕获了上述步骤,可让您在应用程序中快速使用GDAL。

thinkwhere / gdal-python


0

如果您正在运行基于Debian的发行版,则可以通过软件包管理器使用GDAL python库,并且可以使用

sudo apt install python-gdal 要么 sudo apt install python3-gdal


0

在Ubuntu 16.04上,在Docker容器中有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中,一种为python3安装最新gdal的简单解决方案:通过安装库文件,通过libgdal-devpython包装器安装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

要修复它,您需要添加更多ram或释放一些。


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,并且需要Python的最新版本的GDAL,则以下示例说明.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`
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.