web-dev-qa-db-fra.com

Erreur GeoDjango GEOSException

Essayer d'installer un GeoDjango sur ma machine. Je suis vraiment nouveau à Python et être amené dans un projet qui a été une installation très délicate pour les autres membres de l'équipe. J'ai installé Python 2.7 et GEOS en utilisant brew et en exécutant PSQL 9.2.4 mais continuez à obtenir cette erreur lorsque j'essaie de faire fonctionner le serveur Web:

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

Impossible de trouver quelque chose de pertinent pour cette trace sur SO ou sur le Web. Je pense que cela pourrait être un échec d'expression régulière? J'essaie actuellement de réinstaller PSQL et GEOS pour voir si je peux l'obtenir fonctionnement.

Voici mon fichier d'exigences:

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

C'est ma solution (évidemment c'est moche, comme mon anglais, mais ça marche). Le problème est que la chaîne des versions a un espace blanc indésirable dans le RegEx.

L'erreur dit:

GEOSException: impossible d'analyser la chaîne d'informations de version "3.4.2-CAPI-1.8.2 r3921"

Et geos_version_info prévient:

L'expression régulière doit pouvoir analyser les chaînes de version telles que '3.0.0rc4-CAPI-1.3.3', '3.0.0-CAPI-1.4.1' ou '3.4.0dev-CAPI -1.8.0 '

Modifier ce fichier: site-packages/Django/contrib/gis/geos/libgeos.py

Recherchez la fonction: geos_version_info

Et changez cette ligne:

ver = geos_version().decode()

Avec cette ligne:

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

149
nachopro

Dans la dernière installation de GEOS, la réponse ci-dessus n'a pas fonctionné ... mais était proche du problème.

J'ai changé l'expression régulière juste au-dessus de geos_version_info (): de:

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+)$')

être:

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+).*$')

Remarquez le. * Ajouté à la fin de l'expression régulière.

19
JayCrossler

Je pense que c'est encore cassé. Une récente mise à niveau sur notre serveur FreeBSD a conduit à cette erreur:

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

Il semble que l'expression régulière dans libgeos.py De Django doive être mise à jour à nouveau pour tenir compte de cette syntaxe différente. La solution de Nachopro sert toujours de solution de contournement.

14
Kirkman14

Il semble que cela a été corrigé dans Django à partir de mars dernier environ. Voir aussi bogue Django 20036 . La mise à niveau vers Django 1.5.4 résoudra le problème.

4
Joe Germuska

Pour ceux qui n'ont pas déjà installé 3.6.1:

  1. brew unlink geos
  2. Installez 3.6.1 avec brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/145b22e8330e094ee148861e72e26c03e73d34a1/Formula/geos.rb.
  3. brew info geos devrait montrer 3.6.1 avec: enter image description here
2
Adam

Cela peut être résolu en essayant ce qui suit,

brew switch geos 3.6.1

0
Muneer Muhammed

J'ai résolu le problème en installant PostGIS avec Postgres en utilisant https://postgresapp.com/downloads.html .

  1. Installer PostGIS (2.2): installer brew postgis
  2. Pour dissocier les géos si la version est supérieure à 3.6.1: brasser les géos de dissociation
  3. Installer Geos (3.6.1): installation de l'infusion https://raw.githubusercontent.com/Homebrew/homebrew-core/145b22e8330e094ee148861e72e26c03e73d34a1/Formula/geos.rb
  4. Switch geos version (la dernière version est 3.7.2 qui n'est pas prise en charge par Django 1.11.3): brew switch geos 3.6.1
  5. Connectez-vous à la base de données et créez des extensions postgis: CREATE EXTENSION postgis; Tester l'extension postgis: SELECT ST_Distance ('LINESTRING (-122.33 47.606, 0.0 51.5)' :: geography, 'POINT (-21.96 64.15)' :: geography);
  6. Vérifiez la version de postgis: SELECT PostGIS_full_version ();
0
Tony Jasur