Dev diary - 18. August 2025

Python Dockerfile with UV

header_image

In the evolving world of Python tooling, UV by Astral is quickly emerging as a game-changer for dependency management.

It’s a fast, Rust-based replacement for pip, virtualenv, and pip-tools—all rolled into one. If you’ve ever been frustrated with the performance or complexity of managing Python environments, UV might be exactly what you’ve been waiting for.

Unlike traditional tools, UV:

  1. Resolves and installs dependencies blazingly fast.
  2. Eliminates the need for a separate virtual environment tool.
  3. Supports lockfiles (uv.lock) for reproducible builds.
  4. Is fully compatible with pyproject.toml, which is becoming the standard in Python projects.

While the official UV docs provide a minimal Docker setup, I found that in practice it falls a bit short.

After some research (and a fair bit of trial and error), here’s how I’m structuring my Dockerfile to make the most of UV in a robust, production-ready way.

The Dockerfile

dockerfile

>FROM python:3.12-slim-bookworm AS builder
>RUN apt-get update && apt-get install -y --no-install-recommends curl ca-certificates
>ADD https://astral.sh/uv/0.5.31/install.sh /uv-installer.sh
>RUN sh /uv-installer.sh && rm /uv-installer.sh
>ENV PATH="/root/.local/bin/:$PATH"
>ENV UV_COMPILE_BYTECODE=1
>ENV UV_LINK_MODE=copy
>WORKDIR /app
>COPY pyproject.toml uv.lock ./
>RUN uv sync --frozen --no-install-project
># Run arbitrary Python with UV
>RUN uv run python -c "import logging; logging.basicConfig(level=logging.INFO); logging.info('Hello, world')"
>FROM python:3.12-slim-bookworm AS runtime
>WORKDIR /app
># Copy the environment that UV created in the builder stage
>COPY --from=builder /app/.venv /app/.venv
>ENV PATH="/app/.venv/bin:$PATH"
>ENV PYTHONPATH="/app/src:${PYTHONPATH}"
>
blog author
Author
Germán Distel

I'm a Fullstack JavaScript Developer who enjoys bringing ideas to life using NestJS, React, and Angular—plus a bit of Python when needed. Outside of coding, I like trying out new technologies, reading, and spending quality time playing with my daughter.

Read more

Contact us

Let's talk

I hereby consent to the processing of my personal data.