4 puan yazan GN⁺ 2025-06-24 | 1 yorum | WhatsApp'ta paylaş
  • 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 init komutuyla projeyi otomatik başlatır ve virtualenv oluşturur
  • uv add ile bağımlılık ekleme; uv lock ve uv sync komutları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
Reklam

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 --script ile betik bazında bağımlılık yönetimi, uv run komutuyla 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, uvx komutları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-version sabitlemesi yapabilirsiniz
  • pypy gibi alternatif uygulamalar da aynı arayüzle desteklenir
  • uv python install/pin gibi komutlarla sürüm kurma, belirleme ve etkinleştirme yapılabilir

pip arayüzü (Pip Interface)

  • uv pip, uv venv ile 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
Reklam

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

 
GN⁺ 2025-06-24
Hacker News yorumu
  • Birkaç ay öncesine kadar uv’yi asla kullanmayacağımı düşünüyordum; çünkü zaten venv ve pipe 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 ve pytorch gerekiyordu; 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.

    • uv’nin en iyi yanı, zaten kullandığınız venv tabanlı iş akışıyla tamamen uyumlu olması. Sadece uv venv çalıştırmanız yetiyor.
    • Özellikle açıklaması ve yeni başlayanlara kullanımını öğretmesi çok daha kolay geliyor. pip + yapılandırma dosyası + venv kombinasyonunda doğru venvyi oluşturup kurmak, ayrıca her betik çalıştırma/test için garip shebang satırlarını ya da venv etkinleş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 sadece uv run, uv add, uv sync komutlarını hatırlamak yetiyor, bu yüzden ekip arkadaşları da bunu çok daha rahat benimsiyor.
    • Benim durumumda asdf kullanıyordum, sonra misee 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ı?
    • Kısa süre önce deneysel bir depoda "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.

    • Bazen paket kurulumları yaklaşık 200ms sürüyor; bu yüzden Enter’a basmakla istemin geri gelmesi arasında çok hafif bir gecikme hissediliyor. Ama Poetry’de gidip bir kahve içip gelene kadar sürebildiği için hız farkı çok net.
    • Ben de aynı hissi yaşadım. O kadar akıcı ki sanki Python değilmiş gibi geliyor.
    • Benzer bir deneyimi yakın zamanda ben de yaşadım ve bu sayede tamamen uv’ye geçtim.
    • Ben de şüphe duymuştum ama denedikten sonra artık geri dönmek istemeyecek kadar memnun kaldı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.

    • Bence bu söz çoğu zaman mevcut sistemi iyi tanımayan acemilere verilen bir tavsiye bağlamında kullanılıyor. Yani sistemin sınırlarını ve nasıl geliştirilebileceğini bilmeyen biri düşünmeden yeniden icada kalkıştığında geçerli. Gerçek uzmanlar için değil.
    • Bunlar tekerleği yeniden icat etmedi; mevcut ahşap tekerleği daha sağlam bir malzemeyle değiştirip 10 kat daha hızlı dönebilen hale getirdiler, benzetmesi.
    • Python paket yönetiminin tarihine bakınca herkesin mevcut olandan daha iyisini yapma düşüncesiyle ortaya atıldığını görüyorsunuz.
    • Aslında “tekerleği yeniden icat etme” atasözünün kendisi pek mantıklı değil. Gerçek tekerlekleri bile sürekli geliştirdik; yazılımda da daha iyi tekerlekler yapmamak için bir sebep yok.
    • Biraz konu dışı ama neden kısa 10x ifadesi yerine order of magnitude better gibi 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_DOWNLOADS ortam 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.

    • Bu hiç de garip bir kullanım senaryosu değil; birçok kullanıcı ucuz VPS’lerde yan projeler yürütüyor. (Ben de sık yapıyorum, gerçi AWS değil.) Paylaştığın için teşekkürler, umarım otomatik algılama daha iyi hale gelir.
  • 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.py komutunu seviyorum. Üstüne en başa #!/usr/bin/env -S uv run ekleyince Python betiklerini anında çalıştırabiliyorsunuz; bu yüzden benim için çok kullanışlı bir araç oldu.

    • Bu yöntemi Claude Project için özel bir prompt ile öğrettim; böylece tek bir girdiden bağımlılıkları da içeren tam bir betiği otomatik üretebiliyor. Claude 4’ün kesim tarihi Mart 2025. Claude Sonnet 4’te ise ek prompt olmadan da bu özellik çalışıyor. Örneğin bir URL verdiğinizde httpx ve beautifulsoup kullanarak sayfayı tarayıp bağlantı listesini CSV olarak döndüren kodu hemen üretiyor. ilgili yazı Claude betik çıktısı
    • Bu hileyi Marimo.io notebook’unun app-mode özelliğiyle birlikte kullanıyorum. Sadece uv kuruluysa, anında tepkisel ve yeniden üretilebilir uygulamaları çok az hazırlıkla başkalarına kolayca verebiliyorsunuz. Gerçekten harika bir kombinasyon.
    • Artık küçük betikleri bile anlık olarak hemen çalıştırma alışkanlığı edindim. Ortam ya da bağımlılık yönetimini düşünmek gerekmeyince çok daha rahat oluyor. the little scripter ile ilgili yazı, ilgili YouTube videosu, ez-mcp GitHub
    • Örneği yanlış okuduğuma dair bir düzeltme: proje bağlamında uv add --script ile yalnızca uv add aynı şey değil. Ayrıca resmî belgelerde run --with ya 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 pip kullanmak için bir neden yok ve yalnızca Python kullanıyorsanız condaya da ihtiyaç kalmıyor.

    • pyenv ve poetry de 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ı.

    • Ancak sonradan fark ettim ki ruff, 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.

    #!/usr/bin/env -S uv --quiet run --script
    # /// script
    # requires-python = ">=3.13"
    # dependencies = [
    #   "python-dateutil",
    # ]
    # ///
    #
    # [python script that needs dateutil]  
    
    • shebang satırını akılda tutmak çok zor; keşke sadece #!/usr/bin/env uvx gibi daha basit bir biçim olsa. Her seferinde aratmam gerekiyor.
  • O kadar memnunum ki pip/twine/requirements.txt dü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 sadece uv build ve uv publish ile iki satıra indirebiliyorum. Bağımlılıkları almak kolaylaşıyor, ana bağımlılıkları da tek bakışta görebiliyorsunuz; her şeyi requirements.txt içinde birbirine karıştırma derdi ortadan kalkıyor.