+4
-3
languages/python/README.md
+4
-3
languages/python/README.md
···
17
17
| project | what it is |
18
18
|---------|------------|
19
19
| [pdsx](https://github.com/zzstoatzz/pdsx) | ATProto MCP server and CLI |
20
-
| [raggy](https://github.com/zzstoatzz/raggy) | document loaders for LLMs |
21
-
| [prefect-pack](https://github.com/zzstoatzz/prefect-pack) | prefect utilities |
22
-
| [plyr.fm](https://github.com/zzstoatzz/plyr.fm) | music on atproto |
20
+
| [plyr-python-client](https://github.com/zzstoatzz/plyr-python-client) | uv workspace, multi-package repo |
21
+
| [pmgfal](https://github.com/zzstoatzz/pmgfal) | Rust+Python with maturin |
22
+
| [prefect-mcp-server-demo](https://github.com/zzstoatzz/prefect-mcp-server-demo) | MCP server patterns |
23
+
| [typsht](https://github.com/zzstoatzz/typsht) | parallel type checking tool |
23
24
24
25
and studying:
25
26
+1
languages/python/mcp.md
+1
languages/python/mcp.md
+41
-1
languages/python/project-setup.md
+41
-1
languages/python/project-setup.md
···
120
120
121
121
install with `uv sync --extra mcp` or `uv add 'myproject[mcp]'`.
122
122
123
+
## uv workspaces
124
+
125
+
for multi-package repos (like plyr-python-client):
126
+
127
+
```
128
+
myproject/
129
+
โโโ packages/
130
+
โ โโโ core/
131
+
โ โ โโโ src/core/
132
+
โ โ โโโ pyproject.toml
133
+
โ โโโ mcp/
134
+
โ โโโ src/mcp/
135
+
โ โโโ pyproject.toml
136
+
โโโ pyproject.toml # root workspace config
137
+
โโโ uv.lock
138
+
```
139
+
140
+
root pyproject.toml:
141
+
142
+
```toml
143
+
[tool.uv.workspace]
144
+
members = ["packages/*"]
145
+
146
+
[tool.uv.sources]
147
+
core = { workspace = true }
148
+
mcp = { workspace = true }
149
+
```
150
+
151
+
packages can depend on each other. one lockfile for the whole workspace.
152
+
153
+
## simpler build backend
154
+
155
+
for projects that don't need dynamic versioning, `uv_build` is lighter:
156
+
157
+
```toml
158
+
[build-system]
159
+
requires = ["uv_build>=0.9.2,<0.10.0"]
160
+
build-backend = "uv_build"
161
+
```
162
+
123
163
sources:
124
164
- [pdsx/pyproject.toml](https://github.com/zzstoatzz/pdsx/blob/main/pyproject.toml)
125
-
- [raggy/pyproject.toml](https://github.com/zzstoatzz/raggy/blob/main/pyproject.toml)
165
+
- [plyr-python-client](https://github.com/zzstoatzz/plyr-python-client)
+6
-1
languages/python/tooling.md
+6
-1
languages/python/tooling.md
···
116
116
117
117
`asyncio_mode = "auto"` means async tests just work - no `@pytest.mark.asyncio` needed.
118
118
119
+
## alternatives
120
+
121
+
- [typsht](https://github.com/zzstoatzz/typsht) - parallel type checking across multiple checkers
122
+
- [prek](https://github.com/zzstoatzz/prek) - pre-commit reimplemented in rust
123
+
119
124
sources:
120
125
- [pdsx/.pre-commit-config.yaml](https://github.com/zzstoatzz/pdsx/blob/main/.pre-commit-config.yaml)
121
-
- [raggy/pyproject.toml](https://github.com/zzstoatzz/raggy/blob/main/pyproject.toml)
126
+
- [pdsx/pyproject.toml](https://github.com/zzstoatzz/pdsx/blob/main/pyproject.toml)