33# full semver just for python base image
44ARG PYTHON_VERSION=3.11.11
55
6- FROM python:${PYTHON_VERSION}-slim AS builder
6+ FROM python:${PYTHON_VERSION}-slim-bookworm as builder
77
88# avoid stuck build due to user prompt
99ARG DEBIAN_FRONTEND=noninteractive
@@ -22,33 +22,33 @@ ENV PIP_NO_CACHE_DIR=off
2222ENV PIP_DISABLE_PIP_VERSION_CHECK=on
2323ENV PIP_DEFAULT_TIMEOUT=100
2424
25- # path
26- ENV VENV="/opt/venv"
25+ # venv
26+ ARG UV_PROJECT_ENVIRONMENT="/opt/venv"
27+ ENV VENV="${UV_PROJECT_ENVIRONMENT}"
2728ENV PATH="$VENV/bin:$PATH"
2829
30+ # uv
31+ COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/
32+
2933WORKDIR /app
30- COPY ./app .
31- COPY ./requirements.txt .
3234
33- RUN python -m venv $VENV \
34- && python -m pip install -r requirements.txt
35+ COPY ./app .
36+ COPY ./README.md .
37+ COPY pyproject.toml .
3538
36- # ! heroku doesn't use buildkit
37- # RUN --mount=type=cache,target=/root/.cache/pip \
38- # --mount=type=bind,source=./requirements.txt,target=/app/requirements.txt \
39- # python -m pip install -r requirements.txt
39+ RUN uv venv $UV_PROJECT_ENVIRONMENT \
40+ && uv pip install -r pyproject.toml
4041
41- FROM python:${PYTHON_VERSION}-slim AS runner
42+ FROM python:${PYTHON_VERSION}-slim-bookworm as runner
4243
4344# set timezone
4445ENV TZ=${TZ:-"America/Chicago"}
4546RUN ln -snf "/usr/share/zoneinfo/${TZ}" /etc/localtime && echo "$TZ" > /etc/timezone
4647
4748# setup standard non-root user for use downstream
4849ENV USER_NAME=appuser
49- ENV VENV="/opt/venv"
50-
51- ENV PATH="${VENV}/bin:${VENV}/lib/python${PYTHON_VERSION}/site-packages:/usr/local/bin:${HOME}/.local/bin:/bin:/usr/bin:/usr/share/doc:$PATH"
50+ ARG VENV="/opt/venv"
51+ ENV PATH=$VENV/bin:$HOME/.local/bin:$PATH
5252
5353# standardise on locale, don't generate .pyc, enable tracebacks on seg faults
5454ENV LANG C.UTF-8
0 commit comments