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
これが私の解決策です(明らかに、私の英語のようにいですが、動作します)。問題は、バージョン文字列に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<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+).*$')
正規表現の最後に。*が追加されていることに注意してください。
これはまた壊れていると思います。 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のソリューションは引き続き回避策として機能します。
これは修正されました Django in昨年3月頃のようです。 Django bug 20036 も参照してください。したがって、Django 1.5.4にアップグレードすると問題が解決します。
これは次を試して修正できます。
brew switch geos 3.6.1
https://postgresapp.com/downloads.html を使用してPostgresでPostGISをインストールすることで問題を修正しました。