1 puan yazan GN⁺ 2025-02-19 | Henüz yorum yok. | WhatsApp'ta paylaş
  • Bir yıl boyunca farklı müşteri ortamlarında kullanılan uv, Python projelerine başlamayı ve bağımlılık yönetimini büyük ölçüde basitleştiriyor; mümkün olan ortamlarda önce denenmeye değer
  • Mevcut pip/venv iş akışını büyük ölçüde korurken daha hızlı ve daha kararlı çalıştığı için geçiş maliyeti nispeten düşük
  • Python kurulumu, sanal ortam, kilit dosyası, çalıştırma, derleme ve geçici araç çalıştırmayı tek bir araçta birleştirerek proje deneme maliyetini ciddi biçimde azaltıyor
  • Ancak eski bağımlılık çözümleme hataları, python-build-standalone destek kapsamı, 20 GB’tan fazla büyüyebilen önbellek, kurumsal güvenlik politikaları ve CLI bariyeri gerçekçi kısıtlar
  • Python ile çalışmaya devam ediyorsanız uv kullansanız bile pip ve venv bilmeniz gerekir; uv’nin izin verilmediği ya da uygun olmadığı ortamlara hazırlıklı olmak gerekir

Python projelerinin zorlaşmaya başladığı nokta

  • Python’daki en büyük sorunun kökü, Python’ın kendisini hazırlama ve yeni bir projeye başlama aşamasındaki önyükleme sürecinde yatıyor
  • Sonrasında yaşanan paketleme sorunlarının önemli bir kısmı da bağımlılık kurulumu ya da paket derlemenin kendisinden çok ilk Python kurulumu ve proje yapılandırmasından kaynaklanıyor
  • Python kurulum yöntemleri işletim sistemine göre değişiyor; varsayılanlar ve tuzaklar da birbirinden farklı
  • Yeni başlayanlara uygun bir dil olmasına rağmen Python kurmak için önceden bilinmesi gereken çok şey var
  • Python; öğrenciler, veri bilimciler, yapay zeka geliştiricileri, web geliştiricileri, sistem yöneticileri, biyologlar, coğrafyacılar, eklenti geliştiricileri gibi çok çeşitli gruplar tarafından kullanılıyor
  • Şirket Windows makineleri, Debian kişisel dizüstüleri, üniversiteler, kamu kurumları, startup’lar, ordu, araştırma laboratuvarları ve büyük şirketler gibi çalışma ortamları çok farklı olduğundan tek bir öğreticiyle herkesi kapsamak zor
  • PATH, PYTHONPATH, birden fazla Python sürümünün birlikte bulunması, Linux’taki isteğe bağlı paketler, sistem bağımlılığı olarak Python ve derlenen eklentilerin popülerliği karmaşıklığı artırıyor
  • İyi bir Python proje yönetim aracı şu koşulları karşılamalı
    • Python önyüklemesinden bağımsız çalışmalı
    • Platformlar ve durumlar arasında Python kurulumunu ve çalıştırmayı birleştirmeli
    • pip ve venv gibi temel araçlarla köprü görevi görmeli
    • Güçlü bir bağımlılık çözücüsüne sahip olmalı
    • Basit kurulumları kolayca halletmeli, başka işletim sistemlerinde kilitlenmiş bağımlılıkları kurmak gibi karmaşık işleri de yapabilmeli
    • Kurulumu ve kullanımı kolay olmalı; yığının önemli bir kısmını emanet edecek kadar güvenilir olmalı

uv’nin önyükleme yaklaşımı

  • uv, Python’dan tamamen bağımsız biçimde kurulup güncellenir; uv kurulumu ile Python kurulumu birbirini etkilemez
  • Python’ın önyükleme sorunları, PATH sorunları ve import sorunları uv’nin kendisini etkilemez
  • Kurulum konumunun sistemde mi sanal ortamda mı olacağı, yeni anahtar sözcüklerin ya da kaldırmaların uv’yi nasıl etkileyeceği gibi kafa karışıklıkları azalır
  • uv önce pip ve venv arayüzlerini sunarak mevcut projeler, araçlar ve düşünme biçimleriyle birlikte kullanılabilmesini sağladı
    • Bu, mevcut topluluk ve eski kodlar düşünülerek yapılmış bir tercih
    • Kullanıcılar uv run, uv add, uvx öğrenmeden de mevcut pip·venv iş akışındaymış gibi kullanabilir
    • Temel işlerde sağlanan hız ve güvenilirlik bile geçiş için yeterli neden oluşturur
  • Python kurulum özelliği de sunar
    • Tüm işletim sistemlerinde birleşik bir yöntemle kurar
    • Yönetici yetkisi gerektirmez
    • Sistem Python’ından bağımsız çalışır
    • Birden fazla sürüm kurulduğunda çakışma yaşanmaz
    • Aynı standart kütüphaneyi sunar ve tkinter da dahildir
    • Pypy, No-GIL ve TCO sürümlerini de içerir
    • Shim, derleme ya da mantıksız varsayılanlar olmadan çalışır

Python kurulum deneyimi ve python-build-standalone

  • uv python install pypy3.8 örneği Python 3.8.16’yı 2,71 saniyede kuruyor
  • Aynı yöntem Mac veya Windows’ta da çalıştırılabilir
  • Tcl, OpenSSL, Gzip ile ilgili eksik paketler, başka Python kurulum kaynaklarıyla çakışmalar, işletim sistemine göre değişen paradigmalar, eksik komutlar ya da yanlış yapılandırılmış PATH ortaya çıkmaz
  • uv’nin Python kurulumu python-build-standalone kullanır; Astral bu projeyi devralıp iyileştiriyor
  • Astral bu kazanımları cPython üst projesine geri kazandırmaya çalışıyor ve komşu açık kaynak projelerine de katkıda bulundu

Proje yönetimi özellikleri

  • uv init varsayılan olarak .venv, pyproject.toml, Python için .gitignore içeren bir git deposu, README.md ve hello.py oluşturur
  • Kök bağımlılıklar pyproject.toml içinde tanımlanabilir ya da uv add ile eklenebilir
  • uv remove depoyu doğru şekilde temizler
  • uv lock --upgrade-package <package>==<version> paketleri tek tek ve dikkatli biçimde yükseltmeyi sağlar
  • uv build projeden .whl paketi üretir, ancak uv projenin derlenebilir olmasını zorunlu tutmaz
  • uv run, sanal ortam etkinleştirilmemiş olsa bile komutu onun içinde çalıştırır
    • Kullanıcının sanal ortamın varlığını ya da etkinleştirme kavramını bilmesi gerekmez
  • Bu komutlar kilit dosyasını otomatik ve şeffaf biçimde günceller
    • uv hızlı olduğu için güncellemenin gerçekleştiği neredeyse hissedilmez
    • Kullanıcının kilit dosyasının ne olduğunu bilmesi gerekmez
  • Kilit dosyası çapraz platformdur; Windows’ta geliştirip Linux’a dağıtım yapabilirsiniz

Performans, kararlılık ve hata mesajları

  • uv’nin performansı, bağımlılık kurulumu ve proje denemeleri için gereken maliyeti düşürür
  • Hızlıca yeniden başlayabildiğiniz için birçok denemeyi yük oluşturmadan tekrarlayabilirsiniz
  • pyenv, pipenv, poetry gibi araçlar çeşitli ortamlarda stack trace vererek bozulabiliyordu; uv ise çok sağlam çalıştı
  • Astral’ın kalite tarafında özellikle üç nokta öne çıkıyor
    • Hata düzeltmeleri hızlı ve geri bildirimler ile raporlara duyarlı
    • Güçlü bir test kültürü var; bağımlılık çözümleme test paketi ayrı bir paket olarak sunuluyor
    • Hata mesajları çok iyi
  • uv add httpie==2 örneği, httpie==2.0.0’ın requests>=2.22.0’a bağımlı olduğunu ancak projenin requests==1’e bağımlı olması nedeniyle gereksinimlerin karşılanamaz hale geldiğini adım adım gösteriyor
  • Bağımlılık çözümleme hata mesajlarında pubgrub’ın etkisi var, ancak uv genelindeki hata mesajları da aynı yönde ilerliyor
  • Eğitim ortamında uv kullanıldığında öğrenciler fazla müdahale gerektirmeden üretken biçimde çalışabildi; diğer araçlarda böyle bir deneyim yaşanmadı
  • Yeni profesyonel projeler uv’nin avantajlarını kolayca elde etti, ancak eski projelerde engelleyici unsurlar ortaya çıkabilir

uvx ve yeni kullanım biçimi

  • uv, Python ve bağımlılıkların hazırlanması ile yalıtılmasını güçlü ve hızlı temel bileşenler olarak sunar
  • Önceden Python ve bağımlılık hazırlığı yavaş ve kırılgan bir kısıtken, uv’de iş akışını ayarlayan bir özellik gibi ele alınabilir
  • uv run --with jupyter jupyter notebook, mevcut projede Jupyter’ı çalıştırır ancak Jupyter’ı ve bağımlılıklarını projeye eklemez
  • uvx --with pendulum -p 3.13t python, yeni Python No-GIL derlemesini indirip kurar, geçici bir sanal ortam oluşturur, pendulum kurar ve ardından Python shell’i başlatır
  • uvx, Python için npx benzeri bir araçtır; pipx’in düzgün yapılmış hali olarak görülebilir
  • Satır içi bağımlılık desteği, küçük Python betiklerinde bağımlılık kullanma biçimini değiştirir
    • Önceden küçük betiklerde bağımlılıklardan kaçınmak ya da zahmetli dolambaçlı çözümler kullanmak gerekiyordu
    • Artık bağımlılıklar hızlı, şeffaf ve kendi kendini açıklayan bir yöntemle kullanılabiliyor
  • Bu özellikler dayatılmadığı için kullanıcılar ihtiyaç duyduklarında keşfedip benimseyebilir

uv’nin başarısız olduğu veya rahatsızlık verdiği noktalar

  • uv gerçek paketleme sorunlarını sizin yerinize çözemez
    • Yanlış sürüm marker’ları, wheel eksikliği, isim çakışmaları gibi sorunlar uv’nin kontrolü dışındadır
    • Bu sorunlar PyPI’daki veri kalitesinin içinde yer alır
    • uv’de paketleme sorunlarının azalmasının nedeni diğer kısımları doğru ele almasıdır
  • Daha katı bağımlılık çözücüsü nedeniyle eski pip’in gevşek çözümlemesine bel bağlayan eski projelerin sanal ortamları bozulabilir
    • 15 yıllık bir kod tabanının yeni Python 3’e taşındığı ve temizlenmemiş pip freeze kayıtları üzerine kurulu olduğu bir vakada uv çalışmadı
  • uv’nin yerleşik Python kurulumu, python-build-standalone ile derlenmiş sürümlerle sınırlıdır
    • python.org kurucusu, deadsnake ve pyenv ile daha fazla Python sürümü kurulabilir
    • Belirli bir Python sürümüne mutlaka ihtiyaç duyan eski projeler için bu sorun olabilir
    • uv dışarıdan kurulmuş Python ile de iyi çalıştığı için bu tamamen engelleyici değildir
  • python-build-standalone çalıştırılabilir dosyaları biraz yavaş olabilir
    • pyperformance ölçütüne göre uv’nin 3.10’u Ubuntu’nun Python’ından %3 daha yavaştı
    • Donanım optimizasyonuyla derlenmiş Python kullanmak isteyebilirsiniz
  • Önbellek alanı da bir dezavantaj olabilir
    • 1 yıllık kullanım sonrası uv önbelleği diskte 20 GB’tan fazla yer kapladı
    • uv cache clean ile silinebilir, ancak bu durumda hız avantajı kaybolur
    • pipten farklı olarak paketleri hard link ile bağlayıp yalnızca bir kez yer kaplattığı için, önceki birçok sanal ortamın toplamından daha az yer kaplıyor olması da mümkündür
  • $UV_PYTHON’ın varsayılan sürüm vermek yerine Python sürümünü zorlaması gibi bir rahatsızlık vardı; ilgili issue üzerinde çalışılıyor
  • uv açık kaynak olsa da ticari bir şirket olan Astral’ın ürünüdür
    • Astral henüz kârlı değil ve ticari ürünü de yayımlanmadı
    • Yığının önemli bir kısmını emanet etmeden önce temkinli olunması gerektiğini düşünenler de var
    • Buna karşılık uv’ye geçiş maliyetinin ve uv’den çıkış maliyetinin düşük olduğu da söylenebilir
  • En büyük sınırlama kurumsal benimsemedir
    • Güvenliği sıkı ve kilitli büyük kurumsal ortamlarda yeni bağımlılık kurmak çok zordur
    • BT güvenlik birimleri makinelerde neler yapılabileceğini kontrol ediyorsa uv kurulumuna izin vermeyebilir
    • Kararlı sürüme ulaşıp çeşitli gereksinimleri karşılayana kadar kurumsal ortamlarda kısıtlar büyüktür
  • CLI da bir bariyerdir
    • Komut satırına alışık olmayan Python kullanıcıları, özellikle Windows kullanıcıları az değildir
    • Anaconda’nın GUI’ye sahip olmasının nedenlerinden biri de budur
    • Tamamen yeni başlayanlar için CLI aracı şartı giriş bariyeri oluşturur
  • uvx ve uv tool install, pipx gibi araçları proje dışına kurmaya yönlendirir
    • yt-dlp, httpie gibi bağımsız araçlar için uygundur
    • mypy gibi Python sürümüne ya da kütüphane sözdizimine duyarlı geliştirme araçları, projeden farklı bir Python sürümüne kurulup sorun çıkarabilir

uv’den kaçınılması gereken durumlar

  • uv kullanılmaması gereken beş durum vardır
    • uv’nin bağımlılık çözümlemesiyle çalışmayan eski bir projeniz var ve geçiş için temizleme yapacak kapasiteniz yok ya da bunu istemiyorsunuz
    • Kurumsal ortam uv kullanımına izin vermiyor
    • Henüz kararlı sürüm olmaması, Astral’ın ticari ürününün çıkmamış olması ya da Rust katkıcı havuzunun küçük olması nedeniyle güvenmiyorsunuz
    • uv’nin sunmadığı belirli bir Python sürümüne ihtiyacınız var ve uv’yi dışarıdan kurulmuş Python ile birlikte kullanmak istemiyorsunuz
    • Ekip için CLI çok büyük bir engel
  • Güven meselesi ve belirli Python sürümü konusu teknik engelden çok bir tercih niteliğinde
  • Kurumsal ortam kısıtları konusunda kullanıcının yapabileceği çok şey yok
  • Pratikte dikkate alınması gereken temel noktalar eski bağımlılıklar ve CLI bariyeri
  • Tavsiye basit
    • Her zaman önce uv’yi deneyin
    • Çalışmazsa eski yönteme dönün ya da bir geçici çözüm bulun
  • CLI sorun oluyorsa Python hazırlığı için python.org kurucusu kullanılabilir, uv’yi saran IDE eklentileri önerilebilir
  • Programlama yapabilen kişilerin uv kullanmak için gereken temel komut satırı bilgilerini öğrenme ihtimali yüksektir

Gelecekteki konumu

  • Kurumsal ortamlarda kullanılabilmesi için v1’e kadar kapatılması gereken bir mesafe var; şirketlerde sık güncelleme yapmak zor olduğundan kararlı sürüm önemlidir
  • pex/shiv’e alternatif olabilecek paketleme özelliğinin ve build backend’in eklenmesi beklenebilir
  • Uygulamalar için kurucu oluşturma özelliği mantıksal sonuç gibi görünse de sadece imzalama bile düzgün ele alınması zor olduğundan çok daha karmaşıktır
  • task desteği netleştiğinde kişisel ihtiyaçlar açısından özellikler yeterli hale gelecek
  • Python mesleğinizse pip ve venv kullanımını hâlâ öğrenmelisiniz
    • Çünkü bir gün uv kullanamayacağınız bir durumla karşılaşabilirsiniz
  • Sonuç olarak uv, maliyeti düşük ve getirisi yüksek olduğu için kullanılabildiği ortamlarda önce denenmeye değer bir Pareto çözümüdür

Henüz yorum yok.

Henüz yorum yok.