uv, pengelola paket dan proyek Python super cepat yang ditulis dengan Rust
(github.com/astral-sh)- uv berbasis Rust dan merupakan alat manajemen paket serta proyek Python yang sangat cepat
- Dapat menggantikan pip, pip-tools, pipx, poetry, pyenv, virtualenv, dan lainnya dalam satu alat
- Menawarkan kinerja hingga 10–100 kali lebih cepat, penghematan ruang disk, cache yang kuat, dan dukungan lintas platform
- Mencakup dukungan lingkungan pengembangan terpadu seperti manajemen skrip, proyek, alat, dan berbagai versi Python
- Memungkinkan workflow pengembangan Python modern yang dioptimalkan untuk produktivitas pengembang, proyek berskala besar, dan kecepatan kerja tinggi
Pengenalan open source dan poin pembeda
- uv mengintegrasikan fungsi dari berbagai alat manajemen Python yang ada seperti pip, pip-tools, pipx, poetry, pyenv, virtualenv, twine ke dalam satu alat tunggal
- Dibangun dengan Rust sehingga performanya sangat unggul, dengan kecepatan instalasi dan sinkronisasi 10–100 kali lebih cepat dibandingkan pip tradisional
- Menyediakan cache global dan penghapusan duplikasi dependensi untuk optimasi penggunaan disk, serta mendukung CLI yang intuitif dan kompatibilitas pip yang familier
- Dapat dipasang sebagai executable mandiri di berbagai platform seperti macOS, Linux, Windows
- Ciri utamanya adalah kemudahan penggunaan melalui metode instalasi mandiri, integrasi dengan pip dan pipx, serta dukungan auto-update bawaan
Fitur utama (Highlights)
- Dengan satu alat uv, dapat menggantikan berbagai fungsi dari pip, pip-tools, pipx, poetry, pyenv, twine, virtualenv, dan lainnya
- Menyediakan performa instalasi/pembaruan/sinkronisasi 10–100 kali lebih cepat dibandingkan pip yang ada
- Mendukung manajemen dependensi proyek berbasis lockfile serta workspaces dan universal lockfile
- Mendukung deklarasi inline dependensi skrip dan eksekusi dengan isolasi lingkungan otomatis
- Mendukung manajemen/instalasi/pergantian berbagai versi Python
- Mendukung menjalankan dan memasang alat yang didistribusikan sebagai paket Python (pengganti pipx)
- Menyediakan kompatibilitas antarmuka pip beserta fitur tambahan (override versi, resolusi independen platform, dll.)
- Dioptimalkan untuk proyek berskala besar dengan workspace bergaya Cargo
- Meminimalkan duplikasi dependensi dan mengefisienkan ruang disk dengan cache global
- Dapat dipasang dan digunakan melalui curl atau pip, pipx bahkan tanpa lingkungan Rust/Python
- Mendukung multi-platform seperti macOS, Linux, Windows
- Dibuat oleh tim yang mengembangkan Astral dan Ruff
Manajemen proyek (Project Management)
- Mendukung secara penuh dependensi, environment, file lock, workspace, dan lain-lain pada tingkat proyek
- Perintah
uv initmenginisialisasi proyek secara otomatis dan membuat virtualenv - Dengan
uv adddapat menambahkan dependensi, dan perintahuv locksertauv syncotomatis menangani sinkronisasi paket dan audit keamanan - Menggantikan kemampuan alat manajemen proyek Python modern seperti Poetry dan Rye, sambil menjamin kinerja pemrosesan yang lebih cepat
- Juga mendukung build dan publish proyek yang tidak dikelola oleh uv
Manajemen skrip (Scripts)
- Memungkinkan deklarasi metadata inline dependensi pada skrip satu file
- Saat skrip dijalankan, mendukung isolasi virtual environment otomatis dan instalasi dependensi
- Dengan
uv add --script, dependensi dapat dikelola per skrip, dan perintahuv runmenjalankan skrip dalam lingkungan terisolasi - Sangat cocok untuk penggunaan skrip sekali jalan seperti data science/otomatisasi
Manajemen alat (Tools)
- Dapat memasang dan menjalankan alat CLI berbentuk paket Python seperti pipx
- Perintah
uv tool installdanuvxdapat digunakan untuk lingkungan sementara atau eksekusi global - Mendukung pemeriksaan alat yang terpasang, manajemen versi, dan pembaruan
Manajemen versi Python
- Dapat memasang dan langsung berpindah di antara beberapa versi Python dengan mudah
- Mendukung pengelolaan berbagai versi secara paralel, dan pengaturan pin
.python-versionper proyek - Implementasi alternatif seperti pypy juga didukung dengan antarmuka yang sama
- Gunakan perintah seperti
uv python install/pinuntuk memasang, menetapkan, dan mengaktifkan versi
Antarmuka pip (Pip Interface)
- Dengan
uv pipdanuv venv, dapat sepenuhnya menggantikan pip, pip-tools, dan virtualenv yang ada - Mencakup fitur lanjutan seperti override versi dependensi, resolusi independen platform, dan reproducible build
- Menjadi pengganti drop-in untuk pip tanpa perlu mengubah workflow yang ada, sambil memberikan peningkatan performa 10–100 kali
- Mendukung konversi requirements.in → requirements.txt, pembuatan virtual environment, dan sinkronisasi requirements
Platform dan kebijakan versi
- Mendukung berbagai sistem operasi (Windows, macOS, Linux)
- Informasi kebijakan dan platform yang didukung dapat dilihat di dokumentasi resmi
Kontribusi (Contributing)
- Bertujuan mendukung berbagai kontributor, dari pemula hingga ahli, dan menyediakan panduan terkait
FAQ
- Pengucapan uv ditulis sebagai “yu-vi”
- Gaya penulisan ditetapkan dalam huruf kecil sebagai “uv”
Latar belakang teknis dan ucapan terima kasih (Acknowledgements)
- Algoritme resolusi dependensi menggunakan PubGrub
- Implementasi Git berbasis Cargo
- Strategi optimasi banyak terinspirasi dari alat packaging modern seperti pnpm, Orogene, Bun, Posy
Lisensi
- Dapat digunakan dengan memilih salah satu dari MIT atau Apache-2.0
- Kode yang dikontribusikan juga memiliki lisensi ganda dengan syarat yang sama
1 komentar
Komentar Hacker News
Sampai beberapa bulan lalu saya pikir tidak akan pernah memakai uv, karena saya sudah terbiasa dengan venv dan pip, dan merasa tidak benar-benar butuh alat lain. Tapi belakangan saya pernah harus bekerja di server bersama tanpa akses root, dengan berbagai paket dan driver dalam keadaan rusak, dan saya butuh pytorch. Sejak pengalaman itu saya sepenuhnya beralih ke uv. pip butuh waktu lama, cache-nya memakan banyak ruang, dan juga sulit dipindahkan lokasinya. Setelah pindah ke uv, semuanya berjalan sangat baik dan saya puas. Kalau masih ragu, saya benar-benar menyarankan untuk mencobanya setidaknya 5 menit.
uv venv.Saat pertama kali memakai uv, saya ingat sempat mengira ada yang salah atau tidak bekerja dengan benar, karena selesai jauh terlalu cepat dibanding pip.
Saya rasa uv dan ruff adalah contoh tandingan yang keren untuk ungkapan "jangan pernah menciptakan ulang roda". Kalau tujuannya jelas, kadang hasilnya bisa jauh lebih baik daripada yang sudah ada.
Di sistem kecil/berspesifikasi rendah (misalnya AWS T2.micro dengan Windows), uv mencoba terlalu banyak unduhan paralel sehingga terjadi timeout. Ini bisa diatasi dengan membatasi jumlah unduhan paralel ke sekitar 1~2 lewat variabel lingkungan UV_CONCURRENT_DOWNLOADS. Saya merasa pengaturan bawaan uv terlalu agresif, dan akan bagus kalau bisa ditingkatkan, misalnya dengan menyesuaikan thread per server secara otomatis berdasarkan kecepatan unduh.
Belakangan saya mencoba memakai uv untuk penggunaan pribadi di laptop, dan sebagai orang yang terbiasa dengan pip, kecepatannya terasa sangat sulit dipercaya sampai beberapa kali saya sempat bingung apakah benar-benar sudah jalan.
Saya suka perintah
uv add <mydependencies> --script mycoolscript.py, dan jika ditambah#!/usr/bin/env -S uv rundi bagian paling atas, skrip Python bisa langsung dijalankan, jadi sangat berguna.uv add --scriptdanuv addbiasa itu berbeda. Di dokumentasi resmi juga ada banyak fitur yang lebih berguna seperti dukunganrun --withatau PEP723, jadi disarankan untuk melihatnya. Panduan resmiSaya pernah mencoba uv dulu, dan terkejut karena sangat cepat dan mudah dipakai. Sekarang hampir tidak ada alasan lagi memakai pip, dan kalau hanya memakai Python, conda pun jadi tidak diperlukan.
Saya benar-benar suka UV. Saya juga suka Ruff dari tim Astral, jadi semua linting/formatting yang sebelumnya memakai pylint + Black saya pindahkan ke Ruff. Waktu lint turun dari 90 detik menjadi kurang dari 1,5 detik, dan itu sangat mengejutkan.
Belakangan saya juga suka menjalankan skrip kecil yang bisa dieksekusi dengan pola seperti di bawah ini:
#!/usr/bin/env uvx. Setiap kali mau memakainya saya harus mencari lagi, dan itu merepotkan.Saya puas sepenuhnya dan tidak ingin kembali ke pip/twine/requirements.txt. Beberapa proyek menaruh wheel bersama di GitLab internal, dan YAML 10 baris yang lama sekarang bisa diganti dengan dua baris: "uv build" dan "uv publish". Dependensi jadi mudah diambil dan dependensi utama juga bisa langsung terlihat. Tidak perlu lagi mencampur semuanya ke dalam requirements.txt.