Kalau kamu pernah mengelola project Python, kamu pasti akrab dengan ritual yang melelahkan ini: membuat venv, mengaktifkannya, menjalankan pip install satu per satu, lalu menunggu lama setiap kali ada dependensi yang berubah. Prosesnya lambat, rawan error, dan membuat frustrasi saat harus diulang di banyak project sekaligus.
uv hadir untuk menyelesaikan masalah itu. uv adalah package manager sekaligus project manager untuk Python yang ditulis dengan Rust oleh tim Astral (pembuat linter Ruff). Ia bisa menggantikan pip, venv, pyenv, poetry, dan pipx sekaligus — dengan kecepatan 10–100x lebih cepat berkat caching agresif dan resolusi dependensi yang modern. Tidak heran uv menjadi salah satu tool paling hype di ekosistem Python dalam beberapa tahun terakhir.
Apa Itu uv dan Kenapa Ia Begitu Cepat?
Secara sederhana, uv adalah satu binary yang mampu menangani hampir semua hal yang sebelumnya butuh banyak tool terpisah. Berikut peran yang bisa diambil alih uv:
- Pengganti
pip— menginstal dan mencopot paket dengan sangat cepat. - Pengganti
venv/virtualenv— membuat environment terisolasi secara otomatis. - Pengganti
pyenv— mengunduh dan mengelola banyak versi Python. - Pengganti
poetry— mengelolapyproject.tomldan lock file dengan satu perintah. - Pengganti
pipx— menjalankan tool CLI sepertiruff,black, dancookiecuttertanpa menginstalnya permanen.
Kenapa bisa secepat itu? uv memakai resolver Rust yang berjalan paralel, cache global yang dibagikan antar-project, dan tidak pernah menduplikasi paket yang sama. Hasilnya, operasi yang tadinya butuh puluhan detik di pip bisa selesai dalam hitungan puluhan milidetik.
Prasyarat
Untuk mengikuti tutorial ini, kamu hanya butuh:
- Terminal (Linux, macOS, atau WSL/PowerShell di Windows).
- Koneksi internet untuk mengunduh uv dan paket Python.
- Kamu tidak wajib sudah punya Python — uv bisa mengunduh versi Python yang dibutuhkan secara otomatis.
Semua perintah di artikel ini identik di Linux, macOS, dan Windows. Kalau kamu pakai Windows, jalankan lewat PowerShell atau Git Bash.
Langkah 1: Instalasi uv
Cara paling praktis adalah lewat installer resmi. Jalankan perintah ini di terminal:
# Linux & macOS
curl -LsSf https://astral.sh/uv/install.sh | sh
Alternatif instalasi lainnya:
- Windows (PowerShell):
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex" - Via pip:
pip install uv - Via Homebrew (macOS):
brew install uv
Setelah selesai, buka ulang terminal (atau jalankan source ~/.bashrc atau source ~/.zshrc), lalu verifikasi instalasinya:
uv --version
# uv 0.12.2
Kalau nomor versi muncul, uv sudah siap dipakai. Mari langsung buat project pertama.
Langkah 2: Membuat Project Baru dengan uv init
Workflow lama memaksamu membuat folder, menulis pyproject.toml manual, lalu membuat venv. Dengan uv, satu perintah sudah cukup:
uv init belajar-uv
cd belajar-uv
uv akan membuat struktur project modern dengan layout src/:
belajar-uv/
├── .gitignore
├── .python-version
├── README.md
├── pyproject.toml
└── src/
└── belajar_uv/
└── __init__.py
Isi pyproject.toml yang dihasilkan kira-kira seperti ini (format TOML):
[project]
name = "belajar-uv"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.11"
dependencies = []
[project.scripts]
belajar-uv = "belajar_uv:main"
[build-system]
requires = ["uv_build>=0.12.2,<0.13.0"]
build-backend = "uv_build"
Perhatikan beberapa hal penting: uv otomatis mengisi nama penulis dari konfigurasi git kamu, mendeklarasikan entry point belajar-uv yang memanggil fungsi main() di dalam paket, serta menyiapkan build system modern berbasis uv_build. File .python-version menentukan versi Python yang dipakai project ini.
File __init__.py yang dibuat uv sudah berisi contoh fungsi main() yang mencetak Hello from belajar-uv!. Kamu bisa langsung menjalankannya dengan uv run belajar-uv.
Langkah 3: Menambahkan Dependensi dengan uv add
Daripada mengedit pyproject.toml manual lalu menjalankan pip install, gunakan uv add. Misalnya kita butuh requests untuk memanggil API:
uv add requests
Output yang muncul kira-kira seperti ini — perhatikan betapa cepatnya prosesnya:
Resolved 6 packages in 49ms
Installed 6 packages in 11ms
+ requests==2.34.2
uv add melakukan tiga hal sekaligus: (1) menambahkan baris requests>=2.34.2 ke bagian dependencies di pyproject.toml, (2) membuat/memperbarui file uv.lock yang mengunci versi pasti semua paket, dan (3) menginstal paket tersebut ke environment project. Sekarang pyproject.toml kamu berubah menjadi:
[project]
name = "belajar-uv"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.11"
dependencies = [
"requests>=2.34.2",
]
Jangan mengedit uv.lock secara manual. File ini dikelola otomatis oleh uv dan berisi versi persis beserta hash setiap paket, sehingga build bisa direproduksi secara konsisten di semua mesin.
Langkah 4: Menjalankan Kode dengan uv run
Salah satu fitur paling nyaman dari uv adalah uv run. Kamu tidak perlu mengaktifkan virtual environment secara manual — uv melakukannya diam-diam. Buat file app.py berikut:
# app.py
import requests
url = "https://api.github.com/repos/astral-sh/uv"
resp = requests.get(url, timeout=10)
data = resp.json()
print(f"Repo : {data['full_name']}")
print(f"Bintang : {data['stargazers_count']}")
print(f"Deskripsi: {data['description']}")
Jalankan dengan:
uv run python app.py
uv akan memastikan environment punya semua dependensi, lalu menjalankan skrip. Contoh outputnya:
Repo : astral-sh/uv
Bintang : 89060
Deskripsi: An extremely fast Python package and project manager, written in Rust.
uv run juga bisa menjalankan entry point yang sudah kamu deklarasikan, misalnya uv run belajar-uv. Kalau kamu memberi perintah yang bukan entry point, uv otomatis meneruskannya ke Python di dalam environment project.
Langkah 5: Mengunci Dependensi dengan uv lock dan uv sync
Untuk project yang dibagikan ke tim, kamu ingin semua orang memakai versi paket yang persis sama. File uv.lock menyimpan versi terkunci, lalu uv sync memastikan environment cocok dengan lock file:
# Perbarui lock file secara eksplisit
uv lock
# Sinkronkan environment dengan lock file
uv sync
Untuk melihat pohon dependensi (termasuk dependensi transitif), gunakan uv tree:
uv tree
# belajar-uv v0.1.0
# └── requests v2.34.2
# ├── certifi v2026.7.22
# ├── charset-normalizer v3.5.1
# ├── idna v3.19
# └── urllib3 v2.7.0
Dengan alur uv add → uv lock → uv sync, anggota tim cukup menjalankan uv sync setelah clone dan langsung mendapatkan environment yang identik.
Langkah 6: Mengelola Versi Python dengan uv python
Kamu tidak perlu lagi repot mengompilasi Python atau memakai pyenv. uv bisa mengunduh dan mengelola berbagai versi Python secara otomatis. Lihat versi yang tersedia:
uv python list
Misalnya project membutuhkan Python 3.12. Tinggal jalankan:
uv python install 3.12
uv python pin 3.12
uv python pin menulis versi tersebut ke file .python-version, sehingga siapa pun yang menjalankan uv run atau uv sync otomatis memakai Python 3.12 untuk project ini. Kalau versi itu belum terinstal, uv akan mengunduhnya sendiri.
uv menyimpan versi Python hasil unduhan di direktori cache miliknya sendiri (bukan di sistem), jadi tidak akan mengganggu Python bawaan OS kamu. Aman digunakan berdampingan dengan Python sistem.
Langkah 7: Menjalankan Tool Sekali Pakai dengan uvx
Pernah perlu menjalankan tool seperti ruff, black, atau cookiecutter hanya sesekali, tapi malas menginstalnya secara global? Gunakan uvx (padanan pipx):
# Periksa versi ruff tanpa menginstalnya permanen
uvx ruff --version
# ruff 0.16.4
# Format kode dengan black
uvx black app.py
uvx mengunduh tool ke cache, menjalankannya, lalu membersihkannya. Ini cara paling higienis untuk memakai tool CLI tanpa mencemari environment global.
Langkah 8: Migrasi dari pip dan requirements.txt
Sudah punya project lama yang memakai requirements.txt? uv bisa membacanya tanpa perlu menulis ulang. Dua skenario umum:
# 1) Instal isi requirements.txt ke environment project
uv pip install -r requirements.txt
# 2) Ubah requirements.txt menjadi daftar versi yang terkunci
uv pip compile requirements.txt -o requirements.lock.txt
Kalau kamu hanya butuh virtual environment biasa (misalnya untuk deploy), buat dengan satu perintah:
uv venv
# Creating virtual environment at: .venv
# Activate with: source .venv/bin/activate
Untuk migrasi penuh ke alur modern, pindahkan isi requirements.txt satu per satu ke uv add, atau cukup mulai project baru dengan uv init dan uv add.
Hati-hati saat mencampur uv pip install dengan uv add di project yang sama. Idealnya pilih satu alur: pakai uv add/uv sync untuk project yang dikelola lewat pyproject.toml, atau uv pip untuk lingkungan ad-hoc.
Cheat Sheet: Perintah uv yang Wajib Kamu Hafal
uv init <nama> # buat project baru
uv add <paket> # tambah dependensi + update lock
uv remove <paket> # hapus dependensi
uv run <perintah> # jalankan perintah di environment project
uv lock # perbarui lock file
uv sync # sinkronkan environment dengan lock
uv tree # lihat pohon dependensi
uv python install 3.12 # unduh versi Python tertentu
uv python pin 3.12 # tetapkan versi Python project
uvx <tool> # jalankan tool CLI sekali pakai
uv venv # buat virtual environment manual
Simpan cheat sheet di atas sebagai referensi cepat. Sebagian besar workflow harian kamu cukup memakai tiga perintah: uv init, uv add, dan uv run.
Kesimpulan
uv merangkum tooling Python yang dulu tersebar menjadi satu binary yang cepat dan konsisten. Kamu sudah belajar menginstal uv, membuat project, menambah dan mengunci dependensi, menjalankan kode, mengelola versi Python, memakai uvx, hingga migrasi dari pip.
Kecepatannya yang luar biasa plus alur kerja yang rapi menjadikan uv pilihan terbaik untuk project Python baru — baik untuk proyek pribadi maupun tim. Kalau kamu serius dengan Python, mempelajari uv adalah investasi waktu yang sangat sepadan.
Langkah berikutnya yang disarankan: coba migrasi satu project lama kamu ke uv minggu ini, lalu bandingkan waktu install-nya dengan pip. Kemungkinan besar kamu tidak akan mau kembali lagi.
BengkelKode