Note! This doesn’t seem to work on macOS Sequoia. Here’s an updated version.
I’ve been working on several GeoDjango projects latey and one thing common with most of them is the difficulty of setting up Spatialite on CI and macOS. The usual error message from pytest is:
django.core.exceptions.ImproperlyConfigured: SpatiaLite requires SQLite to be configured to allow extension loading.
The error happens because Python is built with extensions loading disabled.
For macOS the easiest way to use Spatialite is to use Homebrew to install the Spatialite deps and then use pyenv to install a compatible Python.
Step By Step
First install Spatialite:
brew install spatialite-toolsThen check where the related libraries are installed:
brew info sqlite
brew brew --prefix opensslThen set LDFLAGS, CPPFLAGS and PYTHON_CONFIGURE_OPTS before installing a Python version where --enable-loadable-sqlite-extensions is turned on:
LDFLAGS="-L/opt/homebrew/opt/sqlite/lib" CPPFLAGS="-I/opt/homebrew/opt/sqlite/include" PYTHON_CONFIGURE_OPTS="--enable-loadable-sqlite-extensions --enable-optimizations --with-openssl=/opt/homebrew/opt/openssl@3" pyenv install 3.11.6Now just recreate your virtualenv using this Python version!