Skip to content

pythoninthegrass/mvp

Repository files navigation

mvp

minimum viable python

Summary

Sets up a new development environment for a Mac or Linux (i.e., UNIX) box.

Table of Contents

Setup

Minimum requirements

Recommended requirements

Development

Cookiecutter

  • Install cookiecutter

    # asdf (my vote)
    asdf plugin add cookiecutter
    asdf install cookiecutter latest
    asdf set -u cookiecutter latest
    
    # pipx
    pipx install cookiecutter
    
    # python user directory
    python -m pip install --user cookiecutter
  • Use cookiecutter to create a new project

    # interactive
    cookiecutter gh:pythoninthegrass/mvp
    
    # non-interactive
    cookiecutter gh:pythoninthegrass/mvp
    
    # local debugging
    cd /tmp
    cookiecutter ~/git/mvp --no-input -f

Devbox

Devbox takes care of setting up a dev environment automatically.

Under the hood it uses Nix Package Manager.

# install base dependencies
make install

# install devbox
task install-devbox

# enter dev environment w/deps
devbox shell

# run repl
python

# exit dev environment
exit

# run tests
devbox run test

Taskfile

λ task
task: [default] task --list
task: Available tasks for this project:
* default:               Default task
* format:                Run formatters
* install:               Install project dependencies
* install-devbox:        Install devbox
* lint:                  Run linters
* pre-commit:            Run pre-commit hooks
* pyclean:               Remove .pyc and __pycache__
* test:                  Run tests
* docker:build:          Build the docker image
* docker:down:           Stop and remove containers, networks, and volumes with docker compose
* docker:exec:           Shell into a running container
* docker:login:          Login to the container registry
* docker:logs:           Follow the logs of a running container
* docker:net:            Create docker network
* docker:prune:          Prune docker
* docker:push:           Push the docker image to the registry
* docker:stop:           Stop the project with docker compose
* docker:up:             Start the project with docker compose
* docker:vol:            Create docker volume
* orbstack:create:       Create an orbstack VM        (aliases: orb:create)
* orbstack:delete:       Delete an orbstack VM        (aliases: orb:delete)
* orbstack:exec:         SSH into an orbstack VM      (aliases: orb:exec)
* orbstack:list:         List orbstack VMs            (aliases: orb:list)
* orbstack:start:        Start an orbstack VM         (aliases: orb:start)
* orbstack:stop:         Stop an orbstack VM          (aliases: orb:stop)
* orbstack:update:       Update orbstack app          (aliases: orb:update)
* redis:start:           Start Redis server
* redis:stop:            Stop Redis server
* uv:export-reqs:        Export requirements.txt
* uv:install:            Install project dependencies
* uv:install-uv:         Install uv
* uv:lock:               Update the project's lockfile.
* uv:sync:               Sync dependencies with lockfile
* uv:update-deps:        Update dependencies
* uv:venv:               Create a virtual environment                                                    

Tilt

minikube start --memory=2048 --cpus=2 --kubernetes-version=v1.28.3 -p minikube
git clone https://github.com/tilt-dev/tilt-example-python
cd tilt-example-python/3-recommended
tilt up
minikube stop
minikube delete
rm -rf tilt-example-python

TODO

Further Reading