python - installing - how to use geodjango
Error de GeoDjango GEOSException (6)
Creo que esto está roto de nuevo. Una actualización reciente en nuestro servidor FreeBSD llevó a este error:
django.contrib.gis.geos.error.GEOSException: Could not parse version info string "3.6.2-CAPI-1.10.2 4d2925d6"
Parece que la expresión regular en libgeos.py
de Django necesita actualizarse nuevamente para tener en cuenta esta sintaxis diferente. La solución de Nachopro todavía sirve como solución alternativa.
Tratando de instalar un GeoDjango en mi máquina. Soy realmente nuevo en Python y me han incorporado a un proyecto que ha sido una instalación muy difícil para los otros miembros del equipo. Instalé Python 2.7 y GEOS usando brew, y ejecutando PSQL 9.2.4 pero sigo recibiendo este error cuando intento que el servidor web funcione:
__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"
Parece que no puede encontrar nada relevante para esta traza en SO o en la web. Creo que podría ser un fracaso de expresiones regulares? Actualmente estoy tratando de reinstalar PSQL y GEOS para ver si puedo hacerlo funcionar.
Aquí está mi archivo de requisitos:
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
En la última instalación de GEOS, la respuesta anterior no funcionó ... pero estuvo cerca del problema.
Cambié la expresión regular justo encima de geos_version_info (): desde:
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+)$'')
ser:
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+).*$'')
Observe el. * Agregado al final de la expresión regular.
Esta es mi solución (obviamente es fea, como mi inglés, pero funciona). El problema es que la cadena de versiones tiene un espacio en blanco no deseado en el RegEx.
El error dice:
GEOSException: No se pudo analizar la cadena de información de versión "3.4.2-CAPI-1.8.2 r3921"
Y el geos_version_info advierte:
La expresión regular debe poder analizar cadenas de versión como ''3.0.0rc4-CAPI-1.3.3'', ''3.0.0-CAPI-1.4.1'' o ''3.4.0dev-CAPI-1.8.0''
Edite este archivo: site-packages / django / contrib / gis / geos / libgeos.py
Busque la función: geos_version_info
Y cambia esta línea:
ver = geos_version().decode()
Con esta línea:
ver = geos_version().decode().split('' '')[0]
Esto se puede arreglar intentando lo siguiente,
cambio de cerveza geos 3.6.1
Parece que esto se ha solucionado en Django a partir de marzo pasado. Véase también Django bug 20036 . Así que actualizar a Django 1.5.4 solucionará el problema.