Skip to content

mise + uv + ruff + task + mypy で Python 環境を構築する

以下のツールを組み合わせて Python 環境を構築する為の準備手順をメモしておきます。

ツール 対象 概要
mise なんでも 各種ツールのバージョンマネージャ
Task なんでも タスクランナー
uv Python ライブラリを管理するパッケージマネージャ
Ruff Python 静的コード解析ツール
mypy Python 型チェックツール

検証環境

対象 バージョン
Ubuntu 24.04.2LTS

結論

mise のインストール

設定後はログアウト・ログインし直す等で設定変更を反映しておきます。

1
2
3
4
5
6
7
sudo apt update -y && sudo apt install -y gpg sudo wget curl &&
sudo install -dm 755 /etc/apt/keyrings &&
wget -qO - https://mise.jdx.dev/gpg-key.pub | gpg --dearmor | sudo tee /etc/apt/keyrings/mise-archive-keyring.gpg 1> /dev/null &&
echo "deb [signed-by=/etc/apt/keyrings/mise-archive-keyring.gpg arch=amd64] https://mise.jdx.dev/deb stable main" | sudo tee /etc/apt/sources.list.d/mise.list &&
sudo apt update &&
sudo apt install -y mise &&
echo 'eval "$(/usr/bin/mise activate bash)"' >> ~/.bashrc

Python + Task + uv + ruff のインストール

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
mise install python@latest &&
mise use -g python@latest &&
mise install task@latest &&
mise use -g task@latest &&
mise install uv@latest &&
mise use -g uv@latest &&
mise install ruff@latest &&
mise use -g ruff@latest &&
sudo tee /usr/local/bin/venv <<EOF
#!/usr/bin/env bash

mise use python@latest
uv venv .venv

cat << EOL >> mise.toml

[env]
_.python.venv = ".venv"
EOL

cat << EOL >> taskfile.yml
version: '3'

tasks:
  default:
    cmds:
      - task --list

  build:
    aliases: [b]
    desc: Build
    cmds:
      - pyinstaller build.spec

  format:
    aliases: [f]
    desc: Format the source code
    cmds:
      - ruff format .
      - ruff check . --fix

  lint:
    aliases: [l]
    desc: Static analysis
    cmds:
      - ruff check .
      - mypy .

  test:
    aliases: [t]
    desc: Test
    cmds:
      - pytest .
EOL
EOF
sudo chmod 755 /usr/local/bin/venv

mise のインストール

apt で mise をインストールします。

sudo apt update -y && sudo apt install -y gpg sudo wget curl
sudo install -dm 755 /etc/apt/keyrings
wget -qO - https://mise.jdx.dev/gpg-key.pub | gpg --dearmor | sudo tee /etc/apt/keyrings/mise-archive-keyring.gpg 1> /dev/null
echo "deb [signed-by=/etc/apt/keyrings/mise-archive-keyring.gpg arch=amd64] https://mise.jdx.dev/deb stable main" | sudo tee /etc/apt/sources.list.d/mise.list
sudo apt update
sudo apt install -y mise

インストール後は mise を activate する為の設定を実施します。 設定後はログアウト・ログインし直す等で設定変更を反映しておきます。

echo 'eval "$(/usr/bin/mise activate bash)"' >> ~/.bashrc

Python + Task + uv + Ruff のインストール

Python、Task、uv、Ruff、各々を mise でインストールします。

mise install python@latest
mise use -g python@latest
mise install task@latest
mise use -g task@latest
mise install uv@latest
mise use -g uv@latest
mise install ruff@latest
mise use -g ruff@latest

mypy のインストール

現時点で mypy は mise のプラグインとして提供されていない為、uv tool でインストールします。

uv tool install mypy

Python の仮想環境を作成するスクリプト

Python のプロジェクトごとに仮想環境を作成する手間を省く為にスクリプトを用意しておきます。 /usr/local/bin/venv を以下の内容で作成し、実行権限を付与しておきます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#!/usr/bin/env bash

mise use python@latest
uv venv .venv

cat << EOF >> mise.toml

[env]
_.python.venv = ".venv"
EOF

cat << EOF >> taskfile.yml
version: '3'

tasks:
  default:
    cmds:
      - task --list

  build:
    aliases: [b]
    desc: Build
    cmds:
      - pyinstaller build.spec

  format:
    aliases: [f]
    desc: Format the source code
    cmds:
      - ruff format .
      - ruff check . --fix

  lint:
    aliases: [l]
    desc: Static analysis
    cmds:
      - ruff check .
      - mypy .

  test:
    aliases: [t]
    desc: Test
    cmds:
      - pytest .
EOF

このスクリプトを実行後、task を実行すると以下のように登録されたタスクの一覧が表示されます。

# task
task: [default] task --list
task: Available tasks for this project:
* build:        Build                       (aliases: b)
* format:       Format the source code      (aliases: f)
* lint:         Static analysis             (aliases: l)
* test:         Test                        (aliases: t)

タスクには alias を設定してありますので、例えばソースコードのフォーマットを実施する場合は task format または task f と実行します。