GeoDjango: исправлена ​​ошибка импорта имени GEOSException, теперь [WinError 126]

Я использую 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 есть геометрия.py (который является классом GEOSGeometry в нем) и error.py (который имеет класс GEOSException в нем) .

Когда я запускаю это в оболочке python, он не выдает никаких ошибок:

>>> 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

Я не понимаю, какой именно модуль не может быть найден и как это исправить.


person ivan7707    schedule 18.11.2014    source источник


Ответы (1)


Я смог решить проблему. Посмотрите, что я сделал здесь:

Форум 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, вы увидите, что GEOSException импортируется туда только в том случае, если HAS_GEOS имеет значение True. Вот почему импорт GEOSException из django.contrib.gis.geos завершится успешно, если у вас установлен GEOS, но не удастся в противном случае.

Что касается ошибки 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-битной или проблема пути.

person ivan7707    schedule 21.11.2014