Skip to main content

Bootstrap a new Python project with best-practice tooling.

Project description

pyptmpl

Bootstrap a new Python project with best-practice tooling, runnable with a single command:

uvx pyptmpl my-project

It scaffolds a fully-configured Python project.

Features

  • Runs uv init --lib to create the project skeleton
  • Writes an opinionated pyproject.toml (CalVer, beartype, ruff, basedpyright, pyrefly, coverage)
  • Creates a smoke test under src/<package>/tests/
  • Creates a virtual environment via uv venv
  • Creates .gitignore, .yamllint, and .vscode/settings.json
  • Creates a single root justfile with quality, test, docs, and build recipes
  • Creates docs/build scaffolding (docs/, docs_sphinx/, zensical.toml, build.spec)
  • Creates .secrets.baseline alongside pre-commit config for detect-secrets
  • Optionally downloads a license from scancode-licensedb
  • Optionally installs prek and writes .pre-commit-config.yaml (ssort, ruff, basedpyright, pyrefly, vulture, deptry, pip-audit, coverage-100, …)
  • Optionally generates GitHub Actions workflows (lint-format, tests, typecheck, quality-security, publish-pypi, docs, sphinx-api, github-release) and dependabot.yml
  • Runs uv sync --extra dev --extra docs --extra build by default to generate uv.lock

Prerequisites

  • uv on PATH
  • git on PATH (optional – used to pre-fill author name/email)

Usage

uvx pyptmpl [OPTIONS] [PROJECT_NAME]

positional arguments:
  project_name          Name of the new project (prompted if omitted)

options:
  -h, --help            show this help message and exit
  -v, --version         show program version and exit
  -p VERSION, --python-version VERSION
                        Python version to target, e.g. 3.13 (prompted if omitted)
  -d TEXT, --description TEXT
                        Short project description (prompted if omitted)
  --no-license          Skip the interactive license selection step
  --no-prek             Skip prek / pre-commit setup
  --no-github-actions   Skip GitHub Actions workflow generation
  --no-sync             Skip final uv sync/lockfile generation

Examples

# Fully interactive
uvx pyptmpl

# Supply all required values up front
uvx pyptmpl my-lib --python-version 3.13 --description "A cool library"

# Skip optional steps
uvx pyptmpl my-lib -p 3.13 -d "A cool library" --no-license --no-prek --no-github-actions

Project structure

pyptmpl keeps all its boilerplate in src/pyptmpl/templates/:

src/pyptmpl/templates/
├── pyproject.toml.tmpl                          # pyproject.toml skeleton
├── test_smoke.py.tmpl                           # smoke test
├── gitignore.tmpl                               # .gitignore entries
├── yamllint.tmpl                                # .yamllint config
├── vscode_settings.json.tmpl                    # .vscode/settings.json
├── justfile.tmpl                                # root justfile
├── pre-commit-config.yaml.tmpl                  # .pre-commit-config.yaml
├── typos.toml.tmpl                              # typos dictionary overrides
├── docs/index.md.tmpl                           # docs site landing page
├── docs/python-api.md.tmpl                      # API docs page
├── docs_sphinx/conf.py.tmpl                     # Sphinx configuration
├── docs_sphinx/custom.css.tmpl                  # Sphinx API styling
├── zensical.toml.tmpl                           # Zensical site config
├── build.spec.tmpl                              # PyInstaller spec template
├── github/dependabot.yml.tmpl
├── github/workflows/github-release.yml.tmpl
├── github/workflows/docs.yml.tmpl
├── github/workflows/lint-format.yml.tmpl
├── github/workflows/publish-pypi.yml.tmpl
├── github/workflows/quality-security.yml.tmpl
├── github/workflows/sphinx-api.yml.tmpl
├── github/workflows/tests.yml.tmpl
└── github/workflows/typecheck.yml.tmpl

Template variables use {{VARNAME}} syntax. Add or modify templates to customize generated output for every new project.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyptmpl-2026.4.14.1.tar.gz (24.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pyptmpl-2026.4.14.1-py3-none-any.whl (40.4 kB view details)

Uploaded Python 3

File details

Details for the file pyptmpl-2026.4.14.1.tar.gz.

File metadata

  • Download URL: pyptmpl-2026.4.14.1.tar.gz
  • Upload date:
  • Size: 24.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.6 {"installer":{"name":"uv","version":"0.11.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for pyptmpl-2026.4.14.1.tar.gz
Algorithm Hash digest
SHA256 d1a9370388c1ba9d1b1e71607a76d54a44492204ddc465b57912db115499cff8
MD5 22a2f89df86d05d48531773db80f89f6
BLAKE2b-256 ce1b20d06ca93fb1a188bcdfe2be3e4a7a2cc2a86dc726320c717512c9ac4938

See more details on using hashes here.

File details

Details for the file pyptmpl-2026.4.14.1-py3-none-any.whl.

File metadata

  • Download URL: pyptmpl-2026.4.14.1-py3-none-any.whl
  • Upload date:
  • Size: 40.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.6 {"installer":{"name":"uv","version":"0.11.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for pyptmpl-2026.4.14.1-py3-none-any.whl
Algorithm Hash digest
SHA256 b6ab347289a72216151a9af6257a979c3719e1076d44ec2f5b31f4eab9b38025
MD5 e25d593bcd2095b6a491ec85b203c1f3
BLAKE2b-256 5bebe2d1e9e523e5cd3f96a14d09b2ae66a292e32e26f73fd7609f6a929facf8

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page