UV: Package Manager Python Modern yang 10-100x Lebih Cepat

# 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,...

By Ruby Abdullah · · tutorial
UVPythonPackage ManagerVirtual EnvironmentDevOps

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:

  • Menambahkan package ke pyproject.toml
  • Resolve seluruh dependency tree
  • Update uv.lock
  • Install package ke virtual environment
  • Menghapus 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

    Artikel Terkait

    Tutorial Reflex: Membangun Web App Full-Stack dengan Python Murni

    Reflex: Membangun Aplikasi Web Full-Stack dengan Python Murni Reflex memungkinkan Anda membangun aplikasi web lengkap — ...

    Tutorial ColBERT & RAGatouille: Late-Interaction Retrieval untuk RAG

    ColBERT & RAGatouille: Retrieval Late-Interaction untuk RAG yang Lebih Baik Sebagian besar sistem RAG mengandalkan dense...

    Tutorial SGLang: Serving LLM Cepat dan Pemrograman Structured Generation

    SGLang: Serving LLM yang Cepat dan Model Pemrograman untuk Generasi Terstruktur SGLang adalah dua hal dalam satu paket: ...

    Tutorial TRL: Post-Training LLM dengan SFT, DPO, dan Reward Modeling

    Post-Training LLM dengan TRL: SFT, Reward Modeling, dan DPO Setelah sebuah base language model selesai dipretraining, mo...