Trying to install a GeoDjango on my machine. I’m really new to Python and being brought into a project that has been a very tricky install for the other team members. I installed Python 2.7 and GEOS using brew, and running PSQL 9.2.4 but keep getting this error when I try to get the webserver running:
__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"
Cant seem to find anything relevant to this trace on SO or the web. I think it might be a regex failure? I’m currently trying to reinstall PSQL and GEOS to see if I can get it running.
Here is my requirements file:
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
Advertisement
Answer
This is my solution (obviously it is ugly, like my English, but works). The problem is that the versions string has an white space unwanted in the RegEx.
The error says:
GEOSException: Could not parse version info string “3.4.2-CAPI-1.8.2 r3921”
And the geos_version_info warns:
Regular expression should be able to parse version strings such as ‘3.0.0rc4-CAPI-1.3.3’, ‘3.0.0-CAPI-1.4.1’ or ‘3.4.0dev-CAPI-1.8.0’
Edit this file: site-packages/django/contrib/gis/geos/libgeos.py
Look for the function: geos_version_info
And change this line:
ver = geos_version().decode()
With this line:
ver = geos_version().decode().split(' ')[0]
There is also another problem, where there is a whitespace at the end but no more information is provided. Such version also doesn’t match version regular expression, so strip()
-ping the version may be expected behaviour as a quick fix. In my example it was: '3.8.0-CAPI-1.13.1 '