タイトル : python uv Ubuntu25.10を使ってみる 新GPUマシン
更新日 : 2026-03-14
カテゴリ : プログラミング
タグ :
ubuntu   
python   
uv   
fastapi   

Ubuntu25.10を使ってみる 新GPUマシン

良い機会なので uv に切り替えましょう。uvでpythonを使えるようにしましょう。

uvは初めてなのでとりあえず今回は使ってみるところまでで。uvの勉強は別途ちゃんとやろうね。

インストール

$ curl -LsSf https://astral.sh/uv/install.sh | sh
downloading uv 0.10.10 x86_64-unknown-linux-gnu
no checksums to verify
installing to /home/prost/.local/bin
  uv
  uvx
everything's installed!

To add $HOME/.local/bin to your PATH, either restart your shell or run:

    source $HOME/.local/bin/env (sh, bash, zsh)
    source $HOME/.local/bin/env.fish (fish)
$ 

上記にあるように、.bashrc に . "$HOME/.local/bin/env" の一行が追加されて、

$HOME/.local/bin に uvとuvxが入ってますね。

$ cd $HOME/.local/bin
$ ls
env  env.fish  uv  uvx
$ ls -l
total 55076
-rw-rw-r-- 1 prost prost      328 Mar 14 12:34 env
-rw-rw-r-- 1 prost prost      165 Mar 14 12:34 env.fish
-rwxr-xr-x 1 prost prost 56032056 Mar 14 04:46 uv
-rwxr-xr-x 1 prost prost   353408 Mar 14 04:46 uvx
$ 

バージョン

$ uv --version
uv 0.10.10
$

ちなみに env は以下の内容

$ cat $HOME/.local/bin/env
#!/bin/sh
# add binaries to PATH if they aren't added yet
# affix colons on either side of $PATH to simplify matching
case ":${PATH}:" in
    *:"$HOME/.local/bin":*)
        ;;
    *)
        # Prepending path in case a system-installed binary needs to be overridden
        export PATH="$HOME/.local/bin:$PATH"
        ;;
esac
$

確認 fastapi

バージョン指定して、ディレクトリ名も指定して(デフォルトは.venv)、プロジェクトをinit

$ uv init --python 3.14 fastapi_sample2026
Initialized project `fastapi-sample2026` at `/home/prost/work/Python/fastapi_sample2026`
$ ls -ltd *
drwxrwxr-x 3 prost prost 4096 Mar 14 12:46 fastapi_sample2026
$

どんなファイルが出来たのかな

$ cd fastapi_sample2026/
$ ls -la
total 28
drwxrwxr-x 3 prost prost 4096 Mar 14 12:46 .
drwxrwxr-x 3 prost prost 4096 Mar 14 12:46 ..
drwxrwxr-x 6 prost prost 4096 Mar 14 12:46 .git
-rw-rw-r-- 1 prost prost  109 Mar 14 12:46 .gitignore
-rw-rw-r-- 1 prost prost    5 Mar 14 12:46 .python-version
-rw-rw-r-- 1 prost prost    0 Mar 14 12:46 README.md
-rw-rw-r-- 1 prost prost   96 Mar 14 12:46 main.py
-rw-rw-r-- 1 prost prost  164 Mar 14 12:46 pyproject.toml
$ vi main.py 
$ cat main.py 
def main():
    print("Hello from fastapi-sample2026!")


if __name__ == "__main__":
    main()
$ cat .python-version 
3.14
$ cat pyproject.toml 
[project]
name = "fastapi-sample2026"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.14"
dependencies = []
$ 

fastapiを動かしてみる

パッケージ追加

$ uv add fastapi uvicorn
Using CPython 3.14.3                          ★このタイミングで 3.14.3が入ったみたい
Creating virtual environment at: .venv
Resolved 15 packages in 378ms
Prepared 13 packages in 232ms
Installed 13 packages in 3ms
 + annotated-doc==0.0.4
 + annotated-types==0.7.0
 + anyio==4.12.1
 + click==8.3.1
 + fastapi==0.135.1
 + h11==0.16.0
 + idna==3.11
 + pydantic==2.12.5
 + pydantic-core==2.41.5
 + starlette==0.52.1
 + typing-extensions==4.15.0
 + typing-inspection==0.4.2
 + uvicorn==0.41.0
$ 

直下の.envの下

$ ls -l .venv/bin
total 56
-rw-rw-r-- 1 prost prost 4137 Mar 14 12:51 activate
-rw-rw-r-- 1 prost prost 2699 Mar 14 12:51 activate.bat
-rw-rw-r-- 1 prost prost 2667 Mar 14 12:51 activate.csh
-rw-rw-r-- 1 prost prost 4239 Mar 14 12:51 activate.fish
-rw-rw-r-- 1 prost prost 3809 Mar 14 12:51 activate.nu
-rw-rw-r-- 1 prost prost 2798 Mar 14 12:51 activate.ps1
-rw-rw-r-- 1 prost prost 2401 Mar 14 12:51 activate_this.py
-rw-rw-r-- 1 prost prost 1730 Mar 14 12:51 deactivate.bat
-rwxrwxr-x 1 prost prost  336 Mar 14 12:51 fastapi
-rw-rw-r-- 1 prost prost 1217 Mar 14 12:51 pydoc.bat
lrwxrwxrwx 1 prost prost   81 Mar 14 12:51 python -> /home/prost/.local/share/uv/python/cpython-3.14.3-linux-x86_64-gnu/bin/python3.14
lrwxrwxrwx 1 prost prost    6 Mar 14 12:51 python3 -> python
lrwxrwxrwx 1 prost prost    6 Mar 14 12:51 python3.14 -> python
-rwxrwxr-x 1 prost prost  337 Mar 14 12:51 uvicorn
$ 

python本体は /home/prost/.local/share/uv/python/cpython-3.14.3-linux-x86_64-gnu/bin/python3.14 の実体一つにして.venvの下にまとめる形ですね。

main.pyの書き換え

$ cat main.py 
from fastapi import FastAPI

app = FastAPI()

@app.get("/hello")
def read_root():
    return {"message": "Hello, UV!"}
$ 

uvicorn起動 と GET /hello呼び出し。uv runを使うのね

$ uv run uvicorn main:app --reload
INFO:     Will watch for changes in these directories: ['/home/prost/work/Python/fastapi_sample2026']
INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO:     Started reloader process [8956] using StatReload
INFO:     Started server process [8958]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     127.0.0.1:38116 - "GET /hello HTTP/1.1" 200 OK


$ curl http://127.0.0.1:8000/hello 
{"message":"Hello, UV!"}$