|
1 | | -# create-python-app\n\n[](https://github.com/Create-Python-App/create-python-app/actions/workflows/test.yml) |
| 1 | +# create-python-app |
| 2 | + |
| 3 | +[](https://github.com/Create-Python-App/create-python-app/actions/workflows/test.yml) |
2 | 4 | [](https://github.com/Create-Python-App/create-python-app/actions/workflows/lint.yml) |
3 | 5 | [](https://github.com/Create-Python-App/create-python-app/actions/workflows/type-check.yml) |
4 | 6 | [](./LICENSE) |
5 | | -<!-- PyPI / coverage badges activate after first publish -->\nComposable scaffolding CLI for production-ready Python apps.\n\n> **Status:** bootstrapping. Roadmap: [#1](https://github.com/Create-Python-App/create-python-app/issues/1).\n\n\n## Install (preview)\n\nOnce published to PyPI:\n\n```bash\nuvx create-awesome-python-app@latest my-app\n```\n\nUntil the first release, use the workspace CLI stub:\n\n```bash\nuv sync\nuv run create-awesome-python-app\n```\n\n## License\n\nMIT — see [LICENSE](./LICENSE).\n\n## Monorepo layout (uv workspaces)\n\nThis repository is a **virtual uv workspace**: the root is not published; packages live under `packages/*` and share one `uv.lock` / `.venv`.\n\n```text\ncreate-python-app/ # virtual workspace root (no [project] table)\n├── pyproject.toml # [tool.uv.workspace] members = ["packages/*"]\n├── uv.lock\n├── .venv/ # shared environment (gitignored later)\n└── packages/\n ├── create-python-app-core/ # scaffolding engine\n └── create-awesome-python-app/ # CLI (depends on core via workspace)\n```\n\n### Setup\n\n```bash\n# Requires uv: https://docs.astral.sh/uv/\nuv sync\n```\n\n\n\n## Development commands\n\nFrom the repo root (requires [uv](https://docs.astral.sh/uv/)):\n\n| Task | Make | Equivalent |\n|------|------|------------|\n| Install workspace | `make sync` | `uv sync` |\n| Tests | `make test` | `uv run pytest` |\n| Lint | `make lint` | `uv run ruff check .` |\n| Type-check | `make typecheck` | `uv run pyright` |\n| Build packages | `make build` | `uv build --all` |\n\n> Install git hooks: `uv run pre-commit install`\n>\n> Ruff, Pyright, and pytest are wired in Epic 2 (`#17`–`#20`). Until then, `make lint` / `test` / `typecheck` will fail if those tools are not installed yet — that is expected.\n\n## Python version\n\n- **Pin file:** `.python-version` → `3.12`\n- **Constraint:** every workspace member sets `requires-python = ">=3.12"`\n- **CI:** workflows (Epic 6 / #45) must install Python 3.12+ matching this pin\n\n```bash\nuv python install # respects .python-version when needed\nuv sync\n```\n\n### Reference\n\n- [uv workspaces handbook](https://pydevtools.com/handbook/how-to/how-to-set-up-a-python-monorepo-with-uv-workspaces/)\n- Node parity: [Create-Node-App/create-node-app](https://github.com/Create-Node-App/create-node-app)\n |
| 7 | + |
| 8 | +<!-- PyPI / coverage badges activate after first publish --> |
| 9 | + |
| 10 | +Composable scaffolding CLI for production-ready Python apps. |
| 11 | + |
| 12 | +> **Status:** bootstrapping complete. Roadmap: [#1](https://github.com/Create-Python-App/create-python-app/issues/1). |
| 13 | +
|
| 14 | +## Install (preview) |
| 15 | + |
| 16 | +Once published to PyPI: |
| 17 | + |
| 18 | +```bash |
| 19 | +uvx create-awesome-python-app@latest my-app |
| 20 | +``` |
| 21 | + |
| 22 | +Until the first release, use the workspace CLI: |
| 23 | + |
| 24 | +```bash |
| 25 | +uv sync |
| 26 | +uv run create-awesome-python-app --help |
| 27 | +``` |
| 28 | + |
| 29 | +## License |
| 30 | + |
| 31 | +MIT — see [LICENSE](./LICENSE). |
| 32 | + |
| 33 | +## Monorepo layout (uv workspaces) |
| 34 | + |
| 35 | +This repository is a **virtual uv workspace**: the root is not published; packages live under `packages/*` and share one `uv.lock` / `.venv`. |
| 36 | + |
| 37 | +```text |
| 38 | +create-python-app/ # virtual workspace root (no [project] table) |
| 39 | +├── pyproject.toml # [tool.uv.workspace] members = ["packages/*"] |
| 40 | +├── uv.lock |
| 41 | +├── .venv/ |
| 42 | +└── packages/ |
| 43 | + ├── create-python-app-core/ # scaffolding engine |
| 44 | + └── create-awesome-python-app/ # CLI (depends on core via workspace) |
| 45 | +``` |
| 46 | + |
| 47 | +### Setup |
| 48 | + |
| 49 | +```bash |
| 50 | +# Requires uv: https://docs.astral.sh/uv/ |
| 51 | +uv sync --group dev |
| 52 | +``` |
| 53 | + |
| 54 | +## Development commands |
| 55 | + |
| 56 | +From the repo root (requires [uv](https://docs.astral.sh/uv/)): |
| 57 | + |
| 58 | +| Task | Make | Equivalent | |
| 59 | +|------|------|------------| |
| 60 | +| Install workspace | `make sync` | `uv sync --group dev` | |
| 61 | +| Tests | `make test` | `uv run pytest` | |
| 62 | +| Lint | `make lint` | `uv run ruff check .` | |
| 63 | +| Type-check | `make typecheck` | `uv run pyright` | |
| 64 | +| Build packages | `make build` | `uv build --all` | |
| 65 | + |
| 66 | +Install git hooks: `uv run pre-commit install` |
| 67 | + |
| 68 | +## Python version |
| 69 | + |
| 70 | +- **Pin file:** `.python-version` → `3.12` |
| 71 | +- **Constraint:** every workspace member sets `requires-python = ">=3.12"` |
| 72 | +- **CI:** workflows install Python 3.12+ matching this pin |
| 73 | + |
| 74 | +```bash |
| 75 | +uv python install |
| 76 | +uv sync --group dev |
| 77 | +``` |
| 78 | + |
6 | 79 | ## Docker |
7 | 80 |
|
8 | 81 | ```bash |
9 | 82 | docker build -t create-awesome-python-app . |
10 | 83 | docker run --rm create-awesome-python-app --help |
11 | 84 | ``` |
12 | 85 |
|
| 86 | +### Reference |
| 87 | + |
| 88 | +- [uv workspaces handbook](https://pydevtools.com/handbook/how-to/how-to-set-up-a-python-monorepo-with-uv-workspaces/) |
| 89 | +- Node parity: [Create-Node-App/create-node-app](https://github.com/Create-Node-App/create-node-app) |
0 commit comments