A cookiecutter (project template) for rapidly developing new open source Python packages. Best practices with all the modern bells and whistles included.
- Powered by cruft
- Keep your project up-to-date with best practices
- Powered by Github Actions
- Testing against multiple different versions
- Automatically published as GitHub Pages
- Powered by mkdocs-material
- Auto-generated API documentation from docstrings via mkdocstrings
- See the extensive list of MkDocs plugins which can help you to tune the documentation to fit your project's needs
- Publishing to PyPI when a release is made in GitHub
- Gently enforced: Keep a Changelog
- GitHub releases get their description automatically populated based on the changelog content
- The Unreleased section is automatically updated when a release is done
- Changelog is embedded in the documentation
- Poetry for managing dependencies and packaging
- pre-commit for running all the goodies listed below
- mypy for static type checking
- ruff for automatic formatting, linting and automatically fixing some linting errors
- Updates to the best practices (via GHA workflow which runs
cruft update
and creates a PR) - Dependency updates (via GHA workflow which creates a PR)
Make sure you have cruft
installed. Alternatively, you can use
cookiecutter
if you are not interested in
getting updates to the project "boilerplate" in the future.
Create a new project:
cruft create https://github.com/collijk/python-package-cookiecutter
The CLI interface will ask some basic questions, such the name of the project, and then generate all the goodies automatically.
After that you can make it a proper git repo:
cd <your-project-slug>
git init
git add .
git commit -m "Initial project structure from Python Package cookiecutter"
We update this cookiecutter template regularly to keep it up-to-date with the best practices of the Python world. You can get the updates into your project with:
cruft update
Required for publishing the package to PyPI. You can generate a token by logging into PyPI and navigating to Add API token in your account settings.
This cookiecutter template needs repository access for the following operations:
- Automatically updating the infrastructure files when the template is updated (via cruft)
- Automatically updating the dependencies.
- Automatically updating the changelog and version for draft releases.
To enable these features, you need to create a
personal access token
and use it as the value for GH_TOKEN
secret. When creating the access token, the
following permissions have to be granted:
- repo
- workflow
The first release will create gh-pages
branch which will contain the static files for
the documentation. Enable GitHub Pages in the Pages section of the repository
settings.