- 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-standalonedestek 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
pipvevenvgibi 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ı,
PATHsorunları 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
pipvevenvarayü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 mevcutpip·venviş 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
tkinterda 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ış
PATHortaya çı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 initvarsayılan olarak.venv,pyproject.toml, Python için.gitignoreiçeren bir git deposu,README.mdvehello.pyoluşturur- Kök bağımlılıklar
pyproject.tomliçinde tanımlanabilir ya dauv addile eklenebilir uv removedepoyu doğru şekilde temizleruv lock --upgrade-package <package>==<version>paketleri tek tek ve dikkatli biçimde yükseltmeyi sağlaruv buildprojeden.whlpaketi üretir, ancak uv projenin derlenebilir olmasını zorunlu tutmazuv 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,poetrygibi 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’ınrequests>=2.22.0’a bağımlı olduğunu ancak projeninrequests==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 eklemezuvx --with pendulum -p 3.13t python, yeni Python No-GIL derlemesini indirip kurar, geçici bir sanal ortam oluşturur,pendulumkurar ve ardından Python shell’i başlatıruvx, Python içinnpxbenzeri 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 freezekayıtları üzerine kurulu olduğu bir vakada uv çalışmadı
- 15 yıllık bir kod tabanının yeni Python 3’e taşındığı ve temizlenmemiş
- uv’nin yerleşik Python kurulumu,
python-build-standaloneile 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ş olabilirpyperformanceö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 cleanile silinebilir, ancak bu durumda hız avantajı kaybolurpipten 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
uvxveuv tool install,pipxgibi araçları proje dışına kurmaya yönlendiriryt-dlp,httpiegibi bağımsız araçlar için uygundurmypygibi 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
pipvevenvkullanı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.