- 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.tomldosyasını otomatik algılayarak proje ortamını kuruyor veuv syncile ekipler arasında tamamen aynı geliştirme ortamını yeniden oluşturabiliyoruv run,uv add,uvxgibi 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
- Kurulum son derece basit;
curlveya PowerShell ile tek satırlık komut yeterli- Linux/Mac:
curl -LsSf https://astral.sh/uv/install.sh | sh - Windows:
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
- Linux/Mac:
- Mevcut Python kurulumunu değiştirmediği için güvenle denenebilir
Proje ortamı yönetimi
- uv, her Python projesi için sanal ortamı otomatik olarak yönetiyor ve
pyproject.tomldosyasını algılayarak ortamı yapılandırıyorpyproject.tomliç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 initkomutuyla yeni bir proje kolayca oluşturulabiliyorpyproject.toml,README.mdgibi gerekli dosyaları otomatik olarak oluşturuyor--bare,--packagegibi seçeneklerle farklı başlatma biçimlerini destekliyor- Ayrıntılı seçenekler
uv init --helpile görülebilir
Mevcut projeyi senkronize etme
- Projede
pyproject.tomlvarsauv synckomutuyla hemen kullanılabiliyor- Python sürümünü otomatik kuruyor
.venvdizininde sanal ortam oluşturuyor- Tüm paketlerin tam sürüm bilgilerini kaydeden
uv.lockdosyasını oluşturuyor
uv runkomutu, ortamı etkinleştirmeden Python betiklerini çalıştırmayı sağlıyor- Örnek:
uv run myscript.py,uv run jupyter lab
- Örnek:
Bağımlılık ve Python sürümü yönetimi
uv add numpy>=2.0komutuyla bağımlılıkları otomatik eklemek ve yönetmek mümkünpyproject.tomldosyasını doğrudan düzenlemek gerekmiyor
uv python pin 3.12.9komutuyla 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ı
- Örnek:
- 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
pdm'inuvile neredeyse çok benzer olduğunu düşünüyordum amapdmile ilgili pek fazla konuşulmuyor gibi.uv ile ilgili gönderilerin içeriği artık pek fazla değişmiyor gibi görünüyor.
Maven ve Gradle da öyle..
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
Ortam yönetiminin bu kadar uzun süre zahmetli kalmış olması şaşırtıcı
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
pip freeze > requirements.txtvepip install -r requirements.txtkullanıyordumSü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
yarn çıktıktan sonra npm'in ciddi şekilde iyileştiğini düşünüyorum
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 --scriptBöylece script bağımsız bir çalıştırılabilir gibi davranıyor ve uv gerekli modülleri otomatik kuruyor
Çünkü script yazarı kötü amaçlı bağımlılıkları gizleyebilir
Bir whitelist özelliği güzel olurdu
Ama bazı paketlerde yayın tarihi algılanamıyor (ör. yaml)
/usr/bin/env -Sdesteği gerekli ve bağımlılık adları olarakuv pip installkomutunda kullanılan dağıtım paket adları yazılmalıBu, PEP 723 standardı; pipx da destekliyor
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
Eskiden pyenv + venv + pip + pipx kombinasyonundan oldukça memnundum ama uv ile
uv run,uv addgibi komutlarla kullanım deneyimi çok daha iyiOrtamı etkinleştirmek yerine komutun başına
uvkoymak çok daha rahatPython 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
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ı
uvkoyunca komutlar stateless şekilde çalışıyor; bu da ekip çalışmasında rahatlık sağlıyoruvöneki yine de faydalıSorun çıkarsa
.venvsilinip yeniden oluşturulabilirBu 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
Örneğin şirket içi paket kayıt deposu
İlgili röportaj: Charlie Marsh röportajı
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
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
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
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
uv pipkullanmak gerekiyorAma pip ve venv de sık sık bozuluyor ve hata ayıklaması daha zor oluyor
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 sunuyorPratikte pip'in yerini alan uv oluyor
Docker uyumluluğu derken tam olarak hangi sorunların kastedildiğini merak ediyorum
uv add,uv sync,uv runile yönetmek çok daha ergonomik ve hızlıAyrıntılı belge için uv dependencies concepts bakılabilir
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.ML ve Web'de iyi kullanıyorum; umarım uv bir an önce sıkıcı bir teknolojiye dönüşür haha
Artık sadece
requirementsoluppyproject.tomlolmayan repoları görünce demode geliyor gözüme haha;