Summary
The documented pip-based dev setup does not work: the dev extra depends on mosaic-shared, which is a uv workspace member rather than a published package. pip does not read [tool.uv.sources], so it looks for mosaic-shared on PyPI, where it does not exist.
Reproduction
$ python3 -m venv /tmp/pipcheck
$ /tmp/pipcheck/bin/pip install --dry-run -e ".[dev]"
...
ERROR: Could not find a version that satisfies the requirement mosaic-shared; extra == "dev" (from mosaic-bench[dev]) (from versions: none)
ERROR: No matching distribution found for mosaic-shared; extra == "dev"
Reproduced with pip 26.1.2 / CPython 3.10 on macOS arm64, but nothing here is platform- or version-specific: it is purely dependency resolution against the package index.
Cause
pyproject.toml declares:
[project.optional-dependencies]
dev = [..., "mosaic-shared"]
[tool.uv.workspace]
members = ["mosaic/mosaic_shared"]
[tool.uv.sources]
mosaic-shared = { workspace = true }
[tool.uv.workspace] and [tool.uv.sources] are uv-specific tables. Under uv the requirement resolves to the local workspace member; under pip it falls through to PyPI and fails. CI does not catch this because every workflow uses uv (ci.yml:43: cp production.uv.lock uv.lock && uv sync --frozen --extra dev), so the pip path is never exercised.
Only the dev extra is affected — pip install -e . with no extras resolves and installs fine, so README.md:94 (uv sync # or: pip install -e .) is correct as written.
Possible fixes
-
Document uv sync --extra dev as the supported dev setup and drop the pip variant.
-
Keep pip working by installing the workspace member first — the two-step form already appears in the repo for standalone tesseract use (README.md:164, docs/standalone.qmd:31):
$ pip install -e ./mosaic/mosaic_shared
$ pip install -e ".[dev]"
-
Publish mosaic-shared to PyPI.
Happy to send a PR for whichever option you prefer.
Summary
The documented pip-based dev setup does not work: the
devextra depends onmosaic-shared, which is a uv workspace member rather than a published package. pip does not read[tool.uv.sources], so it looks formosaic-sharedon PyPI, where it does not exist.Reproduction
Reproduced with pip 26.1.2 / CPython 3.10 on macOS arm64, but nothing here is platform- or version-specific: it is purely dependency resolution against the package index.
Cause
pyproject.tomldeclares:[tool.uv.workspace]and[tool.uv.sources]are uv-specific tables. Under uv the requirement resolves to the local workspace member; under pip it falls through to PyPI and fails. CI does not catch this because every workflow uses uv (ci.yml:43:cp production.uv.lock uv.lock && uv sync --frozen --extra dev), so the pip path is never exercised.Only the
devextra is affected —pip install -e .with no extras resolves and installs fine, soREADME.md:94(uv sync # or: pip install -e .) is correct as written.Possible fixes
Document
uv sync --extra devas the supported dev setup and drop the pip variant.Keep pip working by installing the workspace member first — the two-step form already appears in the repo for standalone tesseract use (
README.md:164,docs/standalone.qmd:31):Publish
mosaic-sharedto PyPI.Happy to send a PR for whichever option you prefer.