簡體   English   中英

在 Windows 中“找不到或加載空間索引_c.dll”?

[英]" could not find or load spatialindex_c.dll" in windows?

系統:windows

版本: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)

引發 OSError("無法找到或加載空間索引_c.dll")

OSError: 無法找到或加載 spatialindex_c.dll

這是什么意思,是什么原因造成的,你應該如何解決它?

如果您使用的是 conda,安裝 OSMnx 並避免此問題的最簡單方法是使用 conda-forge,如文檔所述

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

或者您可以直接從其官方 docker容器運行 OSMnx(和 Jupyter)。

這意味着您只認為您已經成功安裝了 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)限制的錯誤,因此將兩個值交換為 set 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

我遇到了同樣的問題“could not find or load spatialindex_c.dll”

為我解決的是pip uninstall rtree 就是這樣。 我在沒有管理員的 Windows 7 服務器中使用conda環境。

osmnxgeopandas都存在於我的env ,其中包括conda-forge geopandas頻道

pip卸載rtree

那對我有用

使用pip安裝rtreeChristoph Gohlke的車輪Rtree-0.9.7-cp39-cp39-win_amd64.whl后,我在 Windows 中遇到了同樣的錯誤。

我可以看到執行import geopandas或只是打開spyder的錯誤。 在這種情況下,錯誤是關於缺少依賴rtree>= 0.9.7: None (NOK)的警告rtree>= 0.9.7: None (NOK)

檢查文件后finder.py在站點包rtree文件夾C:\\Users\\mysuer\\AppData\\Roaming\\Python\\Python39\\site-packages\\rtree我看到這個代碼行:

# 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並創建了一個針對該文件夾的環境變量。

變量名 變量值
SPATIALINDEX_C_LIBRARY C:\\Users\\myuser\\AppData\\Roaming\\Python\\Lib\\site-packages\\rtree\\lib

添加環境變量后一切正常。

解決方案是簡單地重新啟動 Jupyter notebook 中的內核。 安裝一些使用環境變量等變量的軟件包后,這些軟件包僅在(重新)啟動內核時加載。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM