web-dev-qa-db-ja.com

GeoDjango GEOSExceptionエラー

GeoDjangoをマシンにインストールしようとしています。私はPythonが初めてであり、他のチームメンバーにとって非常にトリッキーなインストールであったプロジェクトに持ち込まれました。Python 2.7およびGEOS brewを使用してPSQL 9.2.4を実行していますが、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"

Cantは、このトレースに関連する何かをSOまたはWebで見つけたようです。これは正規表現の失敗の可能性がありますか?ランニング。

要件ファイルは次のとおりです。

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

これが私の解決策です(明らかに、私の英語のようにいですが、動作します)。問題は、バージョン文字列に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]

149
nachopro

最新のGEOSインストールでは、上記の答えは機能しませんでしたが、問題に近いものでした。

Geos_version_info()のすぐ上の正規表現を変更しました:from:

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

することが:

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

正規表現の最後に。*が追加されていることに注意してください。

19
JayCrossler

これはまた壊れていると思います。 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のソリューションは引き続き回避策として機能します。

14
Kirkman14

これは修正されました Django in昨年3月頃のようです。 Django bug 20036 も参照してください。したがって、Django 1.5.4にアップグレードすると問題が解決します。

4
Joe Germuska

以前に3.6.1をインストールしていない人向け:

  1. brew unlink geos
  2. 3.6.1をbrew install https://raw.githubusercontent.com/Homebrew/homebrew-core/145b22e8330e094ee148861e72e26c03e73d34a1/Formula/geos.rbでインストールします。
  3. brew info geosには3.6.1スター付きが表示されます: enter image description here
2
Adam

これは次を試して修正できます。

brew switch geos 3.6.1

0
Muneer Muhammed

https://postgresapp.com/downloads.html を使用してPostgresでPostGISをインストールすることで問題を修正しました。

  1. PostGISのインストール(2.2):postgisの作成
  2. バージョンが3.6.1よりも高い場合にジオのリンクを解除するには:ジオのリンク解除を作成します
  3. Geosのインストール(3.6.1):brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/145b22e8330e094ee148861e72e26c03e73d34a1/Formula/geos.rb
  4. スイッチGeosバージョン(最新バージョンは3.7.2で、Django 1.11.3)ではサポートされていません):brew switch geos 3.6.1
  5. データベースにログインし、postgis拡張機能を作成します。CREATEEXTENSION postgis;テストpostgis拡張機能:SELECT ST_Distance( 'LINESTRING(-122.33 47.606、0.0 51.5)' :: geography、 'POINT(-21.96 64.15)' :: geography);
  6. Postgisバージョンを確認します:SELECT PostGIS_full_version();
0
Tony Jasur