rasterio 和 shapely 之间有冲突吗? 源代码分发

问题描述

我尝试使用需要 shapely 模块的 natcap.invest 模块,并在我的项目中使用 Rasterio 模块。如果我只是导入 natcap.invest 模块,它可以成功运行。但是,如果我同时导入 natcap.invest 和 Rasterio,它似乎无法工作。

[case1] 当我导入光栅 before 运行主代码时,它在运行主代码时报告:GEOSGeom_createLinearRing_r 返回一个空指针。

[case2]当我导入Rasterio 之后我运行主代码成功,它在导入Rasterio模块时报告:ImportError: DLL load Failed: the given module is not found.

代码如下:

import logging
import sys
import numpy as np
import natcap.invest.hydropower.hydropower_water_yield
import natcap.invest.utils

import xarray as xr
import Rasterio                      # case 1



# main code
LOGGER = logging.getLogger(__name__)
root_logger = logging.getLogger()

handler = logging.StreamHandler(sys.stdout)
formatter = logging.Formatter(
    fmt=natcap.invest.utils.LOG_FMT,datefmt='%m/%d/%Y %H:%M:%s ')
handler.setFormatter(formatter)
logging.basicConfig(level=logging.INFO,handlers=[handler])

args = {
    'biophysical_table_path': 'F:/biophysical_table_gura.csv','depth_to_root_rest_layer_path': 'F:/depth_to_root_restricting_layer_gura.tif','do_scarcity_and_valuation': False,'eto_path': 'F:/reference_ET_gura.tif','lulc_path': 'F:/land_use_gura.tif','pawc_path': 'F:/plant_available_water_fraction_gura.tif','precipitation_path': 'F:/precipitation_gura.tif','results_suffix': 'temp1','seasonality_constant': '5','sub_watersheds_path': '','watersheds_path': 'F:/watershed_gura.shp','workspace_dir': 'F:/OUTPUT',}

if __name__ == '__main__':
    natcap.invest.hydropower.hydropower_water_yield.execute(args)     # where error of case 1 occurs.




import Rasterio                   # case 2     # where error of case 2 occurs.

有什么办法可以同时成功导入和使用这两个模块吗?

解决方法

如果两个模块导入不同版本的 GEOS 库,可能会出现问题。确保您从相同的源安装这两个模块,或者从源中针对相同的 GEOS 库构建它们。

文档中提供了有关如何执行此操作的更多信息:https://shapely.readthedocs.io/en/latest/project.html#installing-shapely

构建发行版

内置发行版是没有或没有的用户的唯一选择 不知道如何使用他们平台的编译器和 Python SDK,以及 对于不想打扰的用户来说是个不错的选择。

Linux、OS X 和 Windows 用户可以使用 GEOS 获得 Shapely 轮子 包含在 Python Package Index 和最新版本的 pip 中 (8+):

$ pip install shapely

Shapely 可通过 apt 等系统包管理工具获得, yum 和 Homebrew,也由流行的 Python 提供 像 Canopy 和 Anaconda 这样的发行版。如果您使用 Conda 包 manager 要安装 Shapely,请务必使用 conda-forge 渠道。

Windows 用户还有另一个不错的安装选项:轮子 发布于 https://www.lfd.uci.edu/~gohlke/pythonlibs/#shapely。 这些可以通过指定整个 URL 使用 pip 安装。

源代码分发

如果您想从源代码构建 Shapely 以与其他 依赖 GEOS 的模块(例如 cartopy 或 osgeo.ogr)或想要 使用与项目中包含的版本不同的 GEOS 版本 你应该首先安装 GEOS 库、Cython 和 Numpy 您的系统(使用 apt、yum、brew 或其他方式),然后直接 pip 忽略二元轮。

$ pip install shapely --no-binary shapely

如果您已将 GEOS 安装到标准位置,则 geos-config 程序将用于获取编译器和链接器选项。如果 geos-config 不在您的可执行文件中,可以使用 GEOS_CONFIG 环境变量,例如:

$ GEOS_CONFIG=/path/to/geos-config pip install shapely