试图在我的机器上安装GeoDjango.我是Python的新手,并被带入一个对其他团队成员来说非常棘手的安装项目.我使用brew安装了Python 2.7和GEOS,并运行了PSQL 9.2.4但是当我尝试运行webserver时仍然遇到此错误:
__import__(name) File "/Users/armynante/Desktop/uclass-files/uclass-env/lib/python2.7/site packages/django/contrib/gis/geometry/backend/geos.py", line 1, infrom 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 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 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 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 _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
nachopro.. 153
这是我的解决方案(显然它很丑,就像我的英语,但有效).问题是版本字符串在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]
这是我的解决方案(显然它很丑,就像我的英语,但有效).问题是版本字符串在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]
在最新的GEOS安装中,上述答案无效......但接近问题.
我在正确的geos_version_info()上面更改了正则表达式:from:
version_regex = re.compile(r'^(?P(?P \d+)\.(?P \d+)\.(?P \d+))((rc(?P \d+))|dev)?-CAPI-(?P \d+\.\d+\.\d+)$')
成为:
version_regex = re.compile(r'^(?P(?P \d+)\.(?P \d+)\.(?P \d+))((rc(?P \d+))|dev)?-CAPI-(?P \d+\.\d+\.\d+).*$')
注意.*添加到正则表达式的末尾.
我认为这又被打破了.我们的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的解决方案仍然是一种解决方法.