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

时间:2014-11-18 18:24:16

标签: python django postgresql geodjango

我正在使用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 \站点包\ 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 个答案:

答案 0 :(得分:3)

我能够解决问题。看看我在这里做了什么:

Django forum with how I fixed it

  

抱歉,此错误消息不明确。我已经提交了一张改进的机票   它:https://code.djangoproject.com/ticket/23873

     

错误消息的原因是您没有安装   您sys.path上的GEOS可导入的。 (那是什么   在   https://docs.djangoproject.com/en/1.7/ref/contrib/gis/install/#osgeo4w   或者以下步骤无法正常工作。)

     

如果你查看django / contrib / gis / geos / init .py,你会看到   如果HAS_GEOS为True,则仅导入GEOSException。这就是为什么   如果您将从django.contrib.gis.geos导入GEOSException将成功   安装了GEOS,否则失败。

至于win 126错误:

我不确定究竟是什么帮助最终修复它但是:

  1. 我将我的python版本从64位更改为32位
  2. 更新了路径变量的脚本非常搞砸了,所以我手动将它们改为原来的样子。
  3. 我错误地添加了GEOS_LIBRARY_PATH
  4. C:\ program files \ OSGeo4W \ bin \ geos_c.dll

    但我应该补充一下:

    C:\ OSGeo4W \ bin \ geos_c.dll

    现在,我可以从项目设置中删除GEOS_LIBRARY_PATH,但事情仍然有效,所以我猜它一定是64位与32位问题,或路径问题。