GeoDjango:无法导入名称 GEOSException 已修复,现在 [WinError 126]
Posted
技术标签:
【中文标题】GeoDjango:无法导入名称 GEOSException 已修复,现在 [WinError 126]【英文标题】:GeoDjango: cannot import name GEOSException fixed, now [WinError 126] 【发布时间】:2015-01-16 01:18:45 【问题描述】:我正在使用 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】:我能够解决问题。看看我在这里做了什么:
Django forum with how I fixed it
抱歉,此错误消息不明确。我已经提交了一张改进票 它: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。因此 如果您从 django.contrib.gis.geos 导入 GEOSException 将成功 已安装 GEOS,否则会失败。
至于win 126
的错误:
我不确定到底是什么帮助最终修复了它,但是:
-
我把我的python版本从64位改成了32位
更新路径变量的脚本非常混乱,所以我手动将它们更改为应有的值。
我错误地添加了
GEOS_LIBRARY_PATH
C:\程序文件\OSGeo4W\bin\geos_c.dll
但我应该补充:
C:\OSGeo4W\bin\geos_c.dll
现在,我可以从项目设置中删除 GEOS_LIBRARY_PATH
并且一切仍然有效,所以我想这一定是 64 位与 32 位的问题,或者路径问题。
【讨论】:
以上是关于GeoDjango:无法导入名称 GEOSException 已修复,现在 [WinError 126]的主要内容,如果未能解决你的问题,请参考以下文章
GeoDjango 中新 GeometryField 的通用输入元素
带有 Postgis Geodjango 安装的 Postgresql