UV: Package Manager Python Modern yang 10-100x Lebih Cepat
Mengelola dependensi Python selalu menjadi tantangan tersendiri. Kita perlu menginstal pip, virtualenv, pyenv, dan poetry secara terpisah, lalu mengonfigurasi masing-masing tool. UV hadir sebagai solusi all-in-one yang menggantikan semua tool tersebut dengan performa 10-100x lebih cepat. Ditulis dalam Rust oleh tim Astral (pembuat Ruff), UV adalah package manager Python generasi baru yang mengubah cara kita bekerja dengan ekosistem Python.
Dalam tutorial ini, kita akan mempelajari UV secara komprehensif mulai dari instalasi, manajemen proyek, virtual environment, hingga contoh praktis membangun proyek ML dari nol.
Mengapa UV?
Sebelum masuk ke teknis, mari pahami mengapa UV layak dipertimbangkan:
- Kecepatan luar biasa: 10-100x lebih cepat dari pip berkat implementasi Rust dan caching global
- All-in-one: Menggantikan pip, pip-tools, virtualenv, pyenv, dan poetry dalam satu binary
- Lockfile bawaan: Reproducible builds tanpa konfigurasi tambahan
- Manajemen versi Python: Install dan switch versi Python tanpa pyenv
- Cross-platform: Bekerja konsisten di Linux, macOS, dan Windows
- Drop-in replacement: Kompatibel dengan ekosistem pip yang sudah ada
Instalasi UV
Linux dan macOS
curl -LsSf https://astral.sh/uv/install.sh | sh
Windows (PowerShell)
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
Menggunakan pip (alternatif)
pip install uv
Menggunakan Homebrew (macOS)
brew install uv
Verifikasi instalasi:
uv --version
Update UV
uv self update
Membuat Proyek Baru dengan uv init
UV menyediakan cara mudah untuk memulai proyek Python baru:
uv init my-project
cd my-project
Perintah ini akan membuat struktur proyek berikut:
my-project/
├── .python-version
├── README.md
├── hello.py
└── pyproject.toml
File pyproject.toml yang dihasilkan:
[project]
name = "my-project"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.12"
dependencies = []
Opsi Inisialisasi
# Membuat proyek sebagai library (dengan src layout)
uv init --lib my-library
Membuat proyek sebagai aplikasi
uv init --app my-app
Menentukan versi Python minimum
uv init --python 3.11 my-project
Membuat proyek di direktori saat ini
uv init
Untuk proyek library, strukturnya akan berbeda:
my-library/
├── .python-version
├── README.md
├── pyproject.toml
└── src/
└── mylibrary/
├── init.py
└── py.typed
Manajemen Dependensi
Menambahkan Dependensi
# Menambahkan package
uv add requests
Menambahkan dengan versi spesifik
uv add "pandas>=2.0,<3.0"
Menambahkan multiple packages sekaligus
uv add numpy scikit-learn matplotlib
Menambahkan development dependency
uv add --dev pytest ruff mypy
Menambahkan optional dependency group
uv add --group docs sphinx sphinx-rtd-theme
Setiap kali menjalankan uv add, UV akan secara otomatis:
pyproject.tomluv.lockMenghapus Dependensi
# Menghapus package
uv remove requests
Menghapus dev dependency
uv remove --dev mypy
Melihat Dependency Tree
uv tree
Output contoh:
my-project v0.1.0
├── numpy v1.26.4
├── pandas v2.2.1
│ ├── numpy v1.26.4
│ ├── python-dateutil v2.9.0
│ │ └── six v1.16.0
│ ├── pytz v2024.1
│ └── tzdata v2024.1
└── scikit-learn v1.4.1
├── joblib v1.3.2