gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 12:05:09 28 4
gpt4 key购买 nike

我正在使用 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

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

最佳答案

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

Django forum with how I fixed it

Sorry, this error message is obscure. I have filed a ticket to improve it: https://code.djangoproject.com/ticket/23873

The cause of the error message is that you do not have an installation of GEOS that is on your sys.path and importable. (That is, something in https://docs.djangoproject.com/en/1.7/ref/contrib/gis/install/#osgeo4w or the following step didn't work correctly.)

If you look in django/contrib/gis/geos/init.py, you'll see that GEOSException is only imported there if HAS_GEOS is True. That is why importing GEOSException from django.contrib.gis.geos will succeed if you have GEOS installed, but fails otherwise.

至于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 位问题,或者路径问题。

关于python - GeoDjango:无法导入名称 GEOSException 已修复,现在 [WinError 126],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27001317/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com