Cookiecutter template for a modern Python package.
- GitHub repo: https://github.com/fedejaure/cookiecutter-modern-pypackage.git
- Documentation: https://cookiecutter-modern-pypackage.readthedocs.io
- Free software: MIT license
- Dependency tracking using Poetry
- Testing setup with Pytest
- Github Actions ready for Continuous Integration testing
- Linting provided by Flake8 with Flakehell
- Docstring linting provided by Darglint using the Google Python Style Guide
- Static type checking by Mypy
- Formatting provided by Black and Isort
- Checks dependencies for known security vulnerabilities with Safety
- Git hooks managed by pre-commit.
- All development tasks (lint, format, test, etc) wrapped up in a python CLI by invoke
- Multiple Python environments testing provided by Nox
- Documentation provided by Sphinx ready for generation with, for example, Read the Docs
- Command line interface using Click (optional)
- Automated dependency updates with Dependabot
- Coverage reports on Codecov
- Automated releases to PyPI and TestPyPI
Install the latest Cookiecutter if you haven't installed it yet (this requires Cookiecutter 1.4.0 or higher):
pip install -U cookiecutter
Generate a Python package project:
cookiecutter gh:fedejaure/cookiecutter-modern-pypackage --checkout v1.2.2
Then:
- Create a repo and put it there.
- Install the dev requirements into a virtualenv. (
poetry install
) - Install pre-commit hooks. (
poetry run inv install-hooks
) - Configure Codecov repository settings. (Codecov App,
CODECOV_TOKEN
) - Add the repo to your Read the Docs account + turn on the Read the Docs service hook.
- Configure PyPI and TestPyPI tokens. (
PYPI_TOKEN
,TEST_PYPI_TOKEN
) - Release your package by pushing a new tag.
For more details, see the tutorial.
This cookiecutter was built for learning purpose and inspired by:
- audreyr/cookiecutter-pypackage: Cookiecutter template for a Python package.
- briggySmalls/cookiecutter-pypackage: A fork from audreyr/cookiecutter-pypackage using Poetry for package management, with linting, formatting and more.
- hypermodern-python: Hypermodern Python article series.