Professional Python Project Companion
An opinionated guide to professional Python project infrastructure.
A professional Python project includes the configuration, conventions, automation, documentation, and validation that allow the project to be developed and maintained reliably.
This repository contains:
- the source for the companion;
- maintained canonical project files;
- the rationale behind the selected infrastructure;
- automated builds for web, EPUB, and PDF editions.
- the PyPi
puppackage for updating infrastructure files
Guiding Principle
Professional Python projects deserve intentional infrastructure.
The specific tools will evolve. The engineering concerns they address will remain.
Canonical Examples
The canonical/ directory contains annotated examples of the project files
discussed in the companion.
These examples represent one opinionated professional standard. Readers can fork the repository and adapt examples to their own requirements.
Install Tools
Build the Book
uv sync
quarto render
Outputs
The book can be rendered as:
- an HTML website;
- an EPUB;
- a print-ready PDF.
Update a Repo based on Templates
# see what files the command would update (optional, force latest)
uvx pup-up
uvx pup-up@latest
# actually add and overwrite the files listed (CAUTION: DESTRUCTIVE)
uvx pup-up --write
Developer Command Reference
Show command reference
In a machine terminal
Open a machine terminal where you want the project:
git clone https://github.com/denisecase/pup-up
cd pup-up
code .
In a VS Code terminal
uv self update
uv python pin 3.14
uv lock --upgrade
uv sync --extra dev --extra docs
uvx pre-commit install
uvx pre-commit autoupdate
git add -A
uvx pre-commit run --all-files
# repeat if changes were made
uvx pre-commit run --all-files
# repo-specific
uv run pup-up
uv run pup-up --write
# types, tests, docs
uv run python -m pyright
uv run python -m pytest
uv run python -m zensical build
# save progress
git add -A
git commit -m "update"
git push -u origin main
License
The book text and canonical examples may use different licenses. See LICENSE and the licensing notes in the repository documentation.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pup_up-0.0.1.tar.gz.
File metadata
- Download URL: pup_up-0.0.1.tar.gz
- Upload date:
- Size: 18.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a10418ecac91ae74a2219388b55998c4f41b674a880f5df77b84ec880d49c01f
|
|
| MD5 |
c8f429b33f7ac9cd748e9393125caf32
|
|
| BLAKE2b-256 |
1f803f7ab416dde23b17155103897e28420f2f30016bd67209aabd65b7de17aa
|
Provenance
The following attestation bundles were made for pup_up-0.0.1.tar.gz:
Publisher:
release-pypi.yml on denisecase/pup-up
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pup_up-0.0.1.tar.gz -
Subject digest:
a10418ecac91ae74a2219388b55998c4f41b674a880f5df77b84ec880d49c01f - Sigstore transparency entry: 2340908512
- Sigstore integration time:
-
Permalink:
denisecase/pup-up@81101ce4970607a7b257a443848c490f62778d69 -
Branch / Tag:
refs/tags/v0.0.1 - Owner: https://github.com/denisecase
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-pypi.yml@81101ce4970607a7b257a443848c490f62778d69 -
Trigger Event:
push
-
Statement type:
File details
Details for the file pup_up-0.0.1-py3-none-any.whl.
File metadata
- Download URL: pup_up-0.0.1-py3-none-any.whl
- Upload date:
- Size: 19.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5a77b458c557b5cf445c67666e91b29cc50a8a03944081b899ffd4ce7835bd38
|
|
| MD5 |
53b5690c610ddd8e7bb6173f771aa740
|
|
| BLAKE2b-256 |
feaabd735d1b3d8170b26ed33c9b3d5b975b07d41af6af872c935621b015dc86
|
Provenance
The following attestation bundles were made for pup_up-0.0.1-py3-none-any.whl:
Publisher:
release-pypi.yml on denisecase/pup-up
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pup_up-0.0.1-py3-none-any.whl -
Subject digest:
5a77b458c557b5cf445c67666e91b29cc50a8a03944081b899ffd4ce7835bd38 - Sigstore transparency entry: 2340908521
- Sigstore integration time:
-
Permalink:
denisecase/pup-up@81101ce4970607a7b257a443848c490f62778d69 -
Branch / Tag:
refs/tags/v0.0.1 - Owner: https://github.com/denisecase
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-pypi.yml@81101ce4970607a7b257a443848c490f62778d69 -
Trigger Event:
push
-
Statement type: