Build System¶
canVODpy uses uv_build as its build backend — a modern, fast backend from the Astral ecosystem with native namespace package support.
Distribution Formats¶
Pre-built, installed by copying to site-packages. No build step at install time.
canvod_readers-0.1.0-py3-none-any.whl
└── canvod/
└── readers/ ← namespace package (no canvod/__init__.py)
├── __init__.py
└── base.py
Filename anatomy: {name}-{version}-{python}-{abi}-{platform}.whl.
The py3-none-any suffix means: any Python 3, no native extensions, any platform.
canvod_readers-0.1.0.tar.gz — contains source code + metadata.
Requires a build step during installation. Provided alongside wheels for PyPI.
Build Configuration¶
# packages/canvod-readers/pyproject.toml
[build-system]
requires = ["uv_build>=0.9.17,<0.10.0"]
build-backend = "uv_build"
[tool.uv.build-backend]
module-name = "canvod.readers" # dot → namespace package
include = ["src/canvod/readers/data/*.dat"]
exclude = ["src/canvod/readers/tests/"]
canvod-utils exception
canvod-utils uses hatchling as its build backend — the only
package in the monorepo that does not use uv_build.
Building¶
# Single package
cd packages/canvod-readers
uv build
# → dist/canvod_readers-0.1.0.tar.gz
# → dist/canvod_readers-0.1.0-py3-none-any.whl
# All packages at once
just dist
Package Metadata¶
[project]
name = "canvod-readers"
version = "0.1.0"
description = "GNSS data format readers for canVODpy"
readme = "README.md"
license = {text = "Apache-2.0"}
authors = [{name = "Nicolas Bader", email = "nicolas.bader@geo.tuwien.ac.at"}]
requires-python = ">=3.14"
keywords = ["gnss", "rinex", "geodesy", "vod"]
classifiers = [
"Development Status :: 3 - Alpha",
"Intended Audience :: Science/Research",
"License :: OSI Approved :: Apache Software License",
"Programming Language :: Python :: 3.14",
"Topic :: Scientific/Engineering :: GIS",
]
dependencies = ["numpy>=2.0", "xarray>=2024.0"]
[project.urls]
Homepage = "https://github.com/nfb2021/canvodpy"
Repository = "https://github.com/nfb2021/canvodpy"
Issues = "https://github.com/nfb2021/canvodpy/issues"
Publishing¶
cd packages/canvod-readers
uv build
uv publish --repository testpypi
# Verify installation
pip install --index-url https://test.pypi.org/simple/ canvod-readers
uv build
uv publish
The just release command handles version bump + publish for all packages.
See docs/RELEASING.md for the full release workflow.
Version Management¶
All packages follow Semantic Versioning with unified version numbers across the monorepo.
just bump patch # 0.1.0 → 0.1.1 (bug fix)
just bump minor # 0.1.0 → 0.2.0 (new feature, backwards compatible)
just bump major # 0.1.0 → 1.0.0 (breaking change)
A version bump:
- Updates
versionin allpyproject.tomlfiles. - Creates a git commit
chore: bump version to x.y.z. - Creates a git tag
vx.y.z.
Troubleshooting¶
ModuleNotFoundError after install
Verify module-name in pyproject.toml uses dotted notation:
module-name = "canvod.readers" # correct
# module-name = "canvod_readers" # wrong — creates regular package
Wrong package structure in wheel
Run unzip -l dist/*.whl to inspect contents.
The wheel must contain canvod/readers/ but not canvod/__init__.py.
Build failures
uv build --verbose # detailed diagnostics