uvでPythonのバージョンを管理する方法
更新
個人でスクリプトや小さなツールを書くとき、Pythonのバージョンが環境ごとにバラバラになりやすいです。uv を使うと「Python本体の導入」と「プロジェクトの固定」までまとめて扱えます。
この記事では、バージョン管理に絞って手順を解説します。(2026年9月時点)あわせて、uvを使わずにPythonを入れた場合との違いと、Cursor / VS Code で .venv を選ぶ方法も記載します。
uvとは
uv は Astral 製の Python 向けツールです。依存関係の解決が速いイメージが強いですが、管理された Python(managed Python)を自分で入れたり、プロジェクトにピン留めしたりもできます。
uvを使わずに入れた場合との比較
よくある「uvなし」の入れ方は次のようなものです。
- python.org の公式インストーラ
- macOS の Homebrew(
brew install python) - Windows の Microsoft Store / 公式インストーラ
- pyenv で複数バージョンを切り替え
それぞれ単体でも問題なく使えます。違いが出るのは「複数バージョン」「プロジェクトごとの固定」「再現性」です。
| 観点 | uvなし(公式 / brew など) | uvあり |
|---|---|---|
| 入れるもの | OSや公式の Python 本体 | uv が managed Python も管理できる |
| 複数バージョン | 自分でパスやツールを分ける必要が出やすい | uv python install 3.12 3.13 で並べやすい |
| プロジェクト固定 | 手動、または pyenv local など別ツール | uv python pin → .python-version |
| 仮想環境 | python -m venv を自分で作る |
uv venv / uv sync / uv run が一体 |
| 向いている人 | 1バージョンだけで十分な人 | プロジェクトごとに利用するPythonのバージョンを明確に分けたい人 |
プロジェクトごとに Python を揃えたいなら uvの方が運用・保守が圧倒的に楽です。
というのもPythonで使うライブラリはPythonのバージョンに依存しますし、pipも同様にバージョン依存するため、プロジェクトごとに分けておくと「以前作ったものが動かなくなった」というトラブルが減ります。
1. uvを入れる
macOS / Linux:
curl -LsSf https://astral.sh/uv/install.sh | sh
Windows(PowerShell):
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
入れたあと:
uv --version
standalone で入れた場合の更新:
uv self update
2. Python本体をインストールする
uv python install 3.12
複数まとめて:
uv python install 3.12 3.13
一覧:
uv python list
- 必要なときに自動取得されることもある
- 明示的に
installしておくと再現しやすい - 入るのは Astral 側配布(python-build-standalone)ベースの managed Python
- システムの Python も使える。managed だけに寄せたいときは
--managed-pythonを検討
3. プロジェクトのバージョンを固定する
uv python pin 3.12
.python-version が作られ(または更新され)、そのディレクトリでは 3.12 系が基準になります。Git に含めると別マシンでも揃えやすいです。
新規プロジェクト例:
uv init myapp
cd myapp
uv python pin 3.12
uv venv --python 3.12
4. 日常の使い方(最小セット)
uv run python --version
uv run --python 3.13 python --version
グローバル切替より、ディレクトリの .python-version で固定する方がトラブルが少ないです。
5. Cursor / VS Code でインタプリタを .venv に向ける
uv で仮想環境を作ると、だいたいプロジェクト直下に .venv ができます。エディタ側でこれを選ばないと、補完や実行がシステムの別 Python を見ることがあります。
- ターミナルでプロジェクトに入り、環境を作る(まだなら)
uv venv --python 3.12
# 依存があるプロジェクトなら
uv sync
- Cursor または VS Code でそのフォルダを開く
- コマンドパレットを開く(macOS なら
Cmd+Shift+P、Windows ならCtrl+Shift+P) Python: Select Interpreterを選ぶ- 一覧から
./.venv/bin/python(macOS / Linux)または.\.venv\Scripts\python.exe(Windows)を選ぶ - 右下ステータスバーの Python 表示が
.venvになっているか確認
出てこないとき:
- コマンドパレットで
Python: Refresh Interpreters - それでも無ければ「Enter interpreter path...」で
.venv内の python を直接指定 - フォルダを開き直す(ルートがプロジェクト直下か確認)
ターミナルでも揃えるなら:
# macOS / Linux
source .venv/bin/activate
# Windows (PowerShell)
.\.venv\Scripts\Activate.ps1
uv run ... でもよく、エディタのインタプリタ選択は主に補完・デバッグ・Run Python File 用、と分けると混乱しにくいです。
6. pyenvユーザー向けの対応表
| やりたいこと | pyenvっぽい操作 | uv |
|---|---|---|
| 本体を入れる | pyenv install 3.12.x |
uv python install 3.12 |
| 一覧 | pyenv versions |
uv python list |
| このディレクトリで固定 | pyenv local 3.12.x |
uv python pin 3.12 |
| その Python で動かす | python / pyenv exec |
uv run |
7. よくあるつまずき
- 入れたのに古い Python が使われる →
.python-versionとuv run python --versionを確認。エディタが別インタプリタを指していないかも見る - CIや別PCで違う →
.python-versionをリポジトリに含める - 新しいマイナーが install に出ない → 先に
uv self update - エディタだけ古い →
Python: Select Interpreterで.venvを選び直す
まとめ
- 公式や brew だけでも動く。複数プロジェクトでの運用や別マシンでの再現性を重視するなら uv が楽
uvを入れる →uv python install 3.12→uv python pin 3.12- 実行は
uv run、エディタは.venvを Select Interpreter で指定
個人プロジェクトでも、これだけで「PCを変えたら動かない」「勝手にライブラリバージョンが変わって使えなくなった」「エディタだけ別Python」がかなり減ります。