我意识到这个网站存在之前,我曾在Stack Overflow上问过这个问题。作为这个站点的更合适的地方,我也会在这里询问。

我正在尝试从虚拟环境(Ubuntu)中的pip pip install gdal安装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)

#1 楼

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。 ew!

(编辑2018)注意:
为确保安装正确的版本并避免出现任何问题。
使用gdal-config --version检索该版本。
然后:

pip install GDAL==version


评论


似乎是唯一可行的解​​决方案。

– bozdoz
2014年3月25日16:46

在另一个系统上进行了尝试,我认为这个加@nickves答案的组合实际上是在做什么。

– bozdoz
2014年3月31日23:33

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

– Jan Vlcinsky
2014年12月3日在22:17

我可以通过pip install GDAL == 1.10.0在Ubuntu 16.04上确认这一点。

–beruic
16年8月11日在15:38

在AWS Linux上,它对我有用,但我必须使用GDAL lib路径和$> sudo ldconfig更新LD_LIBRARY_PATH。

–herve
16年11月24日在11:07

#2 楼

由于某种原因找不到头文件。也许您是在虚拟环境中操作,或者由于某种原因它们不在应有的位置。无论如何,您都可以在通过pip安装gdal时指定包含目录。

首先下载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的另一种方法:

打开IDLE之后的
$ sudo apt-add-repository ppa:ubuntugis/ubuntugis-unstable
$ sudo apt-get update
$ sudo apt-get install python-gdal




from osgeo import gdal


,您一切顺利!

评论


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

–凯文
2012年7月8日在22:26

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

–尼克斯
2012年7月9日在9:40

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

–凯文
2012年7月9日17:35

@nickves我正在尝试在Ubuntu中使用virtualenvwrapper安装GDAL,当我尝试第一行时:pip install --no-install GDAL,出现错误:__main __。gdal_config_error:[Errno 2]没有这样的文件或目录?

–TheJollySin
13年3月23日在18:36

我最近在OSX上安装GDAL时过得很愉快。当前,用于GDAL的最新Python绑定取决于2.1,但自制软件中可用的最新GDAL是1.11.3,而用于GDAL Complete的最新版本是1.11.4。我通过自制软件安装,brew install gdal并使用了GDAL Python软件包的旧版本:pip install --global-option = build_ext --global-option =“-L / usr / local / include / gdal /”'gdal == 1.9.1'

– TestSubject
16 Jun 28'在0:02



#3 楼

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



安装依赖项:

 sudo apt-get install libgdal-dev libgdal1h
 



通过传递include进行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
15年11月17日在10:34

在从@nickves答案中添加不稳定的存储库后,第二行对我有用。谢谢大家!

–帕特里克·威廉姆斯(Patrick Williams)
16年5月24日在19:54

谢谢,这最终对我有用。尽管在尝试尽可能严格地坚持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
16年7月25日在21:32



#4 楼

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

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

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


note

我在Python包中使用小写gdal,而在
一般系统范围的库中使用大写GDAL


需求


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

安装方法

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

另一个需要使用pygdal程序包的轮包,而且速度非常快。

关于GDAL软件包和版本

GDAL是用于GEO相关计算的基于C(++)的通用库。 >
GDAL实用程序可以在整个系统范围内安装,这使得共享库可用,但不能安装Python软件包本身。

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

Python软件包gdal需要编译,并且在基于Linux的系统上安装并不容易,因为它期望设置很少的环境变量。这使得安装到virtualenv更加困难。 > Python软件包gdal替代了GDAL,后者完全安装了与pygdal相同的东西,但是以更加虚拟化的方式进行安装。gdal的版本反映了相关的gdal版本。因此,在系统中安装pygdal
1.10.1版本时,您应该安装GDAL版本1.10.1。

Python软件包GDAL(以及pygdal)使用名为
gdal的root python软件包。并具有一组子模块,其中一个是pygdal

如果需要,可以安装和使用默认版本的osgeo以外的其他子模块。这超出了本说明的范围。

车轮包可以交叉编译,这也超出范围。

osgeo.gdal安装到系统中

/>由于GDAL需要存在GDAL共享库,因此必须先安装


假设尚未安装pygdal,则致电GDAL会抱怨
并给您提示如何跟进:

$ 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-config且版本为1.10.1(版本
可以

从源代码包安装GDAL(需要编译)

当前,仅在tar.gz软件包中提供GDAL,该软件包包含
软件包源,需要编译。

,假设pygdal的版本为pygdal,并且我们的virtualenv已被激活:

$ pip install pygdal==1.10.1


它可能需要一个虽然需要完成,但是否需要numpy,这可能还需要一些编译。只需等待。

检查是否已安装:

$ pip freeze|grep pygdal
pygdal==1.10.1.0


从现在开始,您可以根据需要在Python代码中使用osgeo软件包。
与通过GDAL Python安装软件包的方式完全相同。

1.10.1创建滚轮软件包


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


CPU架构
OS(Linux / Windows)

在我们的情况下,它还必须匹配gdal的版本

可以根据需要在虚拟环境中进行以下步骤。

首先,确保已安装轮包:

$ pip install wheel


假设您已经安装了pygdal,并且它的版本为1.10.1: >
之后,您将找到子目录wheelhouse,其中应包含带有扩展名`whl`的软件包


$ pip wheel pygdal==1.10.1.0


从wheel软件包安装GDAL

从车轮格式化的软件包安装要快得多(与分钟相比,是一秒钟
),因为它不需要编译。

请注意,带有车轮软件包的目录可以有任何名称,我们将使用
名称wheelhouse。

首先激活virtualenv。

请确保您在wheelhouse di修复两个必需的轮包
(用于GDALpygdal)。

确保已安装pygdal,并且版本与numpy的版本匹配。 :

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


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

无需安装GDAL,它将被安装自动。

评论


此答案基于此处的其他出色答案,尝试提供详细的完整说明(我被困在其中),并添加了使用轮包格式来加快重复安装到virtualenv的步骤。

– Jan Vlcinsky
2014年12月4日在9:52

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

–gisdude
18年5月16日在18:13

#5 楼

是的,在运行PIP之前执行以下操作似乎可以正常工作:

导出CPLUS_INCLUDE_PATH = / usr / include / gdal

导出C_INCLUDE_PATH = / usr / include / gdal

#6 楼

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

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

#7 楼

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

头文件位于/ usr / include / gdal中,在运行pip之前发出

export CPLUS_INCLUDE_PATH=/usr/include/gdal



评论


使用此方法,即使/ usr / include / gdal中存在gdal.h,我也会收到“扩展名/gdalconst_wrap.c:2732:18:致命错误:gdal.h:没有此类文件或目录”

–anand.trex
13年5月26日,1:14

是否使用C_INCLUDE_PATH替代/另外有帮助?

– Crischan
13年6月13日在11:34

#8 楼

在左右寻找解决方案之后,即使在无权访问系统软件包的virtualenv内,也可以在Ubuntu 14.04上使用它:



安装依赖项:

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上工作

–卢克·W
18年5月25日在15:41

#9 楼

在其存储库中具有GDAL 2.0.2的Fedora 24上,我必须安装Python软件包,如下所示:

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


#10 楼

现在,您可以使用标准GDAL python绑定pygdal的virtualenv和setuptools友好版本。

#11 楼

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

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

然后我用fink安装gdal

fink selfupdate
fink update-all
fink install gdal


我还安装了gdal-开发人员,但可能不需要,因为它可能已经与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


这似乎对我有用,但我尚未测试安装。

#12 楼

尝试在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
export LIBRARY_PATH = / Library / Frameworks / GDAL.framework / Versions / Current / unix / lib

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

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

之后,该pip可以安装GDAL蟒蛇。希望这会有所帮助。

#13 楼

这些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安装--global-option = build_ext --global-option =“-I / usr / include / gdal” gdal == 1.10.0

–ryanjdillon
16年5月28日在20:29

#14 楼

要回答问题的virtualenv特定方面,请注意:
pip3 search gdal


与python绑定的pygdal软件包所需的版本不同的GDAL版本。


下面是我在最新版本的Fedora(20和23)上得到的东西。

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


#15 楼

使用单个命令通过Pip安装

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

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的最新GIS软件包集的更进一步的向下位置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了解更多信息

#16 楼

我在Windows 10上遇到了同样的问题。
经过一些实验,我找到了该解决方案。


下载并安装Python 3.6(如果未安装)
安装更改环境变量
PYTHONPATH=c:\python36
PATH=C:\python36\Scripts\;C:\python36\;%PATH%

从https://www.lfd.uci.edu/~gohlke/pythonlibs/#gdal下载* .whl以获取正确的python版本

下载并安装http://landinghub.visualstudio.com/visual-cpp-build-tools


pip install *.whl(步骤2中的* .whl)


评论


thnx,我以为python已自动安装了环境,但是随后我删除并重新创建了环境,因为您建议一切都像个魅力。

–弗洛里扬
18年11月15日在9:31

您与Visual Studio的链接不再起作用

–奥利维尔·庞斯(Olivier Pons)
19年11月13日在8:43

#17 楼

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

#18 楼

这种方法对我有用:

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)


#19 楼

如果您正在使用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`
 


#20 楼

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

sudo apt install python-gdalsudo apt install python3-gdal
安装

#21 楼

在Docker容器中的conda的Ubuntu 16.04上(jupyter堆栈)

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


#22 楼

在ubuntu中,一种为python3安装最新gdal的简单解决方案:通过libgdal-dev安装库文件,并通过python-gdal安装python包装器。

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

对于python2:

sudo apt-get install python-gdal


#23 楼

您可能还会遇到内存使用方面的问题。

运行pip install gdal==2.2.3 gcc时,它会进行编译,从而提高了内存使用率。编译器失败,并显示类似


的消息'x86_64-linux-gnu-gcc'失败,退出状态为4


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

#24 楼

这就是我在python3的virtualenv上的Ubuntu 18.04(我假设16.04相同)上安装gdal 2.x(非3.x)的方法:

# add the apt repo 
sudo add-apt-repository -y ppa:ubuntugis/ubuntugis-unstable
sudo apt update
sudo apt upgrade -y

# install gdal==2.2.3 on system
# NOTE: these may change in the future, you can check versions with: 
# apt-cache policy <package name>
sudo apt install -y libgdal20=2.2.3+dfsg-2 libgdal-dev=2.2.3+dfsg-2
sudo apt install -y gdal-bin=2.2.3+dfsg-2 python3-gdal=2.2.3+dfsg-2

# ensure that it worked
gdalinfo --version  # should print 'GDAL 2.2.3, released 2017/11/20'
# start a python3 interpreter NOT inside your virtualenv
>>> from osgeo import gdal
>>> gdal.__version__  # should print '2.2.3'

# activate virtualenv 
source .venv/bin/activate

# install inside virtualenv
export CPLUS_INCLUDE_PATH=/usr/include/gdal
export C_INCLUDE_PATH=/usr/include/gdal
pip3 install gdal==2.2.3

# ensure that it worked
# start a python3 interpreter INSIDE your virtualenv
>>> from osgeo import gdal
>>> gdal.__version__  # should print '2.2.3'


希望这会有所帮助!