Programming

uv: Python Package Manager Modern yang Bikin Development 10x Lebih Cepat

Pernah nggak sih kamu ngerasa frustasi nunggu pip install yang lambatnya minta ampun? Atau bingung kenapa virtual environment di project satu beda banget setupnya sama project lain? Kalau kamu pernah ngalamin ini, selamat kamu bukan sendirian. Saya dulu juga gitu, sampai akhirnya nemu uv yang bener-bener ngeubah cara saya manage Python project.

Python ecosystem di 2026 udah jauh lebih mature dibanding beberapa tahun lalu. Tapi masalah dependency management tetap jadi pain point utama buat banyak developer. pip yang lambat, virtualenv yang ribet, requirements.txt yang sering nggak reproducible semua ini bikin workflow jadi nggak efisien. Makanya muncul tools baru kayak uv, ruff, dan pyproject.toml yang bikin hidup developer Python jauh lebih gampang.

Kenapa pip Udah Nggak Cukup Lagi?

Sebelum kita bahas uv, penting buat ngerti kenapa pip mulai ketinggalan. Masalah utama pip itu ada di dependency resolver-nya. Ketika kamu install package, pip harus resolve semua dependency secara serial satu per satu. Kalau project kamu punya 50+ dependency, proses ini bisa makan waktu menit-menit.

Belum lagi masalah requirements.txt yang sering nggak lock version-nya. Kamu tulis requests>=2.28, tapi di production ternyata ke-install versi 2.31 yang punya breaking change. Classic Python dependency hell.


# Masalah klasik pip
$ pip install -r requirements.txt
# Nunggu 2-3 menit buat resolve dependencies...
# Kadang gagal karena conflict yang nggak jelas
# Dan nggak ada jaminan reproducible di environment lain

Kenalan sama uv The Game Changer

uv itu package manager buat Python yang ditulis di Rust (sama tim yang bikin ruff). Performanya gila-gilaan bisa 10-100x lebih cepet dari pip. Tapi bukan cuma soal speed, uv juga solve masalah fundamental di Python packaging.

Fitur utama uv:

  • Super cepat install dependencies dalam hitungan detik, bukan menit
  • Built-in virtual environment nggak perlu python -m venv lagi
  • Dependency locking uv.lock yang benar-benar reproducible
  • Tool management bisa install CLI tools global kayak pipx
  • Python version management bisa install dan switch Python version
  • Drop-in replacement kompatibel sama pip dan requirements.txt

Install uv di Berbagai OS

Instalasi uv gampang banget. Satu command dan langsung jalan:


# Linux / macOS
curl -LsSf https://astral.sh/uv/install.sh | sh

# Atau pakai pip (kalau kamu masih setia sama pip hehe)
pip install uv

# macOS dengan Homebrew
brew install uv

# Windows
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"

Setelah install, restart terminal kamu. Cek versinya:


$ uv --version
uv 0.7.x (c1234567 2026-07-15)

Mulai Project Baru dengan uv

Ini bagian yang paling saya suka. Bikin project Python baru sekarang jadi super clean:


# Bikin project baru
$ uv init my-awesome-project
$ cd my-awesome-project

# Struktur yang dihasilkan:
# my-awesome-project/
# .python-version
# pyproject.toml
# hello.py
# README.md

Lihat? Langsung ada pyproject.toml no more setup.py, setup.cfg, atau requirements.txt yang berantakan. Semua konfigurasi ada di satu file.


# pyproject.toml (hasil uv init)
[project]
name = "my-awesome-project"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.12"
dependencies = []

[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"

Dependency Management yang Beneran Reproducible

Nambahin dependency ke project? Satu command:


# Tambah dependency
$ uv add requests flask sqlalchemy

# Tambah dev dependency
$ uv add --dev pytest ruff mypy

# Lihat apa yang sudah terinstall
$ uv pip list

Yang bikin uv beda dari pip adalah file uv.lock. File ini lock semua dependency beserta sub-dependency-nya ke versi yang exact. Kalau kamu commit uv.lock ke git, siapapun yang clone project kamu bakal dapet environment yang persis sama.


# Install semua dependency dari lock file (cepet banget!)
$ uv sync

# Di machine lain, hasilnya PERSIS SAMA
# Nggak ada lagi "works on my machine"

Virtual Environment? Built-in!

Nggak perlu lagi python -m venv .venv && source .venv/bin/activate. uv handle ini secara otomatis:


# uv bikin .venv otomatis kalau belum ada
$ uv run python main.py

# Atau bikin manual kalau mau
$ uv venv

# Jalankan script dengan dependencies yang benar
$ uv run python my_script.py

# Jalankan satu-off command
$ uv run pytest tests/

Yang paling keren, uv juga bisa manage Python version. Nggak perlu install pyenv lagi:


# Install Python 3.12
$ uv python install 3.12

# Install Python 3.13 (versi terbaru)
$ uv python install 3.13

# Set Python version buat project
$ uv python pin 3.12

# Cek Python yang tersedia
$ uv python list

Workflow Sehari-hari dengan uv

Ini contoh workflow sehari-hari saya pakai uv:


# 1. Mulai hari, buka project
$ cd my-api-project

# 2. Pull latest code
$ git pull

# 3. Sync dependencies (cepet, < 1 detik)
$ uv sync

# 4. Jalankan server
$ uv run uvicorn main:app --reload

# 5. Mau tambah dependency baru?
$ uv add redis

# 6. Run tests
$ uv run pytest -v

# 7. Format code
$ uv run ruff format .

# 8. Lint code
$ uv run ruff check --fix

Satu hal yang bikin workflow ini enak: kamu nggak perlu mikirin virtual environment. uv handle semuanya di background. Fokus kamu tetap di kode, bukan di environment management.

pyproject.toml Single Source of Truth

Salah satu hal yang paling confusing di Python ecosystem lama adalah banyaknya file konfigurasi. setup.py, setup.cfg, requirements.txt, Pipfile, tox.ini, .flake8 semua punya format beda.

Dengan pyproject.toml, semuanya jadi satu:


[project]
name = "my-api"
version = "1.0.0"
requires-python = ">=3.12"
dependencies = [
 "fastapi>=0.100.0",
 "sqlalchemy>=2.0.0",
 "redis>=5.0.0",
]

[project.optional-dependencies]
dev = [
 "pytest>=7.0.0",
 "ruff>=0.5.0",
 "mypy>=1.0.0",
]

[tool.ruff]
line-length = 88
target-version = "py312"

[tool.ruff.lint]
select = ["E", "F", "I", "N", "W", "UP"]

[tool.pytest.ini_options]
testpaths = ["tests"]
pythonpath = ["src"]

[tool.mypy]
python_version = "3.12"
strict = true

Satu file, semua konfigurasi. Clean, readable, dan gampang di-maintain. Ini yang bikin pyproject.toml jadi standard baru di Python ecosystem.

uv vs pip vs Poetry vs PDM Perbandingan Jujur

Ada banyak package manager di Python. Mana yang paling cocok buat kamu? Ini perbandingan jujur berdasarkan pengalaman saya:

  • pip Standar bawaan, paling kompatibel. Tapi lambat dan nggak punya dependency locking built-in. Cocok buat: quick scripts, tutorial, atau kalau kamu nggak mau install tools tambahan.
  • Poetry Populer, punya dependency locking, tapi lambat dan kadang bikin masalah compatibility. Cocok buat: project yang udah pakai Poetry sebelumnya.
  • PDM Alternatif Poetry yang lebih standards-compliant. Tapi adoption-nya masih kecil. Cocok buat: yang mau pendekatan PEP-standard tanpa Poetry.
  • uv Paling cepat, fitur paling lengkap, tapi masih relatif baru. Cocok buat: project baru, developer yang mau workflow modern, dan siapapun yang muak sama pip yang lambat.

Rekomendasi saya: kalau kamu mulai project baru di 2026, pakai uv. Kalau project lama, migrasi pelan-pelan mulai dari pakai uv pip install sebagai drop-in replacement, terus pindah ke uv add dan pyproject.toml.

Tips & Trik yang Jarang Dibahas

Beberapa tips yang saya kumpulin setelah pakai uv beberapa bulan:


# 1. Install CLI tools global (pengganti pipx)
$ uv tool install httpie
$ uv tool install ruff
$ uv tool install black

# 2. Jalankan script tanpa install dependencies manual
# uv auto-detect dan install dependencies yang dibutuhkan
$ uv run --with requests my_script.py

# 3. Upgrade semua dependencies sekaligus
$ uv lock --upgrade

# 4. Cek dependency tree
$ uv tree

# 5. Export ke requirements.txt (buat compatibility)
$ uv pip compile pyproject.toml -o requirements.txt

# 6. Cache management
$ uv cache dir
$ uv cache clean

Integrasi dengan CI/CD

Buat yang pakai GitHub Actions atau GitLab CI, uv bikin pipeline jadi jauh lebih cepet:


# GitHub Actions example
name: CI
on: [push, pull_request]

jobs:
 test:
 runs-on: ubuntu-latest
 steps:
 - uses: actions/checkout@v4

 - name: Install uv
 uses: astral-sh/setup-uv@v4

 - name: Install dependencies
 run: uv sync

 - name: Run tests
 run: uv run pytest

 - name: Lint
 run: uv run ruff check .

 - name: Type check
 run: uv run mypy src/

Di CI, bedanya paling kerasa. Pipeline yang dulunya makan 5 menit buat install dependencies, sekarang cuma 30 detik. Itu 10x lebih cepet. Kalau kamu push code 20 kali sehari, hemat waktu yang signifikan.

Migrasi dari Project Lama

Udah punya project lama pakai pip + requirements.txt? Migrasinya gampang:


# 1. Init uv di project yang udah ada
$ cd existing-project
$ uv init

# 2. Import dependencies dari requirements.txt
$ uv add -r requirements.txt

# 3. Hapus requirements.txt (opsional, buat backward compatibility bisa di-keep)
$ rm requirements.txt

# 4. Commit uv.lock ke git
$ git add uv.lock pyproject.toml
$ git commit -m "migrate to uv"

Proses ini nggak nge-break existing workflow. Kamu masih bisa pakai uv pip install sebagai drop-in replacement kalau butuh.

Kesimpulan

Python packaging memang udah lama jadi masalah. Tapi dengan tools kayak uv, ruff, dan standard pyproject.toml, ecosystem-nya akhirnya ke arah yang benar. uv bukan cuma soal speed ini soal developer experience yang lebih baik secara keseluruhan.

Kalau kamu belum coba uv, sekarang waktu yang tepat. Install, bikin project kecil, dan rasain sendiri bedanya. Trust me, kamu nggak akan mau balik ke pip lagi.

Pertanyaan buat kamu: udah coba uv belum? Atau masih setia sama pip? Share pengalaman kamu di kolom komentar saya penasaran workflow Python kayak gimana yang paling works buat kalian!


You may also like


0 Comments


Leave a Reply

Comments with links or spam keywords will be rejected.
Scroll to Top