2013-09-05 92 views
35

Đang cố gắng cài đặt GeoDjango trên máy của tôi. Tôi thực sự mới với Python và được đưa vào một dự án đã được cài đặt rất khó khăn cho các thành viên khác trong nhóm. Tôi đã cài đặt Python 2.7 và GEOS sử dụng bia, và chạy psql 9.2.4 nhưng cứ bị lỗi này khi tôi cố gắng để có được những webserver chạy:Lỗi GeoCjango GEOSException

__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 dường như tìm thấy bất cứ điều gì liên quan đến dấu vết này trên SO hoặc trang web . Tôi nghĩ rằng nó có thể là một thất bại regex? Tôi hiện đang cố gắng cài đặt lại PSQL và GEOS để xem liệu tôi có thể chạy nó hay không.

Đây là yêu cầu tập tin của tôi:

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 
+0

có thể là một vấn đề với các tòa nhà, bạn đang sử dụng. Hãy thử cập nhật nó lên phiên bản mới hơn. Thêm [tại đây] (https://code.djangoproject.com/ticket/17212) – karthikr

+0

Vâng tôi đã thấy vé đó trước đó. Tôi hiện đang cài đặt lại nó và tôi sẽ thử nâng cấp lên bản phát hành tiếp theo nếu nó không hoạt động. – armynante

+0

Bạn đã giải quyết nó? – moenad

Trả lời

83

Đây là giải pháp của tôi (rõ ràng nó là xấu xí, giống như tiếng Anh của tôi, nhưng hoạt động). Vấn đề là chuỗi phiên bản có một khoảng trắng không mong muốn trong RegEx.

Lỗi nói:

GEOSException: Không thể phân tích chuỗi phiên bản info "r3921 3.4.2-CAPI-1.8.2"

Và geos_version_info cảnh báo:

biểu hiện thường xuyên sẽ có thể phân tích cú pháp các chuỗi phiên bản như '3.0.0rc4-CAPI-1.3.3', '3.0.0-CAPI-1.4.1' hoặc '3.4.0dev-CAPI-1.8.0'

Chỉnh sửa tập tin này: site-packages/django/contrib/GIS/GEOS/libgeos.py

Hãy tìm những chức năng: geos_version_info

Và thay đổi dòng này:

ver = geos_version().decode()

Với dòng này:

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

+0

Tôi đã cài đặt lại GEOS với gói 1.9 GDAL Kyung Khaos và PSQL1.9 và lỗi đã biến mất, vì vậy rất tiếc là tôi không thể kiểm tra điều này. Nó có hiệu quả với bạn hay đây chỉ là một gợi ý? – armynante

+0

Điều này làm việc cho tôi, sau khi cập nhật ArchLinux mã django của tôi đã bị hỏng. – nachopro

+1

là ver = geos_version() trong phiên bản trang web này đang sử dụng, cảm ơn! – user1279741

4

Có vẻ như this has been fixed ở Django tính đến tháng 3 năm ngoái. Xem thêm Django bug 20036. Vì vậy, nâng cấp lên Django 1.5.4 sẽ giải quyết vấn đề.

+0

Không 1,4. * Theo https://code.djangoproject.com/ticket/20036#comment:6 – EvdB

+0

Tôi sẽ thừa nhận bài đăng gốc của mình dựa trên một vài suy luận, nhưng bây giờ, không phải điều này cho thấy rằng sửa chữa là trong 1.4.8? https://github.com/django/django/blob/1.4.8/django/contrib/gis/geos/libgeos.py#L106 –

+2

Không, cụm từ thông dụng sẽ không khớp với số phiên bản có vấn đề. Việc sửa chữa chỉ là 1,5, tôi sợ. –

14

Trong bản cài đặt GEOS mới nhất, câu trả lời ở trên không hiệu quả ... nhưng gần với vấn đề.

tôi đã thay đổi quyền regex trên geos_version_info(): từ:

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

là:

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

Thông báo các * thêm vào cuối của regex..

+1

Điều này làm việc hoàn hảo cho tôi. Tuy nhiên, câu trả lời được đánh dấu là đã chấp nhận không thành công với thiết lập của tôi. – Rafay

+0

Điều này làm việc cho tôi (cảm ơn!) Nhưng câu trả lời được chấp nhận cũng làm việc cho tôi và có lẽ là một chút đơn giản hơn để áp dụng. – python1981

10

Tôi nghĩ điều này bị hỏng lần nữa.Một nâng cấp gần đây trên máy chủ của chúng tôi FreeBSD dẫn đến lỗi này:

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

Hình như regex trong libgeos.py nhu cầu của Django để được cập nhật một lần nữa để giải thích cho cú pháp khác nhau này. Nachopro của giải pháp vẫn phục vụ như là một workaround.

+4

Có vẻ như có một [cam kết] (https://github.com/django/django/commit/78c155cf2e5a27fd2db18c2d46953b1b0fdba829) để sửa chữa nó trong Django v1.11.5 – Kirkman14

+3

Cảm ơn bạn đã cập nhật, chỉ cần nhận thấy cùng một vấn đề trên OS X (10.11). – goetz

+2

Đúng, bị hỏng ở Django 1.11.4, Python 3.6 & macOS Sierra. – arts777

0

này có thể được cố định bằng cách cố gắng điều sau đây,

brew switch geos 3.6.1

+1

Như tôi đã đề cập trong bình luận của tôi ở trên (https://stackoverflow.com/questions/18643998/geodjango-geosexception-error/45488871#comment78628369_45488871) điều này sẽ chỉ hoạt động nếu bạn vẫn có 3.6.1 trên hệ thống của mình từ lần cài đặt trước. – alexrussell