🌞

Ansible を uv で管理する環境に移行した

2024/10/12に公開3

tl;dr

  • astral-sh/uv で Python 自体を管理可能になったと聞いた
  • rye を使いこなせなくて Python 環境が微妙になっていたので乗り換え
  • Ansible を綺麗に移行できたのでメモ

細けえこたぁいいんだよ(AA略

cd my-examples-ansible
uv init -p 3.10
uv run hello.py
uv add requests
uv add boto3
uv add ansible
uv sync
source .venv/bin/activate
ansible --version
  • uv のインストールは各自好きにどうぞ
  • 個人的には aqua を使っている
  • uv init -p で Python のバージョンを好きにできる(3.12 等は他で遊んだので今回は 3.10 を指定。3.10.15がインストールされた)
  • uv tool でインストールしてもいけるっぽい(ユーザワイドにインストールされるっぽい)けど、環境用の pyproject.toml に記録が残らないのでディレクトリローカルに入れた

いろいろメモ

rye を先にアンインストール

$ rye self uninstall
$ rm -rf ~/.rye
# .bashrc 等から grep して関連する環境変数等を削除
# aqua でインストールしていたので削除
$ aqua rm -m pl rye

実はよくわかってない(ちゃんと調べてない)

  • uv add と tool の違い
  • python のランタイムの違い
  • python のバージョン差もあんまりよくわかってない
  • pyproject.toml だけを別ディレクトリにコピーして uv sync すると python のバージョンはデフォルトで指定してるものになるっぽい
  • .python-version を置いて uv sync すると指定のバージョンになる
  • おもしろいし便利だけど、どこに置いてどうなってるのか見えてなくて不安

あとがき

  • uv でやっと python の仮想環境がわかってきた(システムグローバル育ち。。。)
  • rye の時に理解できていれば乗り換えまでは要らなかったの、か?
  • uv 単独でできるならそれでいいか
  • チームへの展開がまだ課題
  • とりあえず動かすのはできているけど、実務のコードでのテストが不十分なので、どんどん使っていく必要がある
  • まだ python の環境を用意していなくて、しゅっとやりたい人向けに書いた

Discussion

rakiraki

書き忘れたけど、activate は direnv を使ってる

$ cat .envrc
source .venv/bin/activate
rakiraki

パッケージに追加したやつのバージョンアップは

$ uv add ansible -U
Resolved 22 packages in 1.04s
Prepared 7 packages in 21.47s
Uninstalled 7 packages in 1m 48s
░░░░░░░░░░░░░░░░░░░░ [0/7] Installing wheels...
Installed 7 packages in 1m 47s
 - ansible==10.5.0
 + ansible==10.6.0
 - ansible-core==2.17.5
 + ansible-core==2.17.6
 - boto3==1.35.39
 + boto3==1.35.57
 - botocore==1.35.39
 + botocore==1.35.57
 - cryptography==43.0.1
 + cryptography==43.0.3
 - markupsafe==3.0.1
 + markupsafe==3.0.2
 - packaging==24.1
 + packaging==24.2

でいける。

uv add -h

で使い方を確認。

rakiraki

プロジェクトの依存関係(dependency tree)

$ uv tree
Resolved 22 packages in 3ms
my-examples-ansible v0.1.0
├── ansible v10.6.0
│   └── ansible-core v2.17.6
│       ├── cryptography v43.0.3
│       │   └── cffi v1.17.1
│       │       └── pycparser v2.22
│       ├── jinja2 v3.1.4
│       │   └── markupsafe v3.0.2
│       ├── packaging v24.2
│       ├── pyyaml v6.0.2
│       └── resolvelib v1.0.1
├── boto3 v1.35.57
│   ├── botocore v1.35.57
│   │   ├── jmespath v1.0.1
│   │   ├── python-dateutil v2.9.0.post0
│   │   │   └── six v1.16.0
│   │   └── urllib3 v2.2.3
│   ├── jmespath v1.0.1
│   └── s3transfer v0.10.3
│       └── botocore v1.35.57 (*)
└── requests v2.32.3
    ├── certifi v2024.8.30
    ├── charset-normalizer v3.4.0
    ├── idna v3.10
    └── urllib3 v2.2.3
(*) Package tree already displayed