cookiecutter gh:TezRomacH/python-package-template --checkout v1.1.1
All you need is the latest version of cookiecutter π
In this cookiecutter πͺ template we combine state-of-the-art libraries and best development practices for Python.
- Supports
Python 3.7
and higher. Poetry
as a dependencies manager. See configuration inpyproject.toml
andsetup.cfg
.- Automatic codestyle with
black
,isort
andpyupgrade
. - Ready-to-use
pre-commit
hooks with code-formatting. - Type checks with
mypy
; docstring checks withdarglint
; security checks withsafety
andbandit
- Testing with
pytest
. - Ready-to-use
.editorconfig
,.dockerignore
, and.gitignore
. You don't have to worry about those things.
GitHub
integration: issue and pr templates.Github Actions
with predefined build workflow as the default CI/CD.- Everything is already set up for security checks, codestyle checks, code formatting, testing, linting, docker builds, etc with
Makefile
. More details in makefile-usage. - Dockerfile for your package.
- Always up-to-date dependencies with
@dependabot
. You only need to enable it. - Automatic release notes with
Release Drafter
. You may see the list of labels inrelease-drafter.yml
. Works perfectly with Semantic Versions specification.
- Ready-to-use Pull Requests templates and several Issue templates.
- Files such as:
LICENSE
,CONTRIBUTING.md
,CODE_OF_CONDUCT.md
, andSECURITY.md
are generated automatically. Stale bot
that closes abandoned issues after a period of inactivity. (You will only need to setup free plan). Configuration is here.- Semantic Versions specification with
Release Drafter
.
To begin using the template consider updating cookiecutter
pip install -U cookiecutter
then go to a directory where you want to create your project and run:
cookiecutter gh:TezRomacH/python-package-template --checkout v1.1.1
Template generator will ask you to fill some variables.
The input variables, with their default values:
Parameter | Default value | Description |
---|---|---|
project_name |
python-project |
Check the availability of possible name before creating the project. |
project_description |
based on the project_name |
Brief description of your project. |
organization |
based on the project_name |
Name of the organization. We need to generate LICENCE and to specify ownership in pyproject.toml . |
license |
MIT |
One of MIT , BSD-3 , GNU GPL v3.0 and Apache Software License 2.0 . |
minimal_python_version |
3.7 |
Minimal Python version. One of 3.7 , 3.8 and 3.9 . It is used for builds, GitHub workflow and formatters (black , isort and pyupgrade ). |
github_name |
based on the organization |
GitHub username for hosting. Also used to set up README.md , pyproject.toml and template files for GitHub. |
email |
based on the organization |
Email for CODE_OF_CONDUCT.md , SECURITY.md files and to specify the ownership of the project in pyproject.toml . |
version |
0.1.0 |
Initial version of the package. Make sure it follows the Semantic Versions specification. |
line_length |
88 | The max length per line (used for codestyle with black and isort ). NOTE: This value must be between 50 and 300. |
All input values will be saved in the cookiecutter-config-file.yml
file so that you won't lose them. π
Your project will contain README.md
file with instructions for development, deployment, etc. You can read the project README.md template before.
By running make install
After you create a project, it will appear in your directory, and will display a message about how to initialize the project.
By running make pre-commit-install
. Make sure to set up git first via git init
.
Want to know more about Poetry? Check its documentation.
Details about Poetry
Poetry's commands are very intuitive and easy to learn, like:
poetry add numpy@latest
poetry run pytest
poetry publish --build
etc
Building a new version of the application contains steps:
- Bump the version of your package
poetry version <version>
. You can pass the new version explicitly, or a rule such asmajor
,minor
, orpatch
. For more details, refer to the Semantic Versions standard. - Make a commit to
GitHub
. - Create a
GitHub release
. - And... publish π
poetry publish --build
Makefile
contains a lot of functions for faster development.
1. Download and remove Poetry
To download and install Poetry run:
make poetry-download
To uninstall
make poetry-remove
2. Install all dependencies and pre-commit hooks
Install requirements:
make install
Pre-commit hooks coulb be installed after git init
via
make pre-commit-install
3. Codestyle
Automatic formatting uses pyupgrade
, isort
and black
.
make codestyle
# or use synonym
make formatting
Codestyle checks only, without rewriting files:
make check-codestyle
Note:
check-codestyle
usesisort
,black
anddarglint
library
Update all dev libraries to the latest version using one comand
make update-dev-deps
4. Code security
make check-safety
This command launches Poetry
integrity checks as well as identifies security issues with Safety
and Bandit
.
make check-safety
5. Type checks
Run mypy
static type checker
make mypy
6. Tests with coverage badges
Run pytest
make test
7. All linters
Of course there is a command to rule run all linters in one:
make lint
the same as:
make test && make check-codestyle && make mypy && make check-safety
8. Docker
make docker-build
which is equivalent to:
make docker-build VERSION=latest
Remove docker image with
make docker-remove
More information about docker.
9. Cleanup
Delete pycache files
make pycache-remove
Remove package build
make build-remove
Delete .DS_STORE files
make dsstore-remove
Remove .mypycache
make mypycache-remove
Or to remove all above run:
make cleanup
Well, that's up to you πͺπ». I can only recommend the packages and articles that helped me.
Typer
is great for creating CLI applications.Rich
makes it easy to add beautiful formatting in the terminal.Pydantic
β data validation and settings management using Python type hinting.Loguru
makes logging (stupidly) simple.tqdm
β fast, extensible progress bar for Python and CLI.IceCream
is a little library for sweet and creamy debugging.orjson
β ultra fast JSON parsing library.Returns
makes you function's output meaningful, typed, and safe!Hydra
is a framework for elegantly configuring complex applications.FastAPI
is a type-driven asynchronous web framework.
Articles:
- Open Source Guides.
- A handy guide to financial support for open source
- GitHub Actions Documentation.
- Maybe you would like to add gitmoji to commit names. This is really funny. π
You can see the list of available releases on the GitHub Releases page.
We follow Semantic Versions specification.
We use Release Drafter
. As pull requests are merged, a draft release is kept up-to-date listing the changes, ready to publish when youβre ready. With the categories option, you can categorize pull requests in release notes using labels.
Label | Title in Releases |
---|---|
enhancement , feature |
π Features |
bug , refactoring , bugfix , fix |
π§ Fixes & Refactoring |
build , ci , testing |
π¦ Build System & CI/CD |
breaking |
π₯ Breaking Changes |
documentation |
π Documentation |
dependencies |
β¬οΈ Dependencies updates |
This template will continue to develop and follow the bleeding edge new tools and best practices to improve the Python development experience.
Here is a list of things that have yet to be implemented:
- Tests coverage reporting (
Codecov
?). - Auto uploading your package to
PyPI
when new GitHub release is created. - Automatic creation and deployment of documentation to GitHub pages. I look at
MkDocs
with Material Design theme andmkdocstrings
. - Code metrics with
Radon
. - Docstring coverage with
interrogate
Dockerfile
linting withdockerfilelint
.- Hall of fame from
Sourcerer
. - Some advanced Python linting (?).
- End-to-end testing and validation of the cookiecutter template.
- Add
Invoke
- Add
Earthly
This project is licensed under the terms of the MIT
license. See LICENSE for more details.
This template was inspired by several great articles:
- Hypermodern Python
- Ultimate Setup for Your Next Python Project
- Nine simple steps for better-looking python code
- Modern Python developer's toolkit
and repositories:
Cookiecutter
wemake-python-package
- Audreyr's
cookiecutter-pypackage
- Full Stack FastAPI and PostgreSQL - Base Project Generator
- Cookiecutter Data Science Template:
cdst
Give them your βοΈ, these resources are amazing! π
@misc{python-package-template,
author = {Roman Tezikov},
title = {Python Packages Project Generator},
year = {2020},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {\url{https://github.com/TezRomacH/python-package-template}}
}
[![π Your next Python package needs a bleeding-edge project structure.](https://img.shields.io/badge/python--package--template-%F0%9F%9A%80-brightgreen)](https://github.com/TezRomacH/python-package-template)