libgeos_c-1.dll无法被Python加载

4 投票
5 回答
3573 浏览
提问于 2025-04-16 04:59

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

我通过一键安装程序在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')

结果还是同样的问题。所以Python根本无法使用CDLL加载这个dll。到目前为止,我不知道该怎么办。请帮帮我。

5 个回答

2

我刚刚在安装Postgresql 9.1和postgis 2.0的时候遇到了同样的问题,这些都是通过Windows安装程序安装的。其实不需要下载其他东西。你只需要把这个文件夹加到Windows的路径中:C:\PostgreSQL\9.1\bin,或者是libgeos_c-1.dll文件所在的地方。如果你想让新的环境变量在你的开发工具中生效,可能需要重启一下电脑。对于命令行来说,只需打开一个新的命令提示符窗口就可以了。

这样做的话,就可以选择性地设置GEOS_LIBRARY_PATH,因为所需的文件已经在Windows路径中了。

虽然这在2010年对提问者来说可能没用,但对于2012年以后遇到同样问题的其他人来说,这可能是最简单的解决办法。

3

看起来在我设置了 GEOS_LIBRARY_PATH 这个变量,并且使用了两个反斜杠(\\)后,问题解决了。但是现在又出现了一个错误,提示说 'module' 对象没有属性 'OSMGeoAdmin'。

0

我也遇到同样的问题。你能不能分享一下正确的DLL文件?如果这样能解决问题的话。还是说安装OSGeo4W是唯一的办法?如果是的话,你是按照什么步骤安装的呢?

撰写回答