Spawn Python projects from templates.
Project description
pj-py
Spawn and ship Python projects from templates.
pip install pj-py
pj-py init my-lib # create
# ... code, commit, push ...
pj-py ship # release
Commands
init — create a project
pj-py init my-lib -d "Does one thing well"
Spawns a new GitHub repo from 1iis/py (the reference Python template),
clones it locally, renames my_package to your project name, installs dependencies, and makes the
initial commit.
from pj_py import init
p = init("my-lib")
# → Project(owner="1iis", repo="my-lib", path=Path("my-lib"))
| Param | Default | Description |
|---|---|---|
name |
(required) | Repo name and local directory |
desc |
"" |
Short project description |
template |
"py" |
Alias → 1iis/py. Full owner/repo also accepted |
org |
"1iis" |
GitHub owner for the new repo |
private |
True |
Whether the repo is private |
path |
cwd |
Parent directory for the clone |
token |
$GITHUB_TOKEN |
GitHub PAT |
ship — release a new version
pj-py ship "### Added\n\n- Feature X"
pj-py ship # auto-generates boilerplate
Non-interactive, one-call release: bumps the version via fastship, writes the changelog entry,
commits and pushes, creates a GitHub release, and uploads to PyPI.
from pj_py import ship
v = ship() # patch bump
v = ship("minor") # minor bump
v = ship("major") # major bump
# → "0.0.3"
| Param | Default | Description |
|---|---|---|
msg |
"" |
Changelog entry. Empty → boilerplate |
bump |
"patch" |
Version part to bump |
path |
cwd |
Project root |
token |
$GITHUB_TOKEN / $FASTSHIP_TOKEN |
For GitHub releases (optional, falls back to no GH release) |
Requires .pypirc configured for PyPI uploads.
Prerequisites
- Python 3.10+
- uv (install)
- git
- GitHub token with repo scope for
init— setGITHUB_TOKEN .pypircwith PyPI token forship- fastship
What you get
my-lib/
├── src/
│ └── my_lib/ # renamed from my_package
│ ├── __init__.py # version + main entry point
│ ├── __main__.py # python -m support
│ └── py.typed # typed marker
├── tests/
│ └── test_main.py # smoke test
├── pyproject.toml # hatchling, ruff, fastship
├── .python-version # 3.12
├── CHANGELOG.md # fastship-ready
├── .github/workflows/ci.yml
└── LICENSE # Apache 2.0
Architecture
1iis/py — Language template (hatchling, ruff, uv, fastship)
↓
pj-py — init() + ship() from templates
↓
pj — (future) Language-agnostic wrapper
Design
- Pure library — all UX (colors, progress bars, interactive prompts) lives in a higher-level wrapper
- Raise, don't print — errors are exceptions (
PjPyError,AuthError,ShipError) - Blocking —
init()andship()return only when the project is fully ready - Single responsibility — knows Python templates and Python packaging. That's it.
- Lean — delegates to
fastshipfor version bumping and PyPI upload, toghapifor GitHub API, touvfor dependency management
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 pj_py-0.0.5.tar.gz.
File metadata
- Download URL: pj_py-0.0.5.tar.gz
- Upload date:
- Size: 54.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e4f9a02f0234de413a42f1ce2ed7a9eac0f01edbffaacd9ef293b07a3407c86a
|
|
| MD5 |
d50a71e8565472d5811c7751e3b4b11f
|
|
| BLAKE2b-256 |
854d65da83f1001a12fe767acdea4c61b1743b58074aae8bc7f800043f5ce5ba
|
File details
Details for the file pj_py-0.0.5-py3-none-any.whl.
File metadata
- Download URL: pj_py-0.0.5-py3-none-any.whl
- Upload date:
- Size: 10.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1aae7a51b7db7a0bf0e5b13979f65301c73b18cd1c8357060e6de87d91b96742
|
|
| MD5 |
89a689ac3ad7d1b98304102d0a825601
|
|
| BLAKE2b-256 |
46a27d2f4cb2b48ae28b4122a6484ea367c8a01142c3c9ef5e88ee5ee7868942
|