GeoDjango:无法导入GEOSException名称已修复,现在出现[WinError 126]

3
我正在使用Python 3.4,Postgres 9.3.5和Windows 7。我按照以下步骤尝试使GeoDjango工作: https://docs.djangoproject.com/en/dev/ref/contrib/gis/install/#windows 当我尝试将django.contrib.gis添加到已安装的应用程序中(在PyCharm中),或者当我尝试运行时,出现了下面的回溯。 然而,在此目录C:\ Python34 \ Lib \ site-packages \ django \ contrib \ gis \ geos中,有geometry.py(其中包含类GEOSGeometry)和error.py(其中包含类GEOSException)。当我在Python shell中运行它时,它不会抛出任何错误:
>>> from django.contrib.gis.geos.error import GEOSException 

感谢您对问题的考虑。还有许多其他的回溯信息,然后是:
  File "C:\Python34\lib\site-packages\django\contrib\gis\forms\fields.py", line
8, in <module>
    from django.contrib.gis.geos import GEOSException, GEOSGeometry
ImportError: cannot import name 'GEOSException'

更新 我发现一些信息表明我应该更新项目设置:

GEOS_LIBRARY_PATH = r'C:\Program Files\OSGeo4W64\bin\geos_c.dll'

那个有用,但现在我收到了WinError 126的错误。
  File "C:\Python34\lib\site-packages\django\contrib\gis\forms\fields.py", line
8, in <module>
    from django.contrib.gis.geos import GEOSException, GEOSGeometry
  File "C:\Python34\lib\site-packages\django\contrib\gis\geos\__init__.py", line
 9, in <module>
    from .libgeos import geos_version, geos_version_info  # NOQA: flake8 detects
 only the last __all__
  File "C:\Python34\lib\site-packages\django\contrib\gis\geos\libgeos.py", line
61, in <module>
    lgeos = CDLL(lib_path)
  File "C:\Python34\lib\ctypes\__init__.py", line 351, in __init__
    self._handle = _dlopen(self._name, mode)
OSError: [WinError 126] The specified module could not be found

我不清楚哪个模块找不到,也不知道如何修复它。

1个回答

3
我成功解决了这个问题。看看我在这里做了什么:

使用Django论坛,详细说明了我是如何解决的

抱歉,这个错误信息比较晦涩。我已经提交了一个工单来改进它:https://code.djangoproject.com/ticket/23873 造成错误的原因是您没有安装GEOS或者无法在sys.path中找到它。也就是说,https://docs.djangoproject.com/en/1.7/ref/contrib/gis/install/#osgeo4w 中的某些步骤没有正确执行。
如果您查看django/contrib/gis/geos/init.py,您会发现只有当HAS_GEOS为True时才会在那里导入GEOSException。这就是为什么如果您安装了GEOS,则从django.contrib.gis.geos导入GEOSException将成功,否则将失败。
至于win 126错误:
我不确定究竟是什么帮助最终修复了它,但是:
  1. 我将我的python版本从64位改为32位。
  2. 更新后的脚本中,路径变量的设置非常混乱,所以我手动更改了它们应该是什么。
  3. 我错误地添加了 GEOS_LIBRARY_PATH 的路径:

C:\program files\OSGeo4W\bin\geos_c.dll

但实际上应该添加:

C:\OSGeo4W\bin\geos_c.dll

现在,我只需要从项目设置中删除GEOS_LIBRARY_PATH,事情仍然能够正常工作,所以我猜这一定是64位与32位之间的问题或路径问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接