- uv secara drastis menyederhanakan instalasi Python dan pengelolaan virtual environment, serta menyelesaikan masalah konfigurasi lingkungan yang rumit di ekosistem Python
- Ditulis dengan Rust, uv menghadirkan kecepatan dan stabilitas, serta menangani instalasi versi Python, manajemen paket, dan resolusi dependensi dalam satu perintah
- Dengan mengenali
pyproject.tomlsecara otomatis untuk menyiapkan lingkungan proyek,uv syncdapat mereproduksi lingkungan pengembangan yang sepenuhnya identik antaranggota tim - Melalui perintah seperti
uv run,uv add, danuvx, pengguna dapat menjalankan tanpa mengaktifkan virtual environment, serta menambahkan paket dan melakukan eksekusi sekali pakai - Dengan memastikan konsistensi instalasi dan eksekusi Python, uv dinilai sebagai titik balik yang sangat meningkatkan produktivitas developer dan efisiensi kolaborasi
Gambaran umum uv
- uv adalah alat manajemen Python open source gratis yang dikembangkan oleh Astral, dengan tujuan menyederhanakan proses konfigurasi lingkungan yang kompleks
- Astral adalah tim yang membuat alat pengembangan Python seperti Ruff
- uv mendukung instalasi versi Python, instalasi paket, manajemen virtual environment, dan resolusi dependensi, serta jauh lebih cepat dibanding alat yang sudah ada
- Dikembangkan dengan Rust, performanya sangat tinggi dan dapat berjalan di hampir semua platform seperti macOS, Linux, dan Windows
Instalasi dan penggunaan dasar
- Instalasinya sangat sederhana, cukup dijalankan dengan satu baris perintah
curlatau PowerShell- Linux/Mac:
curl -LsSf https://astral.sh/uv/install.sh | sh - Windows:
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
- Linux/Mac:
- Karena tidak mengubah instalasi Python yang sudah ada, alat ini aman untuk dicoba
Manajemen lingkungan proyek
- uv secara otomatis mengelola virtual environment untuk setiap proyek Python dan menyiapkan lingkungan dengan mengenali file
pyproject.tomlpyproject.tomlmendefinisikan versi Python, daftar dependensi, nama dan versi proyek, dan sebagainya- Contoh:
[project] name = "my_project" version = "1.0.0" requires-python = ">=3.9,<3.13" dependencies = ["astropy>=5.0.0", "pandas>=1.0.0,<2.0"] - Pendekatan ini memberikan definisi lingkungan yang lebih jelas dan terstandarisasi dibanding pip
Membuat proyek baru
- Dengan perintah
uv init, proyek baru dapat dibuat dengan mudah- Secara otomatis membuat file penting seperti
pyproject.tomldanREADME.md - Mendukung berbagai bentuk inisialisasi melalui opsi seperti
--baredan--package - Detail opsi dapat dilihat dengan
uv init --help
- Secara otomatis membuat file penting seperti
Sinkronisasi proyek yang sudah ada
- Jika proyek memiliki
pyproject.toml, proyek bisa langsung digunakan dengan perintahuv sync- Secara otomatis menginstal versi Python
- Membuat virtual environment di direktori
.venv - Membuat
uv.lockyang mencatat informasi versi yang tepat dari semua paket
- Dengan menggunakan perintah
uv run, skrip Python dapat dijalankan tanpa harus mengaktifkan lingkungan terlebih dahulu- Contoh:
uv run myscript.py,uv run jupyter lab
- Contoh:
Manajemen dependensi dan versi Python
- Dengan perintah
uv add numpy>=2.0, dependensi dapat ditambahkan dan dikelola secara otomatis- Tidak perlu mengedit
pyproject.tomlsecara manual
- Tidak perlu mengedit
- Dengan perintah
uv python pin 3.12.9, versi Python tertentu dapat dikunci, sehingga reproduktibilitas lingkungan terjamin
uvx: eksekusi sekali pakai yang cepat
uvxadalah perintah untuk langsung menjalankan alat tanpa konfigurasi lingkungan terpisah- Contoh:
uvx ruff,uvx jupyter lab,uvx --with pandas,pyarrow ipython - Berbasis cache sehingga bisa dijalankan ulang dengan sangat cepat, cocok untuk pekerjaan eksperimental
- Contoh:
- Berkat ini, developer dapat dengan mudah menyiapkan lingkungan eksekusi sementara tanpa terikat pada virtual environment
Jika ini masih belum meyakinkan Anda: catatan pribadi
- Saat mengembangkan The Astrosky Ecosystem, uv diadopsi untuk menyeragamkan lingkungan Python di berbagai OS
- Membantu memastikan semua developer dan server menggunakan instalasi Python serta versi dependensi yang sepenuhnya sama
- uv juga mengelola lingkungan Python di GitHub Actions dan lingkungan server produksi
- Berkat uv, masalah ketidaksesuaian antara lingkungan instalasi dan pengujian hilang, dan kolaborasi antar-developer menjadi lebih sederhana
Kesimpulan
- uv secara mendasar mengatasi kompleksitas instalasi dan manajemen Python, serta memungkinkan developer berkolaborasi secara stabil dalam lingkungan yang sama
- Berkat kecepatannya yang tinggi dan stabilitas berbasis Rust, uv dinilai sebagai “inovasi terbesar yang terjadi di ekosistem Python dalam 10 tahun terakhir”
7 komentar
Saya pikir
pdmhampir sangat mirip denganuv, tetapi tampaknya tidak banyak pembahasan tentangpdm.Sepertinya postingan tentang uv sekarang sudah tidak banyak berubah isinya.
Maven dan Gradle juga..
Komentar Hacker News
Dulu saya sering dengar bahwa tooling Python sudah cukup, tetapi sekarang setelah para pengembang Python merasakan ekosistem berbasis lockfile seperti npm, cargo, atau bundler, rasanya melegakan melihat mereka akhirnya menyadari keunggulannya
npm juga punya masalah, tetapi instalasi yang konsisten dan lockfile benar-benar konsep yang luar biasa
Mengejutkan bahwa pengelolaan environment bisa tidak nyaman selama ini
Saya bertanya-tanya apakah banyaknya upaya yang gagal semata-mata karena sulitnya manajemen paket, atau karena memang butuh pendanaan VC
pip freeze > requirements.txtdanpip install -r requirements.txtJika tidak memakai rentang versi, pada dasarnya requirements.txt berfungsi sebagai lockfile
Jadi menurut saya tren “lockfile resmi” belakangan ini agak dibesar-besarkan
Saya rasa kemunculan yarn berperan besar dalam mendorong perbaikan npm
Lebih cepat, lebih efisien, dan deterministik
Lihat penjelasan lengkapnya di pnpm.io/motivation
Dengan UV script, saya bisa mendistribusikan klien/server MCP dalam satu file
Tulisan terkait: MCP server in a file
Karena kebanyakan script saya hanya satu file, hidup jadi jauh lebih sederhana kalau menambahkan kode berikut di bagian paling atas
#!/usr/bin/env -S uv run --scriptDengan begitu script bisa berjalan seperti executable mandiri, dan uv akan otomatis memasang modul yang dibutuhkan
Karena penulis script bisa saja menyembunyikan dependensi berbahaya
Akan bagus kalau ada fitur whitelist
Namun beberapa paket tidak bisa mendeteksi tanggal rilisnya (contoh: yaml)
/usr/bin/env -S, dan nama dependensi harus memakai nama paket distribusi yang digunakan di perintahuv pip installIni adalah standar PEP 723 dan juga didukung oleh pipx
Sebelum memakai uv saya tidak tertarik pada Rust, tetapi gara-gara uv saya jadi memindahkan kode yang sensitif terhadap performa ke Rust
Saya berharap conda hilang sepenuhnya. Di klaster ML, environment conda jadi terlalu besar dan reproducibility-nya juga buruk
Dulu saya sudah cukup puas dengan kombinasi pyenv + venv + pip + pipx, tetapi uv
uv run,uv add, dan sebagainya, usability-nya jadi jauh lebih baikJauh lebih nyaman menambahkan
uvdi depan perintah daripada mengaktifkan environmentPengelolaan versi Python juga jadi mudah, dan per proyek terasa seperti batteries-included
Saya belum tahu stabilitas jangka panjangnya, tetapi untuk proyek baru sekarang saya pakai secara default
Ada juga orang yang tidak suka uv mendeteksi environment secara otomatis
Saya kurang melihat nilai besar dari manajemen versi Python, tetapi dengan uv pembuatan ulang environment jadi jauh lebih cepat
uv, perintah bisa dijalankan secara stateless sehingga nyaman untuk kolaborasiuvtetap berguna.venvTulisan blog ini hampir persis sama dengan pengalaman saya
Friksi berkurang dan semuanya jadi lebih sederhana
Saya berharap komunitas Python mengadopsi uv sebagai tool default
Tool berbasis Rust benar-benar mengubah kecepatan feedback loop
Tapi saya penasaran bagaimana Astral menghasilkan uang. Mereka juga menerima investasi, tetapi belum punya produk berbayar
Contohnya registry paket internal perusahaan
Wawancara terkait: Wawancara Charlie Marsh
Jika ada 10 juta pengembang Python, saya rasa uv juga cukup bisa dimonetisasi
Secara pribadi, saya menganggap type annotation dan penghapusan GIL lebih penting daripada uv
uv sendiri masih tahap awal dan masih ada hal-hal yang terasa kurang nyaman. Pada akhirnya ini tetap cuma package manager lain
resolver baru di pip dan makin banyaknya distribusi wheel berperan besar
Tulisan terkait: Wheels are faster for pure Python
Fakta bahwa ia ditulis dengan Rust juga menarik. Strukturnya mendukung bahasa lain seperti LLVM
Dari sudut pandang end-user, uv jauh lebih baik, dan kalau maintainer merasa tidak nyaman, mereka bisa memberi masukan
Kalau ada strict mode, mungkin performa juga bisa meningkat, tetapi itu bertentangan dengan filosofi bahasa
Meski begitu, kalau conda hilang, saya bersedia pindah ke uv
Saya pribadi tidak suka uv
uv pip, jadi bukan pengganti penuh jugaTapi memang pip dan venv juga sering rusak dan lebih sulit di-debug
uv tidak menggantikan ruff
Environment variable juga sebenarnya tidak perlu disentuh
uv pipbukan memanggil pip, melainkan menyediakan antarmuka yang kompatibelPada praktiknya uv memang menggantikan pip
Saya penasaran masalah kompatibilitas Docker yang dimaksud itu yang seperti apa
uv add,uv sync, danuv run, hasilnya jauh lebih ergonomis dan cepatDokumentasi lengkapnya lihat konsep dependencies di uv
uvmemang bagus karena cepat, tapi saya juga sempat berpikir bagaimana kalau arahnya adalah memperbaikipip.Saya sering memakainya untuk ML dan Web, dan saya berharap uv segera menjadi teknologi yang membosankan haha
Kalau lihat repo yang cuma punya
requirementstapi tidak adapyproject.toml, sekarang rasanya sudah kelihatan kuno ya, haha;