uv 覚書
Ryeからの移行(Windows)
latest = v0.4.4 時点でのメモ
Ryeをアンインストール
ryeをアンインストール. git bashから実行するとなぜかうまく動作しなかったのでpowershellから実行
# 管理者権限で実行
rye self uninstall
ユーザーディレクトリ下の.rye/config.toml
だけ生き残ってたので手動で削除
uvをインストール
powershellからirm https://astral.sh/uv/install.ps1 | iex
を実行すればよいはずだがエラーになったので調べてみると以下のIssueと同じ状況っぽい
SecurityProtocolを指定して再実行するとインストールされた
# ↓1行を$PROFILEに書いといたほうがいい uv self updateしたときも引っかかるので
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12;
irm https://astral.sh/uv/install.ps1 | iex
このIssueにたどり着く前にpipxからインストールを試みたが、その際は某セキュリティソフトに不正なアプリとして検出されてしまった。その際のごちゃごちゃで
- pipxでインストール
- 上記Issueの手順でインストール
- pipxのほうが重複したので
pipx uninstall uv
としたのだが、2の時点ではuvをpowershellから呼び出せたのだが、3でpipx uninstallしたところuvを呼び出せなくなった。
PATH環境変数にuvへのパス(たぶんC:\Users\{User名}\.cargo\bin
)は残っていたが、CARGO_HOMEという環境変数が消えていたのでそちらを手動で追加した(同様にC:\Users\{User名}\.cargo\bin
)
Pythonをinstallする
uv python list
して何もインストールされてない状態(<download available>
になってる状態)でuv python install
してみる
❯ uv python install 3.12
❯ uv python list
cpython-3.12.6-windows-x86_64-none AppData\Roaming\uv\python\cpython-3.12.6-windows-x86_64-none\python.exe
❯ uv run python --version
3.12.6
❯ uv run python -c 'print("hello world")'
hello world
❯ uv run --python 3.12 python --version
Python 3.12.6
❯ uv run --python 3.11 python --version
# 3.11をinstallしてない場合はコマンド実行前にinstallされる
Python 3.11.10
installしたインタプリタはグローバルに呼び出せるわけではない
❯ uv python install 3.12
❯ python --version
# pythonは呼び出されない
Python
A python executable is not made globally available, managed Python versions are only used in uv commands or in active virtual environments.
tool機能
npxだったりpipxだったりな機能のやつ
-
uvx <package_name>
(=uv tool run <package_name>
) すると一時領域にパッケージをインストールしてパッケージを使用できる- 一時的になので
uv tool list
の一覧にはでてこない
- 一時的になので
- 恒久的に使いたい場合は
uv tool install ruff
のようにしてインストールする- install すると
uv tool list
の一覧に表示される
- install すると
- インストールされたパッケージは特定のbinディレクトリに保存されるが、binへのPATHが通ってないとインストール時に警告が出る。
uv tool update-shell
を実行するとPATHを通してくれる。 -
uv tool uninstall
でインストールされたパッケージの削除 -
uvx ruff --version
で最新のruff(例えば0.6.7)を使用した後でuv tool install ruff@0.6.0
など特定のバージョンをインストールするとuvx ruff
も0.6.0を使用するようになる。この状態で特定のバージョンを一時的に実行したければuvx ruff@latest --version
などすればよいと思う -
uv tool run
(uvx
)とuv run
の違い-
uv runは、
python example.py
のようにPythonファイルを実行するときに、通常であればvenvをactivateしていなければいけなかったり実行環境を自前で管理しなければいけなかったが、uv run example.py
のように実行すればuvがプロジェクトの依存関係を自動で解決して実行してくれる - ruffがインストールされてない状態で
uv run ruff
などするとprogram not found
となる - プロジェクトフォルダ(pyproject.tomlがあるフォルダ)で
uv run
すると実行前に依存関係がインストールされる。プロジェクトに存しないスクリプトを実行する場合uv run --no-project
とするとこの事前インストールが実行されない
-
uv runは、
- ❌pipxでもそうだったけどパッケージが古くなった(新しいバージョンが存在する)場合に教えてくれる
--outdated
的なオプションが欲しい
pythonプロジェクト管理
init
-
uv init
とプロジェクト名を指定しない場合、カレントディレクトリ直下にpyproject.tomlを作成
カレントディレクトリ名がそのままプロジェクト名として作成される -
uv init hello-world
とプロジェクト名を指定した場合、指定したプロジェクト名のディレクトリを作成して、そのディレクトリ下にpyprojectが作成される
はじめてのスクリプト実行
- サンプルスクリプト(
hello.py
)が同時に作成されるの -
uv python pin 3.10
などでバージョン固定- initした時
requires-python = ">=3.12"
とかになってて3.10指定すると失敗する - pyproject.tomlを更新してからpinをする
- initした時
-
uv run hello.py
を実行すると- pinしたpythonがインストールされてない場合はインストールされる
- (ない場合は)uv.lockファイルが生成される
- (ない場合は).venvフォルダが作成される。pinしたpythonが変更されてたりするといったん削除されて再作成される
- スクリプトが実行される
依存パッケージ追加・削除・同期
-
uv add boto3
とするとpyprojectのdependenciesにパッケージ追加、.venvフォルダにパッケージがインストールされる-
--no-sync
オプション付けるとパッケージのインストールは行わない -
--dev
つけるとdev-dependenciesにパッケージ追加
-
-
uv add
とuv pip install
の違い- add: pyprojectのdependenciesに追加される
- pip install: 通常のpipと似た動作。pyprojectに追加されず.venvにインストールされる
venvをactivateしなくてもvenvにパッケージをインストールするイメージ
-
uv add httpx --optional network
でhttpxライブラリをextraパッケージとして追加[project.optional-dependencies] network = [ "httpx>=0.27.2", ]
-
uv remove httpx --optional network
とするとhttpxは消えるがnetworkオプションは残り続ける[project.optional-dependencies] network = []
- networkオプションを丸っと消す場合は手動でpyprojectを書き換える必要があるっぽい
- pyprojectを手動で書き換えた場合は
uv sync
でuc.lock, .venvを最新の状態に更新する
非uvプロジェクトでuv使う
プロジェクト管理でuvは使ってない既存プロジェクトでuv使う場合
-
uv python pin 3.x
で.python-version
固定(.python-version
がもとからあるならそれ使う) -
uv venv
で.venvフォルダ作成。固定バージョンのインタプリタがなければさきにインストールされる -
[dev-]requirements.txt
でパッケージ管理してる場合uv pip install -r requirements.txt
- poetryとかpipenvとかの場合
-
uv tool install poetry
/uvx poetry
などで既定のツール使うしかないか
-
- pyprojectがない(pyproject中にprojectの記述がない)場合に
uv run
するとerrorになるっぽいerror: No 'project' table found in: "......./pyproject.toml"
- 仕方ないから
uvx
で実行した
v0.5.0でインストール先のフォルダが変更になった
v0.4.xまでは~/.cargo/bin
にインストールされてたのが~/.local/bin
に変更になったらしい
windowsの場合はC:\Users\{UserName}\.local/bin
windows環境下でv0.4.20からuv self update
して0.5.0にあげたところ、command not foundとなってしまった。
C:\Users\{UserName}\.cargo/bin
ではなくC:\Users\{UserName}\.cargo
の下にuv.exe
とuvx.exe
があるが前からそうだっけ?とにかく.local/bin
にはいなかった