Cookiecutter template for a Python package.
The boilerplate Python project that aims to create facility for maintaining of the package easily. It considering tools for building, testing and distribution.
This template provides a basic structure for an idiomatic Python package with a convenient Makefile-facility and additional helpers.
Template can be configured using Cookiecutter's CLI or by altering parameters directly in cookiecutter.json.
There are a couple of tools for building, packaging, documentation and so on, that must be installed.
- GNU sed (
brew install gnu-sed
for macOS), - ripgrep (optionally),
- awk,
- Docker,
- Virtualenv,
- Sphinx (for sphinx-build and sphinx-apidoc).
To check availability of main tools just type make
or make doc
.
To get help about available Makefile targets type:
make help
Compile Pip requirements from
requirements.in
torequirements.txt
using pip-tools (via Docker):make requirements
Create the new virtual environment based on
requirements.txt
andrequirements-test.txt
:make venv
Install the package into a virtual environment in so-called "development mode":
source .venv/bin/activate make install # ...hard working here... make uninstall deactivate
Pytest is used as a test tool by default.
To run tests type (within a virtual environment):
make check
Create a source distribution (tarball with sources):
make sdist ls -al dist/*.tar.gz
Create a binary (wheel) distribution:
make dist ls -al dist/*.whl
Display system-wide information:
make docker-info
Show all images, containers and volumes:
make docker-stats
Build the image according to
Dockerfile
:make docker-build
Run temporary container in an interactive mode:
make docker-run
Remove all unused images, built containers and volumes:
make docker-clean
Documenting the project using Sphinx
Build an API documentation:
make apidoc
Build the documentation as a standalone HTML files:
make html open doc/_build/html/index.html
Clean the project's directory (precompiled and temporary files):
make clean
Clean the project's build output (eggs, distributions, builds):
make distclean
Delete almost everything (including virtual environment):
make mostlyclean