Files
Lee Chagolla-Christensen b5b00ca72a Migrate to uv from poetry (#99)
* initial uv migration

* update github workflows

* use python module not system commands

* remove poetry references

* fix uv in prod images

---------

Co-authored-by: Lee Chagolla-Christensen <lee@localhost>
2026-01-14 15:20:31 -08:00

71 lines
1.9 KiB
Docker

ARG PYTHON_BASE_DEV_IMAGE=nemesis-python-base-dev
ARG PYTHON_BASE_PROD_IMAGE=nemesis-python-base-prod
FROM ${PYTHON_BASE_DEV_IMAGE} AS base
# Install build dependencies needed for plyvel and other native packages
RUN apt-get update && \
apt-get install -y --no-install-recommends \
build-essential \
libleveldb-dev \
libleveldb1d \
pkg-config && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# If dependencies change, re-copy all the dependencies
# In the future we can be more efficient with this an only copy the lib folders
# that this project uses
COPY ./projects/cli/uv.lock ./projects/cli/pyproject.toml /src/projects/cli/
COPY ./libs /src/libs
COPY ./projects/cli /src/projects/cli/
WORKDIR /src/projects/cli
########################
# Development
########################
FROM base AS dev
COPY --from=base /src /src
WORKDIR /src/projects/cli
RUN uv sync --frozen
# Immediate output (no buffering)
ENV PYTHONUNBUFFERED=1
# No .pyc/pycache files
ENV PYTHONDONTWRITEBYTECODE=1
ENV LOG_LEVEL=DEBUG
ENTRYPOINT ["uv", "run", "python", "-m", "cli"]
########################
# Production
########################
FROM base AS bundle
COPY --from=base /src /src
WORKDIR /src/projects/cli
RUN uv export --frozen --no-dev --no-hashes -o requirements.txt && \
uv venv /venv --python /usr/local/bin/python3 --seed && \
/venv/bin/pip install --no-cache-dir -r requirements.txt && \
/venv/bin/pip install --no-cache-dir /src/libs/common /src/projects/cli
FROM ${PYTHON_BASE_PROD_IMAGE} AS prod
# Install ONLY runtime dependencies for plyvel (not build dependencies)
RUN apt-get update && \
apt-get install -y --no-install-recommends \
libleveldb1d && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
COPY --from=bundle /venv /venv
ENV PYTHONUNBUFFERED=1
ENV PYTHONDONTWRITEBYTECODE=1
ENV LOG_LEVEL=INFO
ENTRYPOINT ["/venv/bin/python", "-m", "cli"]