A copier template, containing my preferred initial project setup.
- A
srcdirectory, because you should. - uv for Python and dependency management
- hatchling for builds
- pytest for tests
- ruff for linting & formatting
- Sphinx docs
- interrogate for pydoc coverage
- Just for task running
- Versioning using git tags.
- prek for Git hooks
- GitHub Actions for CI
- Changelog management with towncrier
- License file
- GitHub PR template, etc.
- Code coverage
This project template provides my preferred Python layout.
hatch-vcs is used for versioning, picking up the version number from the most recent git tag.
There's an issue that in a development environment,
the version number is frozen at the version set when the package was installed as editable.
A slightly hacky approach has been used in _version.py to provide an accurate "live" version number in all cases.
If you don't like it, remove _get_hatch_version() from _version.py and "hatchling" and "hatch-vcs" from the "dev" group in pyproject.toml.
- Should the CLI be optional? (Leaning towards yes.)