2010-10-04 59 views
4

我正在構建我的第一個GeoDjango項目,但我有點絕望。libgeos_c-1.dll無法由Python加載

我在Windows上通過一鍵式安裝程序安裝了PostgreSQL 9和PostGis 1.5。所以在那裏。我在settings.py中將GEOS_LIBRARY_PATH設置爲libgeos_c-1.dll的完整路徑。但是當我運行manage.py syncdb時,遇到以下錯誤:

File "C:\Python25\lib\site-packages\django\contrib\gis\geometry\backend\geos.py", line 1, in <module> 
    from django.contrib.gis.geos import \ 
    File "C:\Python25\Lib\site-packages\django\contrib\gis\geos\__init__.py", line 6, in <module> 
    from django.contrib.gis.geos.geometry import GEOSGeometry, wkt_regex, hex_regex 
    File "C:\Python25\Lib\site-packages\django\contrib\gis\geos\geometry.py", line 14, in <module> 
    from django.contrib.gis.geos.coordseq import GEOSCoordSeq 
    File "C:\Python25\Lib\site-packages\django\contrib\gis\geos\coordseq.py", line 9, in <module> 
    from django.contrib.gis.geos.libgeos import CS_PTR 
    File "C:\Python25\lib\site-packages\django\contrib\gis\geos\libgeos.py", line 51, in <module> 
    lgeos = CDLL(lib_path) 
    File "C:\Python25\lib\ctypes\__init__.py", line 348, in __init__ 
    self._handle = _dlopen(self._name, mode) 
WindowsError: [Error 126] The specified module could not be found 

因此,我打開libgeos.py並檢查指定的行。這只是一個簡單的「CDLL(lib_path)」。顯然lib_path是GEOS_LIBRARY_PATH。

所以我創建了一個簡單的測試:

from ctypes import CDLL 

lgeos = CDLL('libgeo's path') 

仍然有同樣的問題。所以它根本無法使用CDLL來使用python加載這個DLL。在這個階段,我不知道該怎麼做。請幫忙。

回答

0

同樣的問題在這裏。你能不能分享正確的DLL?如果那真的解決了這個問題。或者正在安裝OSGeo4W的唯一方法?如果是的話,你遵循什麼安裝程序?

+1

,則無需粘貼確切路徑通過從spatialite站點抓取libgeos庫並將這兩個DLL解包到system32來解決。 – 2010-10-27 00:32:57

+0

也許這是另一種解決方案。我猜在Windows上最新的libgeo版本有一些問題? – 2010-11-04 16:51:18

+0

我剛安裝了OSGeo4W並解決了它。 – 2011-05-18 19:00:23

1

不同的東西出現在我的腦海裏,最明顯的是:你確實粘貼了DLL文件的路徑,而不僅僅是它駐留的文件夾?沒有冒犯的意思,只是爲了安全起見。

然後,如果存在未解決的依賴性,即DLL的LoadLibrary失敗,則可能會因爲缺少依賴的其他庫而失敗。你可以很容易地找到使用Dependency Walker。加載與依賴libgeos和尋找丟失的模塊,錯誤消息等 - 例如,您可能會丟失libgeos-X-Y-Z.dll。

+0

我粘貼的完整路徑,這是文件夾+文件名。我只是用Dependecy Walker來檢查LIBGEOS_C-1.DLL的依賴。除了某些系統DLL之外,唯一依賴的是位於它旁邊的LIBGEOS-3-2-2.DLL。很顯然,沒有缺失的模塊。我在想,如果這是DLL的方式加載更改爲lates libgeos。因爲在我卸載並安裝OSGeo4W之後,我在這個軟件中包含了geos dll,然後它就工作了。但我不確定它是否會在未來引入不一致 – 2010-10-06 15:50:08

+0

如果您使用ctypes.util.find_library – dcolish 2010-10-27 00:26:58

3

集GEOS_LIBRARY_PATH使用可變多布爾後Aparently「\」斜槓對我的作品,但現在推出這個錯誤「模塊」對象有沒有屬性「OSMGeoAdmin」

2

我剛剛安裝PostgreSQL 9.1以後遇到同樣的問題, postgis 2.0通過Windows安裝程序。無需下載其他任何東西。您只需將此目錄添加到Windows路徑中:C:\PostgreSQL\9.1\binlibgeos_c-1.dll文件所在的任何位置。如果您希望新的環境變量對您的IDE生效,則可能需要重新啓動。對於命令行,只需打開一個新的命令提示符。

這樣做使得設置GEOS_LIBRARY_PATH可選,因爲所需的文件已經在Windows路徑中。

這可能不適用於2010年的OP,但對於2012年遇到同樣問題的其他人來說,這可能是最簡單的解決方案。

+0

這工作。我所要做的只是將libgeos_c-1.dll放到我的django項目中。 – stormlifter 2013-07-12 16:02:50

0

我有同樣的問題,並解決它由:

  1. 重新安裝http://trac.osgeo.org/osgeo4w/(我的安裝文件夾是C:\OSGeo4W64\
  2. 添加一行:

    GEOS_LIBRARY_PATH =「C:\ OSGeo4W64 \ BIN \ geos_c.dll'

設置。PY

(以下這樣的回答:https://stackoverflow.com/a/21495785/2314737

這也是在official documentation提到:

When GeoDjango can’t find GEOS, this error is raised:

ImportError: Could not find the GEOS library (tried "geos_c"). Try setting GEOS_LIBRARY_PATH in your settings. The most common solution is to properly configure your Library environment settings or set GEOS_LIBRARY_PATH in your settings.