29 puan yazan GN⁺ 2025-10-30 | 7 yorum | WhatsApp'ta paylaş
  • Python kurulumu ve sanal ortam yönetimini kökten sadeleştiren uv, Python ekosistemindeki karmaşık ortam yapılandırma sorununu çözüyor
  • Rust ile yazıldığı için hem hız hem de kararlılık sunuyor; Python sürümü kurulumu, paket yönetimi ve bağımlılık çözümlemeyi tek bir komutla gerçekleştiriyor
  • pyproject.toml dosyasını otomatik algılayarak proje ortamını kuruyor ve uv sync ile ekipler arasında tamamen aynı geliştirme ortamını yeniden oluşturabiliyor
  • uv run, uv add, uvx gibi komutlarla sanal ortamı etkinleştirmeden çalıştırma, paket ekleme ve tek seferlik çalıştırma mümkün oluyor
  • Python kurulumu ve çalıştırmada tutarlılık sağlayarak uv, geliştirici üretkenliği ve iş birliği verimliliğini büyük ölçüde artıran bir dönüm noktası olarak değerlendiriliyor

uv genel bakış

  • uv, Astral tarafından geliştirilen ücretsiz ve açık kaynaklı bir Python yönetim aracı; amacı karmaşık ortam yapılandırma sürecini sadeleştirmek
    • Astral, Ruff gibi Python geliştirme araçlarını üreten ekip
    • uv; Python sürümü kurulumu, paket kurulumu, sanal ortam yönetimi ve bağımlılık çözümleme desteği sunuyor ve hız açısından mevcut araçlardan çok daha hızlı
  • Rust ile geliştirildiği için performansı çok yüksek; macOS, Linux, Windows dahil neredeyse tüm platformlarda çalışıyor

Kurulum ve temel kullanım

Proje ortamı yönetimi

  • uv, her Python projesi için sanal ortamı otomatik olarak yönetiyor ve pyproject.toml dosyasını algılayarak ortamı yapılandırıyor
    • pyproject.toml içinde Python sürümü, bağımlılık listesi, proje adı ve sürümü gibi bilgiler tanımlanıyor
    • Örnek:
      [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"]  
      
    • Bu yaklaşım, pip'e kıyasla daha açık ve standartlaştırılmış bir ortam tanımı sunuyor

Yeni proje oluşturma

  • uv init komutuyla yeni bir proje kolayca oluşturulabiliyor
    • pyproject.toml, README.md gibi gerekli dosyaları otomatik olarak oluşturuyor
    • --bare, --package gibi seçeneklerle farklı başlatma biçimlerini destekliyor
    • Ayrıntılı seçenekler uv init --help ile görülebilir

Mevcut projeyi senkronize etme

  • Projede pyproject.toml varsa uv sync komutuyla hemen kullanılabiliyor
    • Python sürümünü otomatik kuruyor
    • .venv dizininde sanal ortam oluşturuyor
    • Tüm paketlerin tam sürüm bilgilerini kaydeden uv.lock dosyasını oluşturuyor
  • uv run komutu, ortamı etkinleştirmeden Python betiklerini çalıştırmayı sağlıyor
    • Örnek: uv run myscript.py, uv run jupyter lab

Bağımlılık ve Python sürümü yönetimi

  • uv add numpy>=2.0 komutuyla bağımlılıkları otomatik eklemek ve yönetmek mümkün
    • pyproject.toml dosyasını doğrudan düzenlemek gerekmiyor
  • uv python pin 3.12.9 komutuyla belirli bir Python sürümü sabitlenebiliyor; bu da ortamın yeniden üretilebilirliğini garanti ediyor

uvx: hızlı tek seferlik çalıştırma

  • uvx, ayrı bir ortam kurulumu olmadan araçları doğrudan çalıştırmaya yarayan bir komut
    • Örnek: uvx ruff, uvx jupyter lab, uvx --with pandas,pyarrow ipython
    • Önbellek tabanlı olduğu için yeniden çalıştırmalarda son derece hızlı ve deneysel işler için faydalı
  • Bu sayede geliştiriciler, sanal ortama bağlı kalmadan geçici çalıştırma ortamlarını kolayca kurabiliyor

Eğer bu size hâlâ ikna edici gelmiyorsa: kişisel not

  • The Astrosky Ecosystem geliştirilirken birden fazla işletim sisteminde Python ortamını standartlaştırmak için uv devreye alındı
    • Tüm geliştiricilerin ve sunucuların tamamen aynı Python kurulumu ve bağımlılık sürümlerini kullanmasına yardımcı oldu
    • GitHub Actions ve üretim sunucusu ortamlarında da Python ortamını uv yönetiyor
  • uv sayesinde kurulum ve test ortamı uyumsuzluğu sorunları ortadan kalktı, geliştiriciler arası iş birliği basitleşti

Sonuç

  • uv, Python kurulum ve yönetimindeki karmaşıklığı temelden ortadan kaldırıyor ve geliştiricilerin aynı ortamda istikrarlı biçimde birlikte çalışmasını sağlıyor
  • Hızı ve Rust tabanlı kararlılığı sayesinde uv, “son 10 yılda Python ekosisteminde yaşanan en büyük yenilik” olarak değerlendiriliyor

7 yorum

 
kkksss 2025-11-06

pdm'in uv ile neredeyse çok benzer olduğunu düşünüyordum ama pdm ile ilgili pek fazla konuşulmuyor gibi.

 
yuntae 2025-10-30

uv ile ilgili gönderilerin içeriği artık pek fazla değişmiyor gibi görünüyor.

 
pmc7777 2025-10-30

Maven ve Gradle da öyle..

 
GN⁺ 2025-10-30
Hacker News görüşü
  • Eskiden Python araç zincirinin yeterli olduğu söylenirdi; şimdi Python geliştiricilerinin npm, cargo ya da bundler gibi lockfile tabanlı ekosistemleri deneyimleyip bunun avantajlarını fark ettiğini görmek insanı rahatlatıyor
    npm'in de sorunları var ama tutarlı kurulum ve lockfile gerçekten harika bir fikir

    • Başkasının Python projesini çalıştırmak zorunda kalmak kadar korkutucu çok az şey var
      Ortam yönetiminin bu kadar uzun süre zahmetli kalmış olması şaşırtıcı
    • Bunun neden bu kadar uzun sürdüğünü merak ediyorum
      Sayısız girişimin başarısız olmasının sebebi sadece paket yönetiminin zorluğu muydu, yoksa VC yatırımı mı gerekiyordu, emin değilim
    • Eskiden beri pip freeze > requirements.txt ve pip install -r requirements.txt kullanıyordum
      Sürüm aralığı yazmazsanız requirements.txt fiilen lockfile işlevi görüyor
      O yüzden son dönemdeki ‘resmî lockfile’ heyecanı bana biraz abartılı geliyor
    • npm de bir süre lockfile olmadan yaşadı
      yarn çıktıktan sonra npm'in ciddi şekilde iyileştiğini düşünüyorum
    • 1998'den beri web geliştiriyorum ve bence PNPM, npm'den çok daha iyi
      Daha hızlı, daha verimli ve deterministik
      Ayrıntılar için pnpm.io/motivation
  • UV script ile MCP istemci/sunucularını tek dosya olarak dağıtmak mümkün oldu
    İlgili yazı: MCP server in a file

  • Script'lerin çoğu tek dosya olduğundan, en üste şu satırı eklemek hayatı çok daha basit hale getiriyor
    #!/usr/bin/env -S uv run --script
    Böylece script bağımsız bir çalıştırılabilir gibi davranıyor ve uv gerekli modülleri otomatik kuruyor

    • Güvenlik açısından bakınca bu yaklaşım biraz riskli
      Çünkü script yazarı kötü amaçlı bağımlılıkları gizleyebilir
      Bir whitelist özelliği güzel olurdu
    • Bugünün tarihi temel alınarak maksimum yayın tarihi bayrağı ile lockfile olmadan sürüm sabitlemek mümkün
      Ama bazı paketlerde yayın tarihi algılanamıyor (ör. yaml)
    • Çalıştırmak için uv kurulu olmalı; yani tamamen standalone değil
    • /usr/bin/env -S desteği gerekli ve bağımlılık adları olarak uv pip install komutunda kullanılan dağıtım paket adları yazılmalı
      Bu, PEP 723 standardı; pipx da destekliyor
    • İnternet bağlantısı gerekiyor ve depo durumuna göre farklı sürümler kurulabilir
  • uv kullanmadan önce Rust'a ilgim yoktu ama uv sayesinde performansa duyarlı kodları Rust'a taşımaya başladım
    conda'nın tamamen ortadan kalkmasını isterdim. ML kümelerinde conda ortamları çok şişiyor ve yeniden üretilebilirlik de düşük oluyor

    • conda alternatifi olarak Rust tabanlı pixi önerildi. uv'nin PyPI çözücüsünü yeniden kullanıyor
    • conda, bağımlılıklar sabitlenirse yeniden üretilebilirlik sağlıyor ama derlemeleri yavaş
    • ML kümesi kullanılıyorsa containerization yapıldığı için conda'ya gerek olmadığını düşünüyorum
    • uv ile CUDA bağımlılıklarının nasıl yönetildiğini merak ediyorum
    • Büyük ölçekli ML bağımlılık yönetimi için açık kaynak yaklaşımına dair Metaflow docs ve Fast Bakery blogu bakılabilir
  • Eskiden pyenv + venv + pip + pipx kombinasyonundan oldukça memnundum ama uv ile

    • bağımlılık çözümleme hızı çok yüksek
    • uv run, uv add gibi komutlarla kullanım deneyimi çok daha iyi
    • birden fazla araç tek yerde birleşmiş durumda
    • Python kurulumu da kolaylaşmış oldu
  • Ortamı etkinleştirmek yerine komutun başına uv koymak çok daha rahat
    Python sürüm yönetimi de kolaylaşıyor ve proje bazında batteries-included hissi veriyor
    Uzun vadede ne kadar stabil olur bilmiyorum ama yeni projelerde varsayılan olarak kullanıyorum

    • Ortamı etkinleştirmek aslında sadece PATH ve prompt'u ayarlamak demek
      uv'nin ortamı otomatik algılamasından hoşlanmayanlar da var
      Python sürüm yönetiminin değerini çok anlamıyorum ama uv ile ortamı yeniden oluşturmak çok daha hızlı
    • Başına uv koyunca komutlar stateless şekilde çalışıyor; bu da ekip çalışmasında rahatlık sağlıyor
    • mise ile birlikte otomatik etkinleştirme kullanılsa da uv öneki yine de faydalı
    • uv'nin felsefesi venv'nin tek kullanımlık olması
      Sorun çıkarsa .venv silinip yeniden oluşturulabilir
    • Aslında bu tür ortam ayarlarının sadece “çalışması gereken” şeyler olması lazım
  • Bu blog yazısı benim deneyimimle neredeyse tamamen örtüşüyor
    Sürtünme azaldı ve işler basitleşti
    Python topluluğunun uv'yi varsayılan araç olarak benimsemesini isterim

  • Rust tabanlı araçlar geri bildirim hızını tamamen değiştirdi
    Yine de Astral'ın nasıl gelir elde ettiğini merak ediyorum. Yatırım aldı ama ücretli ürünü yok

    • Astral'ın gelir modeli, açık kaynak araçlarla entegre kurumsal yazılım satmak
      Örneğin şirket içi paket kayıt deposu
      İlgili röportaj: Charlie Marsh röportajı
    • Ücretli hizmete dönüşme ihtimali olan ürünlerden biri Pyx
    • Conda bile sadece “güvenliği güçlendirilmiş paketlere” erişim satarak para kazanıyor
      Python geliştiricisi sayısı 10 milyonsa uv'nin de gayet iyi gelir elde etmesi mümkün
  • Ben şahsen tip anotasyonları ve GIL'in kaldırılmasının uv'den daha önemli olduğunu düşünüyorum
    uv hâlâ erken aşamada ve bazı rahatsız edici yanları var. Sonuçta sadece bir başka paket yöneticisi

    • İnsanların uv'yi övmesinin bir kısmı, aslında pip ve venv'in artık standartlaştırılmış PEP'ler sayesinde iyileşmiş olmasından kaynaklanıyor
      pip'in yeni resolver'ı ve wheel dağıtımlarının artması bunda büyük rol oynadı
      İlgili yazı: Wheels are faster for pure Python
    • Dil düzeyinde GIL'in kaldırılması daha büyük bir değişim olurdu ama pratikte gerçekten faydalı kullanım örnekleri henüz çok fazla değil
    • Type hint'ler zaten 2015'te gelmiş eski bir özellik
    • uv basit bir paket yöneticisinden ibaret değil; dağıtımı basitleştirme konusunda büyük değer sunuyor
      Rust ile yazılmış olması da ilginç. LLVM gibi başka dilleri de destekleyen bir yapısı var
      Son kullanıcı açısından uv çok daha iyi; bakım yapanlar için sorun çıkarıyorsa geri bildirim verilebilir
    • Tip anotasyonları dokümantasyon için iyi ama pratik faydası sınırlı
      strict mode gelirse performans artışı da mümkün olabilir ama bu dilin felsefesiyle çelişir
      Yine de conda ortadan kalkarsa uv'ye geçmeyi düşünürüm
  • Ben uv'yi sevmiyorum

    • Aynı anda çok fazla şey yapmaya çalışıyor: pip, pyenv, virtualenv, hatta ruff'ın yerini almak istiyor
    • Tam bir yerine geçme de değil çünkü uv pip kullanmak gerekiyor
    • Docker ile uyumu da zayıf
    • Yeni ortam değişkenlerinin çokluğu karmaşıklığı artırıyor
    • pyenv, virtualenv ve pip'in ayrı olması bana garip gelmiyor
      Ama pip ve venv de sık sık bozuluyor ve hata ayıklaması daha zor oluyor
    • Aslında pip, pyenv ve virtualenv hep birlikte kullanıldığı için birleşik bir araç mantıklı
      uv, ruff'ın yerini almıyor
      Ortam değişkenlerine de dokunmak gerekmiyor
    • uv pip, pip'i çağırmıyor; sadece uyumlu bir arayüz sunuyor
      Pratikte pip'in yerini alan uv oluyor
      Docker uyumluluğu derken tam olarak hangi sorunların kastedildiğini merak ediyorum
    • uv add, uv sync, uv run ile yönetmek çok daha ergonomik ve hızlı
      Ayrıntılı belge için uv dependencies concepts bakılabilir
    • Benim deneyimimde uv birden fazla rolü gayet iyi yerine getiriyor. Tam olarak ne tür sorunlar yaşadığını merak ediyorum
 
aer0700 2025-11-01

uv hızlı olduğu için güzel, ama keşke pip'i iyileştirme yönüne gidilseydi diye de düşünüyorum.

 
ztaka 2025-11-02

ML ve Web'de iyi kullanıyorum; umarım uv bir an önce sıkıcı bir teknolojiye dönüşür haha

 
doolayer 2025-10-30

Artık sadece requirements olup pyproject.toml olmayan repoları görünce demode geliyor gözüme haha;