make python projects idiomatically
Generates a new idiomatic Python project for linux/macos:
project structure - .gitignore, LICENSE
format - black, isort
lint - ruff, mypy, black
test - pytest, coverage
other - pre-commit, Makefile, version.py, requirements
Install with pip3 install mkpyp
. Run with mkpyp
.
After cloning this repo or initializing a new git repository with git init
, complete the following steps in root directory.
# create a new virtual environment (e. g. venv)
python3 -m venv .venv
# activate the virtual environment
source .venv/bin/activate
# install pip-compile for auto-generating requirement files
pip install pip-tools hatch
# generate requirement files
make refresh-requirements
# install the requirements and install 'mkpyp' as editable package
make install
# autorun pre commit, needs .git directoy | manually run with pre-commit
pre-commit install
The location of where dependencies are declared depends on their scope.
- Package dependencies must be put into
pyproject.toml [project] .dependencies
. - Opt-in dependencies must be put into
pyproject.toml [project] .optional-dependencies
. - Testing dependencies must be put into
requirements/testing.in
. - Linting dependencies must be put into
requirements/linting.in
.
We generate the requirements files with make refresh-requirements
. Reinstall with make install
.
Build the project with hatch build
. Now run hatch publish --repo test
to upload the package to test.pypi.org
. Use hatch publish --repo main
to upload to the production PyPI. Define custom targets as per defined here.