#28160: Can't start with django.contrib.gis.gdal.HAS_GDAL = False due to
ImportError of GDALRaster
-------------------------------------+-------------------------------------
Reporter: Tom | Owner: nobody
Kazimiers |
Type: Bug | Status: new
Component: GIS | Version: 1.10
Severity: Normal | Keywords: GIS, GDAL, Contrib,
Triage Stage: | Bug
Unreviewed | Has patch: 0
Needs documentation: 0 | Needs tests: 0
Patch needs improvement: 0 | Easy pickings: 0
UI/UX: 0 |
-------------------------------------+-------------------------------------
Under some circumstances `django.contrib.gis.gdal.HAS_GDAL` is `False`.
This can be due to not having GDAL installed in the first place or by
overriding one's OS name (and thereby causing the test in
`django.contrib.gis.gdal.__init__.py` to result in an exception which in
turns causes `HAS_GDAL = False`).¹
Now with `HAS_GDAL = False`, I can't start Django anymore (neither the
shell or any other command), because I get the following error:
{{{
django.core.exceptions.ImproperlyConfigured: 'postgresql' isn't an
available database backend.
Try using 'django.db.backends.XXX', where XXX is one of:
'mysql', 'oracle', 'postgresql', 'sqlite3'
Error was: No module named postgresql.base
}}}
Digging a bit deeper into this reveals this is actually an ImportError:
`Error was: cannot import name GDALRaster`. Using other
`django.contrib.gis` functionality should also work without GDAL (and did
so in the past).
The problem seems to be that in commit
`bbfad84dd980a97174c3b061a3d1b5f1373c380d`
([https://github.com/django/django/commit/bbfad84dd980a97174c3b061a3d1b5f1373c380d
#diff-9501b5a77c1985430f52d03aedb3e434R7 here]) a new import has been
added to `django/contrib/gis/db/backends/postgis/operations.py`, which
tries to import `GDALRaster`: `from django.contrib.gis.gdal import
GDALRaster`. This of course fails with `HAS_GDAL = False`, because
`GDALRaster` has never been defined when `HAS_GDAL` was set false due to
an (expected) exception in `django/django/contrib/gis/gdal/libgdal.py`,
which is imported before `from django.contrib.gis.gdal.raster.source
import GDALRaster` in `django/django/contrib/gis/gdal/__init__.py`.
So maybe the import in
`django/contrib/gis/db/backends/postgis/operations.py` and the use of
`GDALRaster` should be conditional and only run if `HAS_GDAL = True`. I
can provide a patch if wanted.
This is a problem in both Django 1.10 and 1.11.
¹ In my project I need to do the latter to disable GDAL support
completely, because loading the library conflicts with `pgmagick` on
Ubuntu and there is no other way to disable GDAL, but this shouldn't
matter here. It would be nice though to have a way to force `HAS_GDAL =
False`, because unlike said in
`django/django/contrib/gis/gdal/__init__.py`, setting
`GDAL_LIBRARY_PATH='/null/path'` doesn't work (the automatic OS checks
override this).
--
Ticket URL: <https://code.djangoproject.com/ticket/28160>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/048.8c553e48891ed29b0fc020ce214521ac%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.