Rust ile yazılmış çok hızlı Python paket ve proje yöneticisi uv
(github.com/astral-sh)- uv, Rust tabanlı çok hızlı bir Python paket ve proje yönetim aracıdır
- pip, pip-tools, pipx, poetry, pyenv, virtualenv vb. araçların yerini tek başına alabilir
- En fazla 10 ila 100 kat daha hızlı performans, disk alanı tasarrufu, güçlü önbellek ve cross-platform desteği sunar
- Betikler, projeler, araçlar ve çeşitli Python sürümlerinin yönetimi gibi entegre geliştirme ortamı desteği içerir
- Geliştirici üretkenliği, büyük ölçekli projeler ve hızlı çalışma temposu için optimize edilmiş modern bir Python geliştirme iş akışını mümkün kılar
Açık kaynak tanıtımı ve farklılaştırıcı noktalar
- uv, mevcut pip, pip-tools, pipx, poetry, pyenv, virtualenv, twine gibi birçok Python yönetim aracının işlevini tek bir araçta birleştirir
- Rust ile geliştirildiği için performansı son derece yüksektir; geleneksel pip'e kıyasla 10 ila 100 kat daha hızlı kurulum ve senkronizasyon hızı sunar
- Genel önbellek ve bağımlılık tekrarını kaldırma sayesinde disk kullanımını optimize eder; ayrıca sezgisel bir CLI ve tanıdık pip uyumluluğu sağlar
- macOS, Linux, Windows gibi farklı platformlarda bağımsız çalıştırılabilir dosya olarak kurulabilir
- Bağımsız kurulum yöntemi, pip ve pipx ile entegrasyon, yerleşik otomatik güncelleme desteği gibi kullanım kolaylığını artıran özelliklere sahiptir
Başlıca özellikler (Highlights)
- Tek bir uv aracıyla pip, pip-tools, pipx, poetry, pyenv, twine, virtualenv vb. birçok işlevin yerini alabilir
- Mevcut pip'e kıyasla 10 ila 100 kat daha hızlı kurulum/güncelleme/senkronizasyon performansı sağlar
- lockfile tabanlı proje bağımlılığı yönetimi ile workspaces ve universal lockfile desteği sunar
- Betik bağımlılıklarını satır içi bildirme ve otomatik izole ortamda çalıştırma özelliği sağlar
- Çeşitli Python sürümlerini yönetme/kurma/değiştirme desteği sunar
- Python paketi olarak dağıtılan araçların çalıştırılması ve kurulmasını destekler (pipx yerine geçebilir)
- pip arayüzü uyumluluğu ve ek özellikler sunar (sürüm ezme, platformdan bağımsız çözümleme vb.)
- Cargo tarzı workspace ile büyük ölçekli projeler için optimize edilmiştir
- Genel önbellek ile bağımlılık tekrarını en aza indirir ve disk alanı verimliliği sağlar
- Rust/Python ortamı olmadan da curl veya pip, pipx ile kurulup kullanılabilir
- macOS, Linux, Windows dahil çoklu platform desteği sunar
- Astral ve Ruff'ı geliştiren ekip tarafından yapılmıştır
Proje yönetimi (Project Management)
- Proje bazında bağımlılıklar, ortamlar, kilit (lock) dosyaları ve workspace desteğini eksiksiz sunar
uv initkomutuyla projeyi otomatik başlatır ve virtualenv oluştururuv addile bağımlılık ekleme;uv lockveuv synckomutlarıyla paket senkronizasyonu ve güvenlik denetimini otomatik olarak gerçekleştirir- Poetry, Rye gibi modern Python proje yönetim araçlarının işlevlerini değiştirirken daha hızlı işlem performansı sağlar
- uv tarafından yönetilmeyen projelerin build ve publish işlemlerini de destekler
Betik yönetimi (Scripts)
- Tek dosyalı betikler için bağımlılıkları satır içi metadata olarak tanımlama imkanı verir
- Betik çalıştırılırken otomatik sanal ortam izolasyonu ve bağımlılık kurulumu sağlar
uv add --scriptile betik bazında bağımlılık yönetimi,uv runkomutuyla izole ortamda çalıştırma mümkündür- Veri bilimi/otomasyon gibi tek seferlik betik kullanımları için optimize edilmiştir
Araç yönetimi (Tools)
- Python paketi biçimindeki CLI araçlarını pipx benzeri şekilde kurup çalıştırabilir
uv tool install,uvxkomutlarıyla geçici ortam veya genel çalıştırma kullanılabilir- Kurulu araçları görüntüleme, sürüm yönetimi ve güncelleme desteği sunar
Python sürüm yönetimi
- Birden fazla Python sürümünü kolayca kurup anında geçiş yapabilirsiniz
- Çeşitli sürümleri paralel yönetebilir, proje bazında
.python-versionsabitlemesi yapabilirsiniz - pypy gibi alternatif uygulamalar da aynı arayüzle desteklenir
uv python install/pingibi komutlarla sürüm kurma, belirleme ve etkinleştirme yapılabilir
pip arayüzü (Pip Interface)
uv pip,uv venvile mevcut pip, pip-tools, virtualenv araçlarının yerini tamamen alabilir- Bağımlılık sürümü override etme, platformdan bağımsız çözümleme, yeniden üretilebilir build'ler gibi gelişmiş özellikler içerir
- Mevcut iş akışını değiştirmeden pip için birebir alternatif olur ve 10 ila 100 kat performans artışı sağlar
- requirements.in → requirements.txt dönüşümü, sanal ortam oluşturma ve requirements senkronizasyonu desteği sunar
Platform ve sürüm politikası
- Farklı işletim sistemlerini (Windows, macOS, Linux) destekler
- Politika ve desteklenen platform bilgileri için resmi dokümanlara bakılabilir
Katkı (Contributing)
- Yeni başlayanlardan uzmanlara kadar farklı katkıcıları desteklemeyi hedefler ve ilgili rehberler sunar
SSS
- uv'nin telaffuzu “yu-vi” şeklindedir
- Yazım biçimi sabit olarak küçük harfle “uv” kullanılır
Teknik arka plan ve teşekkürler (Acknowledgements)
- Bağımlılık çözümleme algoritması olarak PubGrub kullanılır
- Git uygulaması Cargo tabanlıdır
- Optimizasyon stratejileri pnpm, Orogene, Bun, Posy gibi modern paketleme araçlarından yoğun biçimde ilham almıştır
Lisans
- MIT ve Apache-2.0 lisanslarından biri seçilerek kullanılabilir
- Katkı olarak eklenen kodlar da aynı koşullarla çift lisanslanır
1 yorum
Hacker News yorumu
Birkaç ay öncesine kadar uv’yi asla kullanmayacağımı düşünüyordum; çünkü zaten
venvvepipe alışmıştım ve başka bir araca gerek olduğunu sanmıyordum. Ama yakın zamanda paylaşımlı bir sunucuda root yetkisi olmadan çalışırken çeşitli paketler ve sürücüler tamamen bozulmuştu vepytorchgerekiyordu; bu deneyimden sonra tamamen uv’ye geçtim.pipçok uzun sürüyordu, önbelleği çok fazla yer kaplıyordu ve yerini değiştirmek de pek kolay değildi. uv’ye geçince her şey çok iyi çalıştı, oldukça memnunum. Hâlâ tereddüt ediyorsanız en azından 5 dakika deneyin derim.venvtabanlı iş akışıyla tamamen uyumlu olması. Sadeceuv venvçalıştırmanız yetiyor.pip+ yapılandırma dosyası +venvkombinasyonunda doğruvenvyi oluşturup kurmak, ayrıca her betik çalıştırma/test için garipshebangsatırlarını ya davenvetkinleştirmeyi hatırlamak gerekiyordu; bu da kafa karıştırıyor ve hata mesajları da tam anlamıyla yardımcı olmuyordu. Yeni başlayanlara öğretirken araçlar gerçekten zahmetli geliyordu; şimdi ise sadeceuv run,uv add,uv synckomutlarını hatırlamak yetiyor, bu yüzden ekip arkadaşları da bunu çok daha rahat benimsiyor.asdfkullanıyordum, sonramisee geçtim; uv gibi genel amaçlı araçlarla kıyaslandığında nasıl olduklarını merak ediyorum.pipönbelleğinin çok yer kapladığı ve konumunun düzgün değiştirilemediği söylenmişti; uv’nin depo alanını kullanma açısından daha iyi olup olmadığını merak ediyorum. Eğer daha iyiyse, bunun nedeni paylaşımı daha iyi yapması mı?"uv a b c"ile başlayan basit bir rehberi görüp denedim. İçeride çok fazla tekrar varmış gibi görünüyor ama pratik kullanımda GNU-Debian-Ubuntu varsayılan host üzerinde belirgin bir sorun yaşamadım ve her şey sorunsuz çalıştı.uv’yi ilk kullandığımda,
pipe kıyasla o kadar hızlı bitiyordu ki bir hata yaptığımı ya da düzgün çalışmadığını sanmıştım.uv ve ruff’un, “asla tekerleği yeniden icat etme” sözüne karşı harika birer karşı örnek olduğunu düşünüyorum. Amaç net olduğunda mevcut olandan çok daha iyi sonuçlar çıkabiliyor.
10xifadesi yerineorder of magnitude bettergibi daha uzun bir ifade tercih ediliyor, merak ediyorum.Küçük/düşük donanımlı sistemlerde (örneğin AWS T2.micro üzerinde Windows gibi) uv çok fazla eşzamanlı indirme denediği için zaman aşımına uğrayabiliyor.
UV_CONCURRENT_DOWNLOADSortam değişkeniyle eşzamanlı indirme sayısını 1–2’ye sınırlayınca düzeliyor. uv’nin varsayılan ayarları biraz fazla agresif geliyor; sunucuya göre thread sayısını otomatik ayarlarken indirme hızını da kullanacak şekilde iyileştirilmesi güzel olurdu.Son zamanlarda dizüstü bilgisayarımda kişisel kullanım için uv’yi deniyorum.
pipe alışkın biri olarak hissedilen hız neredeyse inanılmaz derecede yüksek; birkaç kez gerçekten çalışıp çalışmadığını anlayamadım.uv add <mydependencies> --script mycoolscript.pykomutunu seviyorum. Üstüne en başa#!/usr/bin/env -S uv runekleyince Python betiklerini anında çalıştırabiliyorsunuz; bu yüzden benim için çok kullanışlı bir araç oldu.httpxvebeautifulsoupkullanarak sayfayı tarayıp bağlantı listesini CSV olarak döndüren kodu hemen üretiyor. ilgili yazı Claude betik çıktısıuv add --scriptile yalnızcauv addaynı şey değil. Ayrıca resmî belgelerderun --withya da PEP723 desteği gibi daha kullanışlı birçok özellik var; bakmanızı öneririm. resmî rehber"mydependencies"tam olarak ne demek? Bir yapılandırma dosyasını mı kastediyorsun?uv’yi daha önce denemiştim; aşırı hızlı ve kullanımı da kolay olduğu için şaşırdım. Artık neredeyse
pipkullanmak için bir neden yok ve yalnızca Python kullanıyorsanızcondaya da ihtiyaç kalmıyor.pyenvvepoetryde artık kullanmadığım araçlar arasında.UV’yi gerçekten seviyorum. Astral ekibinin Ruff’unu da sevdiğim için mevcut
pylint+ Black kurulumumdan tüm lint/format işlerini Ruff’a taşıdım. Lint süresinin 90 saniyeden 1,5 saniyenin altına düştüğünü gördüm; gerçekten şaşırtıcıydı.pylintin bazı denetimlerini yapmıyor ve fazla açık hataları bile bazen yakalamadan geçiyor. (Örneğin çalıştırılamayan kodları bile yakalamayabiliyor.)Son zamanlarda küçük çalıştırılabilir betikleri aşağıdaki kalıpla çalıştırmak çok hoşuma gitmeye başladı ve bunu sık kullanıyorum.
shebangsatırını akılda tutmak çok zor; keşke sadece#!/usr/bin/env uvxgibi daha basit bir biçim olsa. Her seferinde aratmam gerekiyor.O kadar memnunum ki
pip/twine/requirements.txtdüzenine geri dönmek istemiyorum. Birkaç proje şirket içi GitLab üzerinde ortak wheel’ler tutuyordu; eskiden gereken 10 satırlık YAML’ı artık sadeceuv buildveuv publishile iki satıra indirebiliyorum. Bağımlılıkları almak kolaylaşıyor, ana bağımlılıkları da tek bakışta görebiliyorsunuz; her şeyirequirements.txtiçinde birbirine karıştırma derdi ortadan kalkıyor.