WindowsでPython + uv入門

Pythonの環境構築といえば pip + venv が定番でしたが、最近は Astral の uv が速くて便利です。Windowsでの導入手順をメモします。
uvのインストール
PowerShellを開いて以下を実行します。
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
インストール後に新しいターミナルを開き、バージョンを確認します。
uv --version
uv 0.6.x (...)
uv が見つからない場合は ~\.local\bin にPATHが通っているか確認してください。
プロジェクトの作成
作業フォルダでプロジェクトを作ります。
mkdir hello-uv
cd hello-uv
uv init
uv init すると以下のファイルができます。
hello-uv/
├── .python-version
├── README.md
├── hello.py
└── pyproject.toml
仮想環境とパッケージ管理
uv はコマンド実行時に自動で仮想環境(.venv)を用意します。明示的に作る場合は次の通りです。
uv venv
パッケージの追加と実行はこう書きます。
uv add requests
uv run hello.py
uv run は .venv がなければ自動作成し、pyproject.toml に応じた環境で実行します。pip install や source .venv/Scripts/activate を手で叩く必要はありません。
Pythonバージョンの指定
プロジェクトごとにPythonのバージョンを固定できます。
uv python pin 3.12
uv sync
uv sync で pyproject.toml とロックファイルに応じた環境を再現します。チーム開発や別PCへの移行時に便利です。
最初のPythonコード
uv init で作られた hello.py はそのまま実行できます。
def main() -> None:
print("Hello from Lizlog!")
if __name__ == "__main__":
main()
uv run hello.py
Hello from Lizlog!
外部パッケージを使う例として、HTTPリクエストを投げてみます。
uv add requests
import requests
def main() -> None:
res = requests.get("https://api.github.com/zen", timeout=10)
print(res.text)
if __name__ == "__main__":
main()
uv add したパッケージは pyproject.toml に記録されるので、別PCでは uv sync 一発で同じ環境を再現できます。
よく使うライブラリ
用途別によく使うものをまとめます。
| 用途 | ライブラリ | 導入 |
|---|---|---|
| HTTP通信 | requests / httpx |
uv add httpx |
| HTML解析 | beautifulsoup4 |
uv add beautifulsoup4 |
| 表データ | pandas |
uv add pandas |
| Web API | fastapi + uvicorn |
uv add fastapi uvicorn |
| テスト | pytest |
uv add --dev pytest |
| 型チェック | mypy |
uv add --dev mypy |
| フォーマット | ruff |
uvx ruff check . |
開発時だけ使うものは --dev を付けると依存を分けられます。ruff のように単発で試したいものは uvx が便利です。
よく使うコマンド早見表
| やりたいこと | コマンド |
|---|---|
| 仮想環境の作成 | uv venv |
| パッケージ追加 | uv add <name> |
| スクリプト実行 | uv run <file> |
| 環境の再現 | uv sync |
| ツールの一時実行 | uvx <tool> |
uvx はインストール不要で ruff や black などを試せるので気軽に使えます。
uvx ruff check .
まとめ
- インストールは
irm ... | iexの一行で終わる uv init→uv add→uv runの3つで基本は回るactivate忘れやバージョン不一致のストレスが減る
次は実際に小さなスクリプトを書いて uv run で回してみます。