Python无法加载libgeos_c-1.dll

时间:2010-10-04 21:52:03

标签: python django ctypes geodjango

我正在建立我的第一个GeoDjango项目,但我有点绝望。

我在Windows上通过一键安装程序安装了PostgreSQL 9和PostGis 1.5。所以那里就是一切。我将GEOS_LIBRARY_PATH设置为settings.py中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来加载这个dll与python。在这个阶段,我不知道该怎么做。请帮忙。

5 个答案:

答案 0 :(得分:3)

在设置GEOS_LIBRARY_PATH变量之后使用doble'\'slashes对我来说很有用,但现在启动此错误'module'对象没有属性'OSMGeoAdmin'

答案 1 :(得分:2)

我通过Windows安装程序安装Postgresql 9.1和postgis 2.0后遇到了同样的问题。无需下载任何其他内容。您所要做的就是将此目录添加到Windows路径中:C:\PostgreSQL\9.1\binlibgeos_c-1.dll文件所在的位置。如果希望新环境变量对IDE生效,则可能需要重新引导。对于命令行,只需打开一个新的命令提示符。

这样做会使GEOS_LIBRARY_PATH设置为可选,因为所需文件已经在Windows路径中。

这可能不适用于2010年的OP,但对于其他在2012年遇到同样问题的人来说,这可能是最简单的解决方案。

答案 2 :(得分:1)

我想到了不同的事情,最明显的是:你确实在那里粘贴了DLL文件的路径,而不仅仅是它所在的文件夹?没有冒犯意味着,只是为了安全起见。

然后,如果存在未解析的依赖项,您可能也会收到此错误,即DLL的LoadLibrary失败,因为它缺少它所依赖的另一个库。您可以使用Dependency Walker轻松找到它。使用depends加载libgeos并查找缺少的模块,错误消息等。例如,您可能缺少libgeos-X-Y-Z.dll。

答案 3 :(得分:0)

这里的问题相同。您是否可以如此善良地分享正确的DLL?如果那确实解决了问题。或者是以唯一的方式安装OSGeo4W?如果是这样,你遵循了什么安装程序?

答案 4 :(得分:0)

我有同样的问题并通过以下方式解决:

  1. 重新安装http://trac.osgeo.org/osgeo4w/(我的安装文件夹为C:\OSGeo4W64\
  2. 添加以下行:

    GEOS_LIBRARY_PATH ='C:\ OSGeo4W64 \ bin \ geos_c.dll'

  3. settings.py

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

    official documentation中也提到了这一点:

      

    当GeoDjango找不到GEOS时,会出现此错误:

         

    ImportError:找不到GEOS库(尝试过“geos_c”)。尝试   在您的设置中设置GEOS_LIBRARY_PATH。最常见的解决方案   是正确配置您的库环境设置或设置   在您的设置中GEOS_LIBRARY_PATH