3
3
# full semver just for python base image
4
4
ARG PYTHON_VERSION=3.11.11
5
5
6
- FROM python:${PYTHON_VERSION}-slim AS builder
6
+ FROM python:${PYTHON_VERSION}-slim-bookworm as builder
7
7
8
8
# avoid stuck build due to user prompt
9
9
ARG DEBIAN_FRONTEND=noninteractive
@@ -22,33 +22,33 @@ ENV PIP_NO_CACHE_DIR=off
22
22
ENV PIP_DISABLE_PIP_VERSION_CHECK=on
23
23
ENV PIP_DEFAULT_TIMEOUT=100
24
24
25
- # path
26
- ENV VENV="/opt/venv"
25
+ # venv
26
+ ARG UV_PROJECT_ENVIRONMENT="/opt/venv"
27
+ ENV VENV="${UV_PROJECT_ENVIRONMENT}"
27
28
ENV PATH="$VENV/bin:$PATH"
28
29
30
+ # uv
31
+ COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/
32
+
29
33
WORKDIR /app
30
- COPY ./app .
31
- COPY ./requirements.txt .
32
34
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 .
35
38
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
40
41
41
- FROM python:${PYTHON_VERSION}-slim AS runner
42
+ FROM python:${PYTHON_VERSION}-slim-bookworm as runner
42
43
43
44
# set timezone
44
45
ENV TZ=${TZ:-"America/Chicago"}
45
46
RUN ln -snf "/usr/share/zoneinfo/${TZ}" /etc/localtime && echo "$TZ" > /etc/timezone
46
47
47
48
# setup standard non-root user for use downstream
48
49
ENV 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
52
52
53
53
# standardise on locale, don't generate .pyc, enable tracebacks on seg faults
54
54
ENV LANG C.UTF-8
0 commit comments