🐍
uv on Dockerをやってみた
前置き
先日Twitterで話題になった,uvでPythonのバージョンを管理できるようになったという内容のニュースを見て使いたくなった.
元記事: https://astral.sh/blog/uv-unified-python-packaging
記事によれば,下記のコマンドで uv
と Python
のインストールができるとのこと.
$ curl -LsSf https://astral.sh/uv/install.sh | sh
$ uv python install 3.12
Docker環境を作ってuv経由でPythonをインストールしてみる
ここまでくるともはやDocker外してもいいんじゃないかなと思いつつ,ローカルのPCをいじるのも面倒なので,Dockerでサクッと立ち上げた.
GitHub Repository
検証
作った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