【问题标题】:Python GDAL package missing header file when installing via pip通过 pip 安装时 Python GDAL 包缺少头文件
【发布时间】:2012-07-04 22:53:00
【问题描述】:

我正在尝试在虚拟环境 (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 找到头文件?

【问题讨论】:

    标签: python gdal


    【解决方案1】:

    正如the other thread 中所建议的,在运行 pip 之前导出一些 shell 变量可以完美地工作。可以使用gdal-config --cflags 找到*_INCLUDE_PATH 的路径。

    # GDAL library must have been installed
    sudo apt-get install libgdal-dev
    
    # Set up pip and/or virtualenv stuff
    ...
    
    # Now install Python binding for GDAL
    export CPLUS_INCLUDE_PATH=/usr/include/gdal
    export C_INCLUDE_PATH=/usr/include/gdal
    pip install GDAL
    

    【讨论】:

    • 这为我修复了它,但也请参阅@Neil Smith 的回答:在 Ubuntu 14.04 中,您需要匹配系统上安装的 libgdal 的版本。
    • 仍然认为这是错误。 gdal_wrap.cpp 应该#include "gdal/cpl_port.h" 而不仅仅是 "cpl_port.h"
    • 绝对不适合我。仍然是相同的 cpl_port.h 错误。使用 OpenSUSE
    • pip3 install GDAL==$(gdal-config --version) 显式版本号应与您现有的 libgdal 版本匹配。
    【解决方案2】:

    Tomyun 的回答对我有用,但前提是您必须确保通过apt-get 安装的 GDAL-dev 版本与pip 安装的版本相匹配。

    对于 Ubuntu 14.04,命令是:

    # GDAL library must have been installed
    sudo apt-get install libgdal-dev
    
    # Set up pip and/or virtualenv stuff
    ...
    
    # Now install Python binding for GDAL
    export CPLUS_INCLUDE_PATH=/usr/include/gdal
    export C_INCLUDE_PATH=/usr/include/gdal
    pip3 install GDAL=1.10.0
    

    【讨论】:

    • 我也使用 Ubuntu 14.04。对我来说它没有用(我没有 virtualenv)。只有当我将最后一行更改为这一行时: sudo pip3 install --global-option=build_ext --global-option="-I/usr/include/gdal" GDAL==1.10.0
    • pip3 install GDAL==$(gdal-config --version) 适用于所有版本。
    【解决方案3】:

    使用画中画

    pip install --no-install GDAL
    

    然后 cd 进入 ENV/build/GDAL

    python setup.py build_ext --include-dirs=/usr/include/gdal
    pip install --no-download GDAL
    

    (来源:http://ubuntuforums.org/showthread.php?t=1769445

    使用构建

    [gdal-bindings]
    recipe = zc.recipe.egg:custom
    egg = GDAL==1.9.1
    include-dirs = /usr/include/gdal
    library-dirs = /usr/lib
    

    【讨论】:

    • 如果您使用 Kyngchaos 安装,这也可能是 OSX 上的 include-dirs=/Library/Frameworks/GDAL.framework/Versions/2.1/Headers/...
    【解决方案4】:

    取自comment,它直接解决了我的问题

    pip3 install GDAL==$(gdal-config --version) 
    

    显式版本号应与您现有的 libgdal 版本相匹配。 ——

    【讨论】:

      【解决方案5】:

      当我在虚拟环境中测试安装依赖于 GDAL 的包时,我也遇到了这个错误。在这种情况下,解决方案是将setup.pyinstall_requires 参数中的依赖关系从GDAL 更改为pygdal。像这样:

      install_requires=['pygdal'],

      【讨论】:

        【解决方案6】:

        这对我有用:

        我必须获得最新的听者版本才能通过 pip 安装 gdal 2.2.4:

        sudo apt-add-repository ppa:ubuntugis/ubuntugis-unstable
        sudo apt update
        sudo apt install libgdal-dev
        

        在此之前,我得到了extensions/gdal_wrap.cpp:3172:27: fatal error: cpl_vsi_error.h: No such file or directory,即使包含正确的“包含”路径到 pip。

        pip 安装(在 virtualenv 中):

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

        【讨论】:

          【解决方案7】:

          尝试做: 酿造安装gdal

          然后再试一次。

          【讨论】:

          • brew 仅适用于 Mac,而 OP 使用 Ubuntu
          最近更新 更多