open-navigator / web_docs /docs /development /python-packaging.md
jcbowyer's picture
Clean HuggingFace deployment without binary files
e59d91d
|
Raw
History Blame Contribute Delete
4.11 kB
---
title: Python Packaging Map
description: Which dependency manifest to use β€” the canonical uv workspace vs the runtime requirements.txt vs the optional environment-specific requirements-*.txt extras.
---
# Python Packaging Map
The repo carries several dependency manifests for historical and
environment-specific reasons. They are **not interchangeable** β€” this page is the
authoritative map of what each one is for. If you are onboarding, read the
[**Canonical path**](#canonical-path) first; everything else is an opt-in extra.
## Canonical path
- **`pyproject.toml` + `uv.lock` β€” the source of truth for the `packages/*` workspace.**
This is a [uv](https://docs.astral.sh/uv/) workspace (`[tool.uv.workspace] members =
["packages/*"]`). The root `pyproject.toml` is *virtual* (not itself buildable). Install
the workspace with:
```bash
uv sync
```
New Python belongs in `packages/` as a proper library β€” see `CLAUDE.md` and the
[Cleanup Roadmap](./cleanup-roadmap.md).
- **`requirements.txt` β€” the application runtime dependency set.** This is what the
Docker images, CI (`ci-build-test.yml`), and the `install.sh` / `install.ps1`
bootstrap scripts install for the FastAPI app + ingestion/scraping runtime. It predates
the uv workspace and still backs the deploy/runtime paths, so **it is load-bearing β€”
do not delete or rename it** without rewiring those consumers (Dockerfile,
Dockerfile.huggingface, CI, install scripts, deployment docs).
## Optional / environment-specific extras
Each `requirements-*.txt` is a deliberately-separate, self-documented extra (see the
header comment in each file). Install **on top of** the base only when you need that
workflow:
| File | Purpose | Install |
|---|---|---|
| `requirements-dbt.txt` | dbt-postgres for the dbt project. Pulls protobuf 6.x / pathspec that **conflict** with the main `.venv`, so it lives in a **separate** `.venv-dbt`. | `./packages/scrapers/scripts/openstates_setup_dbt_venv.sh` |
| `requirements-gemini-api.txt` | `google-genai` for transcript policy analysis (`meeting_transcript_policy.py`). | `pip install -r requirements-gemini-api.txt` |
| `requirements-transcript-diarize.txt` | Optional WhisperX speaker diarization (`--diarize`); pins `numpy<2`; needs `HF_TOKEN`. | `.venv/bin/pip install -r requirements-transcript-diarize.txt` |
| `requirements-spark.txt` | Spark / Delta Lake (~300 MB, needs a JDK). Only the discovery batch workflows use it. | `pip install -r requirements-spark.txt` |
| `requirements-ollama-scraping.txt` | Local Ollama + LangChain structured scraping. | `.venv/bin/pip install -r requirements.txt -r requirements-ollama-scraping.txt` |
| `requirements-cpu.txt` | CPU-only variant of the runtime (no CUDA), used by `Dockerfile.app` + the databricks/local install scripts. | `pip install -r requirements-cpu.txt` |
| `requirements-intel.txt` | Intel Arc / NPU-optimized ML stack (`intel-extension-for-pytorch`). | `pip install -r requirements-intel.txt` |
## Virtual environments
There is intentionally **more than one** venv:
- **`.venv`** β€” the main app/runtime + the uv workspace.
- **`.venv-dbt`** β€” isolated dbt environment (protobuf/pathspec pins conflict with
`.venv`; see `requirements-dbt.txt`). The dbt project under `dbt_project/` is a
standalone uv project for the same reason.
## Known cleanup follow-ups
These are **deferred** (each needs its own change + verification), tracked here so the
state is explicit rather than surprising:
- **`setup.py`** is legacy `setuptools` metadata, still referenced by the HuggingFace
deploy script (`packages/hosting/scripts/huggingface/deploy-huggingface.sh`) and a
rename-repo doc. It is a removal candidate **once that script is migrated** to the uv
workspace β€” not before.
- **Consolidating the runtime onto uv** (so `requirements.txt` / `requirements-cpu.txt`
are generated via `uv export` rather than hand-maintained) requires rewiring the
Dockerfiles, CI, and install scripts together. It is a deliberate, scoped effort
(Theme 4 of the repo-wide refactor & tech-debt plan).