Подтвердить что ты не робот

Ошибка GeoDjango GEOSException

Попытка установить GeoDjango на моей машине. Я действительно новичок в Python и попал в проект, который был очень сложной установкой для других членов команды. Я установил Python 2.7 и GEOS с помощью brew и выполнил PSQL 9.2.4, но продолжаю получать эту ошибку, когда пытаюсь запустить веб-сервер:

__import__(name)
File "/Users/armynante/Desktop/uclass-files/uclass-env/lib/python2.7/site
packages/django/contrib/gis/geometry/backend/geos.py", line 1, in <module>
from django.contrib.gis.geos import (
File "/Users/armynante/Desktop/uclass-files/uclass-env/lib/python2.7/site
packages/django/contrib/gis/geos/__init__.py", line 6, in <module>
from django.contrib.gis.geos.geometry import GEOSGeometry, wkt_regex, hex_regex
File "/Users/armynante/Desktop/uclass-files/uclass-env/lib/python2.7/site
packages/django/contrib/gis/geos/geometry.py", line 14, in <module>
from django.contrib.gis.geos.coordseq import GEOSCoordSeq
File "/Users/armynante/Desktop/uclass-files/uclass-env/lib/python2.7/site-
packages/django/contrib/gis/geos/coordseq.py", line 9, in <module>
from django.contrib.gis.geos.libgeos import CS_PTR
File "/Users/armynante/Desktop/uclass-files/uclass-env/lib/python2.7/site-
packages/django/contrib/gis/geos/libgeos.py", line 119, in <module>
_verinfo = geos_version_info()
File "/Users/armynante/Desktop/uclass-files/uclass-env/lib/python2.7/site
packages/django/contrib/gis/geos/libgeos.py", line 115, in geos_version_info
if not m: raise GEOSException('Could not parse version info string "%s"' % ver)
django.contrib.gis.geos.error.GEOSException: Could not parse version info string
"3.4.2-CAPI-1.8.2 r3921"

Невозможно найти что-либо относящееся к этому следу на SO или в Интернете. Я думаю, это может быть ошибка регулярного выражения? В настоящее время я пытаюсь переустановить PSQL и GEOS, чтобы увидеть, могу ли я запустить его.

Вот мой файл требований:

django==1.4
psycopg2==2.4.4
py-bcrypt==0.4
python-memcached==1.48
south==0.7.3

# Debug Tools
sqlparse==0.1.3
django-debug-toolbar==0.9.1
django-devserver==0.3.1

# Deployment
fabric==1.4

# AWS
# boto==2.1.1
django-storages==1.1.4
django-ses==0.4.1

# ECL
http://packages.elmcitylabs.com/ecl_django-0.5.3.tar.gz#ecl_django
http://packages.elmcitylabs.com/ecl_google-0.2.14.tar.gz#ecl_google
# https://packages.elmcitylabs.com/ecl_tools-0.3.7.tar.gz#ecl_tools
# https://packages.elmcitylabs.com/chargemaster-0.2.19.tar.gz
# https://packages.elmcitylabs.com/ecl_facebook-0.3.12.tar.gz#ecl_facebook
# https://packages.elmcitylabs.com/ecl_twitter-0.3.3.tar.gz#ecl_twitter

# Search
#https://github.com/elmcitylabs/django-haystack/tarball/issue-522#django-haystack
-e git+https://github.com/toastdriven/django-haystack.git#egg=django-haystack

pysolr==2.1.0-beta
# whoosh==2.3.2

# Misc
# PIL
# django-shorturls==1.0.1
# suds==0.4

django-mptt
sorl-thumbnail

stripe
pytz==2013b
4b9b3361

Ответ 1

Это моё решение (очевидно, оно уродливо, как мой английский, но работает). Проблема заключается в том, что строка версий содержит пустое пространство в RegEx.

Ошибка говорит:

GEOSException: Не удалось разобрать строку информации о версии "3.4.2-CAPI-1.8.2 r3921"

И geos_version_info предупреждает:

Регулярное выражение должно быть в состоянии анализировать строки версии, такие как "3.0.0rc4-CAPI-1.3.3", "3.0.0-CAPI-1.4.1" или "3.4.0dev-CAPI-1.8.0"

Отредактируйте этот файл: site-packages/django/contrib/gis/geos/libgeos.py

Найдите функцию: geos_version_info

И измените эту строку:

ver = geos_version().decode()

С этой строкой:

ver = geos_version().decode().split(' ')[0]

Ответ 2

В последней установке GEOS вышеупомянутый ответ не сработал... но был близок к проблеме.

Я изменил регулярное выражение прямо над geos_version_info(): из:

version_regex = re.compile(r'^(?P<version>(?P<major>\d+)\.(?P<minor>\d+)\.(?P<subminor>\d+))((rc(?P<release_candidate>\d+))|dev)?-CAPI-(?P<capi_version>\d+\.\d+\.\d+)$')

:

version_regex = re.compile(r'^(?P<version>(?P<major>\d+)\.(?P<minor>\d+)\.(?P<subminor>\d+))((rc(?P<release_candidate>\d+))|dev)?-CAPI-(?P<capi_version>\d+\.\d+\.\d+).*$')

Обратите внимание на. *, добавленный в конец регулярного выражения.

Ответ 3

Я думаю, что это снова сломано. Последнее обновление на нашем сервере FreeBSD привело к этой ошибке:

django.contrib.gis.geos.error.GEOSException: Could not parse version info string "3.6.2-CAPI-1.10.2 4d2925d6"

Похоже, что регулярное выражение в Django libgeos.py нуждается в повторном обновлении для учета этого различного синтаксиса. Решение Nachopro по-прежнему служит обходным решением.

Ответ 5

Для тех, у кого не установлен 3.6.1:

  1. brew unlink geos
  2. Установите 3.6.1 с brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/145b22e8330e094ee148861e72e26c03e73d34a1/Formula/geos.rb.
  3. brew info geos должен показывать пометку 3.6.1: enter image description here

Ответ 6

Это можно устранить, попробовав следующее:

brew switch geos 3.6.1

Ответ 7

Я исправил проблему, установив PostGIS с Postgres, используя https://postgresapp.com/downloads.html.

  1. Установить PostGIS (2.2): brew установить postgis
  2. Чтобы отменить привязку geos, если версия выше 3.6.1: brew unlink geos
  3. Установите Geos (3.6.1): brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/145b22e8330e094ee148861e72e26c03e73d34a1/Formula/geos.rb
  4. Версия Switch geos (последняя версия 3.7.2, которая не поддерживается Django 1.11.3): brew switch geos 3.6.1
  5. Войдите в базу данных и создайте расширения postgis: CREATE EXTENSION postgis; Тестирование расширения postgis: SELECT ST_Distance ('LINESTRING (-122.33 47.606, 0.0 51.5)' :: geography, 'POINT (-21.96 64.15)' :: geography);
  6. Проверьте версию postgis: ВЫБЕРИТЕ PostGIS_full_version();

Ответ 8

Brew только что выпустил Geos 3.8.0, что, конечно, снова нарушает Django 1.11. Предыдущая версия, 3.7.3, была очень полезна для всех новых автоматических очисток, которые теперь выполняются при обновлениях, поэтому для меня нет brew switch geos 3.7.3.

В итоге я использовал этот пост, чтобы понять, как найти номер предыдущей версии и зафиксировать хэш:

cd $( brew --prefix )/Homebrew/Library/Taps/homebrew/homebrew-core
git log -- Formula/geos.rb | less
# find the version you need in the file, copy its hash
brew unlink geos
brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/<yourcommithash>/Formula/geos.rb

После всего этого загрузка для geos 3.7.3 по какой-то причине не проходит проверку контрольной суммы SHA256... поэтому я в итоге попробовал 3.7.2, которая действительно сработала.

На данный момент команда для переустановки 3.7.2 на Catalina:

brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/823b700ab61eeec57f34d50be2cc34a285fb5abc/Formula/geos.rb