4

我正在构建我的第一个 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')

仍然有同样的问题。所以它根本无法使用 CDLL 来用 python 加载这个 dll。在这个阶段,我不知道该怎么做。请帮忙。

4

5 回答 5

3

显然,在使用双“\”斜杠设置 GEOS_LIBRARY_PATH 变量后对我有用,但现在启动此错误“模块”对象没有属性“OSMGeoAdmin”

于 2011-01-11T06:54:36.697 回答
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 年遇到同样问题的人来说,这可能是最简单的解决方案。

于 2012-07-18T07:24:35.797 回答
1

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

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

于 2010-10-04T22:10:52.430 回答
0

这里同样的问题。你能不能分享正确的DLL?如果这确实解决了问题。还是安装 OSGeo4W 是唯一的方法?如果是这样,您遵循什么安装程序?

于 2010-10-27T00:22:12.310 回答
0

我遇到了同样的问题并通过以下方式解决了它:

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

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

settings.py

(按照这个答案:https ://stackoverflow.com/a/21495785/2314737 )

官方文档中也提到了这一点:

当 GeoDjango 找不到 GEOS 时,会引发此错误:

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

于 2015-12-22T13:50:50.783 回答