Installation¶
Every release ships per-arch wheels + sdists as individual GitHub Release assets, listed by a static PEP 503 index on GitHub Pages — the primary, permanent distribution channel for this project.
Python ≥3.14, Linux x86_64 or aarch64 (manylinux_2_28).
From the Pages index¶
The index carries only this project's three distributions, so keep PyPI as the primary index and add ours as an extra one:
Pin the three pd-cds* names to our index in pyproject.toml; all other
dependencies stay on PyPI:
dependencies = ["pd-cds-cli", "pd-cds-api", "pd-cds-api-bin"]
[[tool.uv.index]]
name = "pd-cds"
url = "https://dune.github.io/frontier-condb2/simple/"
explicit = true
[tool.uv.sources]
pd-cds-cli = [{ index = "pd-cds" }]
pd-cds-api = [{ index = "pd-cds" }]
pd-cds-api-bin = [{ index = "pd-cds" }]
All three must be listed as direct dependencies and sources-bound: uv
applies tool.uv.sources only to direct requirements, so with
explicit = true binding just pd-cds-cli, its transitive pd-cds-api
requirement would resolve against PyPI — where it does not exist — and
uv lock fails with "pd-cds-api was not found in the package registry".
A bare --index-url (replacing PyPI) fails — third-party dependencies
(typer, pydantic, …) are not hosted on our index. Every index link carries
#sha256= integrity data; installers reject corrupted artifacts by name.
pd-cds-cli pulls pd-cds-api and the platform-matching pd-cds-api-bin
automatically — installers select the wheel by its manylinux_2_28_x86_64 /
manylinux_2_28_aarch64 platform tag, so no manual arch choice is needed.
PyPI status
Institutional constraints block publishing to pypi.org — possibly
permanently — so do not plan around pip install pd-cds-cli from
PyPI. The twine→PyPI job in release.yml is kept dormant and activates
(without any workflow change) only if that institutional stance is lifted.
Direct release-asset URLs (pinned / air-gapped)¶
Each release also attaches the unpacked files individually — pinnable, and
mirrored easily for air-gapped installs. Substitute the current version for
<VERSION> (its tag is at the top of
/simple/, and
releases/latest
redirects to it):
pip install "https://github.com/DUNE/frontier-condb2/releases/download/v<VERSION>/pd_cds_cli-<VERSION>-py3-none-any.whl"
The pure-Python pd_cds_api / pd_cds_cli wheels alone are not enough at
runtime — also fetch the pd_cds_api_bin wheel matching your architecture
from the same release page.
What the native wheel ships¶
pd-cds-api-bin is the prebuilt native Frontier client runtime delivered to
pd-cds-api:
fn-fileget— self-contained executable built reproducibly in amanylinux_2_28container from the revision pinned inFRONTIER_REFlibpacparser.so.1— PAC support, loaded viadlopen, resolved through the binary's$ORIGINrunpathfrontier-manifest.json— provenance record (upstream SHA, glibc audit)
Wheels are platform-specific (py3-none-manylinux_2_28_<arch>); CI
hard-gates their contents (check-wheel-contents, auditwheel). Upstream
code is © Fermilab under the Fermitools BSD license.
Verify the install¶
Results land in ./pd-cds-data/. Live queries need FNAL VPN and (recommended)
a local Squid cache on localhost:3128 — see the
runbook
and the CLI guide for full usage.