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 --libto 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
justfilewith quality, test, docs, and build recipes - Creates docs/build scaffolding (
docs/,docs_sphinx/,zensical.toml,build.spec) - Creates
.secrets.baselinealongside 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 buildby default to generateuv.lock
Prerequisites
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
├── docs/index.md.tmpl # docs site landing page
├── docs/python-api.md.tmpl # API docs page
├── docs_sphinx/conf.py.tmpl # Sphinx configuration
├── 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
Release history Release notifications | RSS feed
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 pyptmpl-2026.4.13.0.tar.gz.
File metadata
- Download URL: pyptmpl-2026.4.13.0.tar.gz
- Upload date:
- Size: 23.6 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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
be8c08bb961d1cac889bbbce76e1c08ba7fe4a6a7fa10d80d236420126f20d20
|
|
| MD5 |
b2d4b9a6c317927f3eff92bd6fe43d7d
|
|
| BLAKE2b-256 |
95b261aaae8e15a239dd051dec51e47e4feda410389b9f9533423af2461d1ffb
|
File details
Details for the file pyptmpl-2026.4.13.0-py3-none-any.whl.
File metadata
- Download URL: pyptmpl-2026.4.13.0-py3-none-any.whl
- Upload date:
- Size: 38.8 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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6d6239ed54d5f8ebf5f1ab4f7001e6cb34619a8694a05d5a453ecb558651313c
|
|
| MD5 |
30e3a58a23e71b966e335fe0d1e48e19
|
|
| BLAKE2b-256 |
fcbd5d3b3b9e7d458bbfaebdaf0e22dde569e4b8051acf9ad441d355dc6dbe96
|