🐍

uv on Dockerをやってみた

2024/08/22に公開

前置き

先日Twitterで話題になった,uvでPythonのバージョンを管理できるようになったという内容のニュースを見て使いたくなった.

元記事: https://astral.sh/blog/uv-unified-python-packaging

記事によれば,下記のコマンドで uvPython のインストールができるとのこと.

$ curl -LsSf https://astral.sh/uv/install.sh | sh
$ uv python install 3.12

Docker環境を作ってuv経由でPythonをインストールしてみる

ここまでくるともはやDocker外してもいいんじゃないかなと思いつつ,ローカルのPCをいじるのも面倒なので,Dockerでサクッと立ち上げた.

GitHub Repository

https://github.com/shunsock/uv_on_docker_playground

検証

作ったDocker環境ではPythonのバージョンを指定していない.確認したところ下記のバージョンが入っていた.

$ root@fd7001b8cd78:/usr/local/app# uv run python --version
Python 3.12.5

異なるバージョンを入れてみる.

$ root@fd7001b8cd78:/usr/local/app# uv python install 3.11
Searching for Python versions matching: Python 3.11
Installed Python 3.11.9 in 7.03s
 + cpython-3.11.9-linux-aarch64-gnu

インストールできたか確認する.

$ root@fd7001b8cd78:/usr/local/app# uv python list
cpython-3.12.5-linux-aarch64-gnu     /root/.local/share/uv/python/cpython-3.12.5-linux-aarch64-gnu/bin/python3 -> python3.12
cpython-3.11.9-linux-aarch64-gnu     /root/.local/share/uv/python/cpython-3.11.9-linux-aarch64-gnu/bin/python3 -> python3.11
cpython-3.10.14-linux-aarch64-gnu    <download available>
cpython-3.9.19-linux-aarch64-gnu     <download available>
cpython-3.8.19-linux-aarch64-gnu     <download available>
pypy-3.7.13-linux-aarch64-gnu        <download available>

できている.Pythonのインタープリタとパッケージが一つのソフトウェアで管理できるのは嬉しい!

ソースコードをダウンロードする

使いたくなった方向けに.MITで公開しています.

git clone git@github.com:shunsock/uv_on_docker_playground.git
cd uv_on_docker_playground
docker compose up -d --build

カスタムしたい方は下記の compose.yml のcommandとかをいじると良いかと.

services:
  app:
    build: .
    tty: true
    volumes:
    - ./src/app:/usr/local/app
    working_dir: /usr/local/app
    environment:
      - PATH=/root/.cargo/bin:${PATH}
    command: ["tail", "-f", "/dev/null"]

Dockerfileもシンプルでいい感じにできます.

FROM debian:bookworm-slim

RUN apt-get update && apt-get install -y curl

RUN curl -LsSf https://astral.sh/uv/install.sh | sh && \
    echo '. $HOME/.cargo/env' >> $HOME/.bashrc

WORKDIR /root/local/app

COPY ./src/app/ ./

RUN . $HOME/.bashrc && uv sync

Discussion