cshore12
asked on
Can't import GEOMETRY-BACKEND geos package in geoDjango
When trying to create a geospatially-enabled table using the python sqlall command, I'm receiving problem that is apparently fairly common:
File "c:\Python26\lib\site-pack ages\djang o\contrib\ gis\db\bac kends\post gis\ope
rations.py", line 8, in <module>
from django.contrib.gis.geometr y.backend import Geometry
File "c:\Python26\lib\site-pack ages\djang o\contrib\ gis\geomet ry\backend \__init
__.py", line 14, in <module>
'"%s".' % geom_backend)
django.core.exceptions.Imp roperlyCon figured: Could not import user-defined GEOME
TRY_BACKEND "geos".
Please note that I'm working in a Windows XP environment.
From what I've read, the most common reason for this issue is the failure of the system to recognize the GEOS library path, which apparently ends at libgeos_c.so. I've searched for this file on my system, and the closest I could find was libgeos_c-1.dll.
The available documentation indicates how to correct this for Linux and Unix systems, but not for Windows. I think I may have to set the GEOS_LIBRARY_PATH system variable, or maybe reconfigure GEOS, but I'm not sure how.
Here's my settings file:
************************
# Django settings for osp1a project.
DEBUG = True
TEMPLATE_DEBUG = DEBUG
ADMINS = (
# ('Your Name', 'your_email@domain.com'),
)
MANAGERS = ADMINS
DATABASES = {
'default': {
'ENGINE': 'django.contrib.gis.db.bac kends.post gis', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
'NAME': 'rw_vector', # Or path to database file if using sqlite3.
'USER': 'cshore11', # Not used with sqlite3.
'PASSWORD': '', # Not used with sqlite3.
'HOST': '', # Set to empty string for localhost. Not used with sqlite3.
'PORT': '', # Set to empty string for default. Not used with sqlite3.
}
}
# Local time zone for this installation. Choices can be found here:
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
# although not all choices may be available on all operating systems.
# On Unix systems, a value of None will cause Django to use the same
# timezone as the operating system.
# If running in a Windows environment this must be set to the same as your
# system time zone.
TIME_ZONE = 'America/Chicago'
# Language code for this installation. All choices can be found here:
# http://www.i18nguy.com/unicode/language-identifiers.html
LANGUAGE_CODE = 'en-us'
SITE_ID = 1
# If you set this to False, Django will make some optimizations so as not
# to load the internationalization machinery.
USE_I18N = True
# If you set this to False, Django will not format dates, numbers and
# calendars according to the current locale
USE_L10N = True
# Absolute path to the directory that holds media.
# Example: "/home/media/media.lawrenc e.com/"
MEDIA_ROOT = ''
# URL that handles the media served from MEDIA_ROOT. Make sure to use a
# trailing slash if there is a path component (optional in other cases).
# Examples: "http://media.lawrence.com", "http://example.com/media/"
MEDIA_URL = ''
# URL prefix for admin media -- CSS, JavaScript and images. Make sure to use a
# trailing slash.
# Examples: "http://foo.com/media/", "/media/".
ADMIN_MEDIA_PREFIX = '/media/'
# Make this unique, and don't share it with anybody.
SECRET_KEY = '_$82wxh2pq)vn@(esm7h2sz$x lilwsgkyb6 60l#1yq2bm 726&u'
# List of callables that know how to import templates from various sources.
TEMPLATE_LOADERS = (
'django.template.loaders.f ilesystem. Loader',
'django.template.loaders.a pp_directo ries.Loade r',
# 'django.template.loaders.e ggs.Loader ',
)
MIDDLEWARE_CLASSES = (
'django.middleware.common. CommonMidd leware',
'django.contrib.sessions.m iddleware. SessionMid dleware',
#'django.middleware.csrf.C srfViewMid dleware',
'django.contrib.auth.middl eware.Auth entication Middleware ',
#'django.contrib.messages. middleware .MessageMi ddleware',
)
ROOT_URLCONF = 'osp1a.urls'
TEMPLATE_DIRS = (
# Put strings here, like "/home/html/django_templat es" or "C:/www/django/templates".
# Always use forward slashes, even on Windows.
# Don't forget to use absolute paths, not relative paths.
)
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttyp es',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
# Uncomment the next line to enable the admin:
'django.contrib.admin',
'django.contrib.gis',
'osp1a.osp1a_app',
# Uncomment the next line to enable admin documentation:
# 'django.contrib.admindocs' ,
)
************************
and the models file:
************************
from django.contrib.gis.db import models
# Create your models here.
class Read_Write_Vector(models.M odel):
id = models.IntegerField('ID')
cvr = models.CharField('COVER', max_length=20)
objects = models.GeoManager()
# Returns the string representation of the model.
def __unicode__(self):
return self.name
************************
File "c:\Python26\lib\site-pack
rations.py", line 8, in <module>
from django.contrib.gis.geometr
File "c:\Python26\lib\site-pack
__.py", line 14, in <module>
'"%s".' % geom_backend)
django.core.exceptions.Imp
TRY_BACKEND "geos".
Please note that I'm working in a Windows XP environment.
From what I've read, the most common reason for this issue is the failure of the system to recognize the GEOS library path, which apparently ends at libgeos_c.so. I've searched for this file on my system, and the closest I could find was libgeos_c-1.dll.
The available documentation indicates how to correct this for Linux and Unix systems, but not for Windows. I think I may have to set the GEOS_LIBRARY_PATH system variable, or maybe reconfigure GEOS, but I'm not sure how.
Here's my settings file:
************************
# Django settings for osp1a project.
DEBUG = True
TEMPLATE_DEBUG = DEBUG
ADMINS = (
# ('Your Name', 'your_email@domain.com'),
)
MANAGERS = ADMINS
DATABASES = {
'default': {
'ENGINE': 'django.contrib.gis.db.bac
'NAME': 'rw_vector', # Or path to database file if using sqlite3.
'USER': 'cshore11', # Not used with sqlite3.
'PASSWORD': '', # Not used with sqlite3.
'HOST': '', # Set to empty string for localhost. Not used with sqlite3.
'PORT': '', # Set to empty string for default. Not used with sqlite3.
}
}
# Local time zone for this installation. Choices can be found here:
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
# although not all choices may be available on all operating systems.
# On Unix systems, a value of None will cause Django to use the same
# timezone as the operating system.
# If running in a Windows environment this must be set to the same as your
# system time zone.
TIME_ZONE = 'America/Chicago'
# Language code for this installation. All choices can be found here:
# http://www.i18nguy.com/unicode/language-identifiers.html
LANGUAGE_CODE = 'en-us'
SITE_ID = 1
# If you set this to False, Django will make some optimizations so as not
# to load the internationalization machinery.
USE_I18N = True
# If you set this to False, Django will not format dates, numbers and
# calendars according to the current locale
USE_L10N = True
# Absolute path to the directory that holds media.
# Example: "/home/media/media.lawrenc
MEDIA_ROOT = ''
# URL that handles the media served from MEDIA_ROOT. Make sure to use a
# trailing slash if there is a path component (optional in other cases).
# Examples: "http://media.lawrence.com", "http://example.com/media/"
MEDIA_URL = ''
# URL prefix for admin media -- CSS, JavaScript and images. Make sure to use a
# trailing slash.
# Examples: "http://foo.com/media/", "/media/".
ADMIN_MEDIA_PREFIX = '/media/'
# Make this unique, and don't share it with anybody.
SECRET_KEY = '_$82wxh2pq)vn@(esm7h2sz$x
# List of callables that know how to import templates from various sources.
TEMPLATE_LOADERS = (
'django.template.loaders.f
'django.template.loaders.a
# 'django.template.loaders.e
)
MIDDLEWARE_CLASSES = (
'django.middleware.common.
'django.contrib.sessions.m
#'django.middleware.csrf.C
'django.contrib.auth.middl
#'django.contrib.messages.
)
ROOT_URLCONF = 'osp1a.urls'
TEMPLATE_DIRS = (
# Put strings here, like "/home/html/django_templat
# Always use forward slashes, even on Windows.
# Don't forget to use absolute paths, not relative paths.
)
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttyp
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
# Uncomment the next line to enable the admin:
'django.contrib.admin',
'django.contrib.gis',
'osp1a.osp1a_app',
# Uncomment the next line to enable admin documentation:
# 'django.contrib.admindocs'
)
************************
and the models file:
************************
from django.contrib.gis.db import models
# Create your models here.
class Read_Write_Vector(models.M
id = models.IntegerField('ID')
cvr = models.CharField('COVER', max_length=20)
objects = models.GeoManager()
# Returns the string representation of the model.
def __unicode__(self):
return self.name
************************
Python 'DLL' should be *.pyd and named like the module imported, ie. geos.pyd.
ASKER
mish33,
Can you please elaborate? I searched for *g*.pyd on my hard drive, and came up empty. Also, the find_library() utility came up empty. All this makes me think that GEOS has not been configured correctly.
Can you please elaborate? I searched for *g*.pyd on my hard drive, and came up empty. Also, the find_library() utility came up empty. All this makes me think that GEOS has not been configured correctly.
when you do 'import geos'
there can be 3 options:
(A) file geos.py
(B) dir geos/ having __init__.py inside
(C) file geos.pyd (which is C-compiled extension module)
somewhere in python path (accessible as sys.path. Try import sys; print sys.path)
So either you don't have geos module or it's not in your path.
there can be 3 options:
(A) file geos.py
(B) dir geos/ having __init__.py inside
(C) file geos.pyd (which is C-compiled extension module)
somewhere in python path (accessible as sys.path. Try import sys; print sys.path)
So either you don't have geos module or it's not in your path.
ASKER
It's all pretty confusing. I downloaded and installed from OSGeo4W. Yet when I type 'import geos', the reply is 'No module named geos'.
My directory structure contains about half a dozen 'geos' folder and the compiled geos.pyc in \contrib\gis\geometry\back end. Is this the path I need to include? If so, do I also need to define the GEOS_LIBRARY_PATH system variable?
My directory structure contains about half a dozen 'geos' folder and the compiled geos.pyc in \contrib\gis\geometry\back
Try to reinstall osgeo4w/pkg-geos. This package is not user configurable and any problems should be reported as bugs to FrankWarmerdam (see http://trac.osgeo.org/osgeo4w/wiki/pkg-geos)
ASKER
The reinstall did nothing. I provided Frank with a copy of the current transcript, and will report back to you once I hear something.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
mish33 tried to explain it, but his responses were too cryptic.