Python Geospatial CI/CD & Wheel Building

GDAL · PROJ · PyProj

Python Geospatial CI/CD & Wheel Building is a technical resource for compiling, testing, and distributing Python geospatial C-extensions — the bindings behind GDAL, PROJ, and PyProj — using modern CI/CD and wheel workflows. It exists to make native spatial packaging reproducible instead of fragile.

The material is organised around two areas. The first covers the binary contract itself: the CPython ABI, shared-library path resolution, memory safety, security boundaries, cross-compilation, and the trade-offs of vendoring PROJ and GDAL. The second covers the build pipeline: pyproject.toml, scikit-build-core and CMake, Pixi/conda environment isolation, manylinux and musllinux base images, caching strategies, and artifact structuring for distribution.

It is written for python gis developers, package maintainers, devops, and data platform teams. Every guide ships exact, copy-pasteable configuration and validation commands so you can move from a broken ImportError to a portable, audited wheel — across 2 core areas, 12 topics, and 10 step-by-step deep dives.

Start here

High-intent, copy-pasteable guides that solve the failures spatial wheel builds hit most often.

Browse every topic

Two core areas, each broken into focused topics and deep-dive guides.

Geospatial C-Extension Fundamentals & ABI Architecture

Shipping a Python geospatial package means shipping compiled C and C++ across machines you will never see. Bindings for GDAL, PROJ, GEOS, and raster engines are not pure Python…

Open section

Modern Python Build Tooling & Wheel Configuration

Turning a geospatial Python package into a binary wheel is a compilation problem disguised as a packaging problem. Every pip install rasterio or pip install pyproj ultimately…

Open section