【问题标题】:" could not find or load spatialindex_c.dll" in windows?“在 Windows 中找不到或加载 spatialindex_c.dll”?
【发布时间】:2017-08-27 04:35:58
【问题描述】:

系统:窗口

版本:python 3.6

我成功安装了 osmnx 和 Rtree。但是还是有错误。

我的代码:

> import osmnx as ox
> from Ipython.display import Image

> ox.config(log_file=True,log_console=True,use_cache=True)
> 
> img_folder='image'; extension='png'; size=700
> 
> place='shanghai' point=(121.48,31.22) > 
> fig,ax=ox.plot_figure_ground(point=point,filename=place,network_type='all',dpi=150)
> Image('{}/{}.{}'.fromat(img_folder,place,extension),height=size,width=size)

raise OSError("could not find or load spatialindex_c.dll")

OSError: 无法找到或加载 spatialindex_c.dll

这是什么意思,是什么原因造成的,应该如何解决?

【问题讨论】:

    标签: python dll


    【解决方案1】:

    我遇到了同样的问题“could not find or load spatialindex_c.dll”

    为我解决的是pip uninstall rtree。就是这样。 我在没有管理员的 Windows 7 服务器中使用 conda 环境。

    osmnxgeopandas 都出现在我的 env 中,其中包括 conda-forge 频道

    【讨论】:

    • 对我有用的有趣解决方案,知道为什么吗?
    • rtree 提供的索引可以显着加快处理时间,删除它可以消除由 rtree 编译问题引起的错误,但代价是执行时间变慢,因为库通常是为依赖 rtree 而构建的仅当它可用时。它往往是一个“可选依赖”
    • OSMnx 需要并使用 Rtree:这里肯定发生了其他事情。因此,我建议不要尝试这个,而是使用文档中的安装说明。
    • pip uninstall rtree 适用于 conda 中的 geopandas 错误(无法找到或加载 spatialindex_c-64.dll)
    【解决方案2】:

    如果您使用 conda,安装 OSMnx 并避免此问题的最简单方法是使用 conda-forge,如 the docs 所述:

    conda config --prepend channels conda-forge
    conda create -n ox --strict-channel-priority osmnx
    

    或者您可以直接从其官方docker container 运行 OSMnx(和 Jupyter)。

    【讨论】:

    【解决方案3】:

    这意味着你只认为你已经成功安装了 osmnx 或其依赖项之一。

    当然,很大程度上取决于您如何安装 osmnx - 当我在虚拟环境中尝试使用 pip 时,它失败了:

    Collecting OSMnx
      Downloading osmnx-0.5.3-py2.py3-none-any.whl (54kB)
        100% |████████████████████████████████| 61kB 183kB/s
    Collecting shapely>=1.5 (from OSMnx)
      Downloading Shapely-1.6.0.tar.gz (214kB)
        100% |████████████████████████████████| 215kB 2.0MB/s
        Complete output from command python setup.py egg_info:
        Traceback (most recent call last):
          File "<string>", line 1, in <module>
          File "C:\Users\STEVE-~1\AppData\Local\Temp\pip-build-9uqvlpcm\shapely\setup.py", line 80, in <module>
            from shapely._buildcfg import geos_version_string, geos_version, \
          File "C:\Users\STEVE-~1\AppData\Local\Temp\pip-build-9uqvlpcm\shapely\shapely\_buildcfg.py", line 200, in <module>
            lgeos = CDLL("geos_c.dll")
          File "C:\Python36_64\lib\ctypes\__init__.py", line 344, in __init__
            self._handle = _dlopen(self._name, mode)
        OSError: [WinError 126] The specified module could not be found
    
        ----------------------------------------
    Command "python setup.py egg_info" failed with error code 1 in C:\Users\STEVE-~1\AppData\Local\Temp\pip-build-9uqvlpcm\shapely\
    

    转到http://www.lfd.uci.edu/~gohlke/pythonlibs/#shapely 给了我一个我正在使用的python 的下载3.6(64 位),我通过下载然后在下载的文件上使用 pip 来安装它。

    重新运行 pip install OSMnx 我的下一个问题是 fiona 的编译,所以 Chris Gohlke 再次在 http://www.lfd.uci.edu/~gohlke/pythonlibs/#fiona 进行救援,其中有一个注释“需要 gdal”所以我跳到 http://www.lfd.uci.edu/~gohlke/pythonlibs/#gdal,而我在那里并安装首先。

    在运行您的第一次导入时,我得到了:

    >>> import osmnx as ox
    Traceback (most recent call last):
      File "F:\toolbuild\test_OSMnx\lib\site-packages\numpy\core\__init__.py", line 16, in <module>
        from . import multiarray
    ImportError: DLL load failed: The specified procedure could not be found.
    
    During handling of the above exception, another exception occurred:
    
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "F:\toolbuild\test_OSMnx\lib\site-packages\osmnx\__init__.py", line 8, in <module>
        from .buildings import *
      File "F:\toolbuild\test_OSMnx\lib\site-packages\osmnx\buildings.py", line 9, in <module>
        import geopandas as gpd
      File "F:\toolbuild\test_OSMnx\lib\site-packages\geopandas\__init__.py", line 1, in <module>
        from geopandas.geoseries import GeoSeries
      File "F:\toolbuild\test_OSMnx\lib\site-packages\geopandas\geoseries.py", line 5, in <module>
        import numpy as np
      File "F:\toolbuild\test_OSMnx\lib\site-packages\numpy\__init__.py", line 142, in <module>
        from . import add_newdocs
      File "F:\toolbuild\test_OSMnx\lib\site-packages\numpy\add_newdocs.py", line 13, in <module>
        from numpy.lib import add_newdoc
      File "F:\toolbuild\test_OSMnx\lib\site-packages\numpy\lib\__init__.py", line 8, in <module>
        from .type_check import *
      File "F:\toolbuild\test_OSMnx\lib\site-packages\numpy\lib\type_check.py", line 11, in <module>
        import numpy.core.numeric as _nx
      File "F:\toolbuild\test_OSMnx\lib\site-packages\numpy\core\__init__.py", line 26, in <module>
        raise ImportError(msg)
    ImportError:
    Importing the multiarray numpy extension module failed.  Most
    likely you are trying to import a failed build of numpy.
    If you're working with a numpy git repo, try `git clean -xdf` (removes all
    files not under version control).  Otherwise reinstall numpy.
    
    Original error was: DLL load failed: The specified procedure could not be found.
    

    我注意到 numpy 似乎已正确安装,但我知道它可能存在问题,所以转到http://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy,我们在其中找到一条注释:“Numpy+MKL 已链接到英特尔® 数学核心库并且在 numpy.core 目录中包含所需的 DLL。”所以我再次下载并安装。

    现在我正处于你的阶段:

    > import osmnx as ox
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "F:\toolbuild\test_OSMnx\lib\site-packages\osmnx\__init__.py", line 8, in <module>
        from .buildings import *
      File "F:\toolbuild\test_OSMnx\lib\site-packages\osmnx\buildings.py", line 9, in <module>
        import geopandas as gpd
      File "F:\toolbuild\test_OSMnx\lib\site-packages\geopandas\__init__.py", line 1, in <module>
        from geopandas.geoseries import GeoSeries
      File "F:\toolbuild\test_OSMnx\lib\site-packages\geopandas\geoseries.py", line 16, in <module>
        from geopandas.base import GeoPandasBase
      File "F:\toolbuild\test_OSMnx\lib\site-packages\geopandas\base.py", line 15, in <module>
        from rtree.core import RTreeError
      File "F:\toolbuild\test_OSMnx\lib\site-packages\rtree\__init__.py", line 1, in <module>
        from .index import Rtree
      File "F:\toolbuild\test_OSMnx\lib\site-packages\rtree\index.py", line 5, in <module>
        from . import core
      File "F:\toolbuild\test_OSMnx\lib\site-packages\rtree\core.py", line 116, in <module>
        raise OSError("could not find or load spatialindex_c.dll")
    OSError: could not find or load spatialindex_c.dll
    

    看起来问题出在 RTree 中,所以转到 http://www.lfd.uci.edu/~gohlke/pythonlibs/#rtree (注意这次我们必须先 pip uninstall rtree

    尝试您的代码,添加了几个换行符, 我再次收到超过经纬度限制的错误,因此交换两个值以设置 point=(31.22, 121.48),我得到这样的图像作为:

    来自:

    >>> fig,ax=ox.plot_figure_ground(point=point,filename=place,network_type='all',dpi=150)
    Projected the GeoDataFrame "geometry to project" to UTM-51 in 0.00 seconds
    Projected the GeoDataFrame "geometry to project" to EPSG 4326 in 0.00 seconds
    Created bounding box 966.0 meters in each direction from (31.22, 121.48): 31.228713053594067,31.211286934028642,121.49013858668467,121.46986147388169
    Projected the GeoDataFrame "geometry to project" to UTM-51 in 0.00 seconds
    Projected the GeoDataFrame "geometry to project" to EPSG 4326 in 0.00 seconds
    Requesting network data within bounding box from API in 1 request(s)
    Pausing 0.00 seconds before making API POST request
    Posting to http://www.overpass-api.de/api/interpreter with timeout=180, "{'data': '[out:json][timeout:180];(way["highway"]["area"!~"yes"]["highway"!~"proposed|construction|abandoned|platform|raceway"]["service"!~"private"]["access"!~"private"](31.21128693,121.46986147,31.22871305,121.49013859);>;);out;'}"
    Downloaded 480.6KB from www.overpass-api.de in 2.13 seconds
    Saved response to cache file "cache/8c99e35743a557d7234621c6d3fd7139.json"
    Got all network data within bounding box from API in 1 request(s) and 2.99 seconds
    Creating networkx graph from downloaded OSM data...
    Graph was not connected, retained only the largest weakly connected component (3,366 of 3,540 total nodes) in 0.15 seconds
    Created graph with 3,366 nodes and 6,926 edges in 0.19 seconds
    Added edge lengths to graph in 0.05 seconds
    Truncated graph by bounding box in 0.14 seconds
    Removed 0 isolated nodes
    Graph was not connected, retained only the largest weakly connected component (2,764 of 2,779 total nodes) in 0.13 seconds
    graph_from_bbox() returning graph with 2,764 nodes and 5,892 edges
    graph_from_point() returning graph with 2,764 nodes and 5,892 edges
    Begin topologically simplifying the graph...
    Identified 1,568 edge endpoints in 0.04 seconds
    Constructed all paths to simplify in 0.01 seconds
    Simplified graph (from 2,764 to 1,568 nodes and from 5,892 to 3,730 edges) in 0.15 seconds
    Created a GeoDataFrame from graph in 0.10 seconds
    Projected the GeoDataFrame "unnamed_nodes" to UTM-51 in 0.07 seconds
    Projected the GeoDataFrame "unnamed_edges" to UTM-51 in 0.29 seconds
    Extracted projected node geometries from GeoDataFrame in 0.04 seconds
    Rebuilt projected graph in 1.53 seconds
    Projected the GeoDataFrame "geometry to project" to UTM-51 in 0.00 seconds
    Created bounding box 805 meters in each direction from (31.22, 121.48) and projected it: 3455784.445871858,3454174.445871858,356022.8750159489,354412.8750159489
    Begin plotting the graph...
    Drew the graph edges in 0.05 seconds
    Saved the figure to disk in 0.11 seconds
    

    【讨论】:

    • 太好了!!感谢您的回答,我找到了另一种方法,只需使用“conda install -c conda-forge osmnx”
    【解决方案4】:

    在安装rtreepip 和来自Christoph Gohlke 的轮子Rtree-0.9.7-cp39-cp39-win_amd64.whl 后,我在Windows 中遇到了同样的错误。

    我可以看到执行import geopandas 或只是打开spyder 的错误。在这种情况下,错误是关于缺少依赖项rtree&gt;= 0.9.7: None (NOK) 的警告。

    在检查了站点包rtree文件夹C:\Users\mysuer\AppData\Roaming\Python\Python39\site-packages\rtree中的文件finder.py后,我看到了这行代码:

    # generate a bunch of candidate locations where the
    # libspatialindex shared library *might* be hanging out
    _candidates = [
        os.environ.get('SPATIALINDEX_C_LIBRARY', None),
        os.path.join(_cwd, 'lib'),
        _cwd,
        '']
    

    所以我找到了库所在的rtree 文件夹C:\Users\myuser\AppData\Roaming\Python\Lib\site-packages\rtree\lib,并创建了一个针对该文件夹的环境变量。

    Variable name Variable value
    SPATIALINDEX_C_LIBRARY C:\Users\myuser\AppData\Roaming\Python\Lib\site-packages\rtree\lib

    添加环境变量后一切正常。

    【讨论】:

    • 如果有人使用 miniconda,路径可能是C:\Users\myuser\miniconda3\Library\bin
    【解决方案5】:

    pip 卸载 rtree

    这对我有用

    【讨论】:

      【解决方案6】:

      解决方案是简单地重新启动 Jupyter 笔记本中的内核。在安装了一些使用环境变量等变量的包后,这些包仅在内核(重新)启动时才会加载。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-02-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-23
        • 2014-08-27
        相关资源
        最近更新 更多