
uv: Rust dilinde yazılmış son derece hızlı bir Python paket ve proje yöneticisi. Python uv
Python, dünya çapında milyonlarca geliştirici tarafından kullanılan güçlü ve esnek bir programlama dilidir. Ancak, Python projelerini yönetmek, özellikle bağımlılık yönetimi, sanal ortamlar ve farklı Python sürümleriyle çalışma gibi konularda zaman zaman karmaşık ve yavaş olabilir. İşte tam bu noktada, Rust programlama dilinde yazılmış, son derece hızlı ve çok yönlü bir araç olan uv devreye giriyor. Bu blog yazısında, uv’nin ne olduğunu, sunduğu temel özellikleri, nasıl kurulduğunu, projeler ve bağımlılıklar nasıl yönetildiğini, araç ve Python sürüm yönetimini, ayrıca eksik yönlerini detaylı bir şekilde ele alacağız. Amacımız, Python geliştiricilerinin uv ile tanışmasını sağlamak ve bu aracı projelerinde nasıl etkili bir şekilde kullanabileceklerini göstermektir.
uv Nedir?
uv, Rust dilinde yazılmış, Python paket ve proje yönetimi için tasarlanmış, yüksek performanslı bir araçtır. Geleneksel Python araçları olan pip
, pip-tools
, pipx
, poetry
, pyenv
, virtualenv
ve twine
gibi araçların işlevlerini tek bir çatı altında birleştirir. uv’nin temel amacı, Python geliştiricilerinin iş akışlarını hızlandırmak, bağımlılık yönetimini kolaylaştırmak ve sanal ortamlar ile Python sürümlerini etkin bir şekilde yönetmektir. Rust ile yazılmış olması, uv’nin pip
gibi araçlara kıyasla 10 ila 100 kat daha hızlı olmasını sağlar. Ayrıca, Astral tarafından desteklenen uv, popüler linter ve formatlayıcı Ruff‘un geliştiricileri tarafından yaratılmıştır.
uv, yalnızca bir paket yöneticisi değil, aynı zamanda proje başlatma, bağımlılık kilitleme, sanal ortam oluşturma, komut satırı araçları çalıştırma ve Python sürümlerini yönetme gibi geniş bir yelpazede işlev sunar. Bu çok yönlülük, uv’yi Python ekosisteminde birleştirici bir çözüm haline getirir. Ayrıca, mevcut iş akışlarınızı değiştirmeden uv’ye geçiş yapabilir ve hız avantajlarından hemen yararlanabilirsiniz.
Python uv’nin Temel Özellikleri
uv, Python geliştiricilerinin ihtiyaç duyduğu birçok özelliği tek bir araçta sunar. İşte uv’nin öne çıkan temel özellikleri:
- Hızlı Bağımlılık Kurulumu: uv, büyük bağımlılık ağaçlarını bile saniyeler içinde kurabilir. Rust ile yazılmış olması, bağımlılık çözümleme ve kurulum süreçlerini inanılmaz derecede hızlandırır.
- Sanal Ortam Yönetimi: Sanal ortamları otomatik olarak oluşturur ve yönetir, böylece projeler arasında bağımlılık çakışmalarını önler.
- Python Sürüm Yönetimi: Birden fazla Python sürümünü kolayca yükleyip geçiş yapmayı sağlar. İhtiyacınız olan sürüm sistemde yoksa, uv bunu otomatik olarak indirir ve kurar.
- Proje Başlatma:
uv init
komutuyla, bir Python projesini hızlıca başlatabilir,pyproject.toml
,.gitignore
, ve temel bir Python dosyası gibi gerekli dosyaları otomatik olarak oluşturabilirsiniz. - Bağımlılık Yönetimi: Bağımlılıkları eklemek, güncellemek, kaldırmak ve kilitlemek için kullanıcı dostu komutlar sunar.
uv.lock
dosyasıyla ortamların tekrarlanabilirliğini garanti eder. - Paket Oluşturma ve Yayınlama: Python paketlerinizi oluşturup PyPI gibi paket depolarına yayınlamanızı sağlar.
- Geliştirici Araçları Desteği:
pytest
,Black
,Ruff
gibi geliştirici araçlarını kolayca çalıştırabilir ve yönetebilir.
Bu özellikler, uv’yi yalnızca bir paket yöneticisi olmaktan çıkarıp, Python projelerinin her aşamasında kullanılabilecek kapsamlı bir araç haline getirir.
uv Kurulumu
uv’yi sisteminize kurmak oldukça kolaydır ve birden fazla yöntemle gerçekleştirilebilir. İşte en yaygın kurulum yöntemleri:
1. Bağımsız Kurulum Aracı
uv, resmi bağımsız kurulum aracıyla hızlıca kurulabilir. Linux ve macOS için aşağıdaki komut kullanılabilir:
$ curl -LsSf https://astral.sh/uv/install.sh | sh
Windows kullanıcıları için ise PowerShell ile şu komut çalıştırılır:
PS> powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
Bu komutlar, uv’nin en son sürümünü indirir ve sisteminize kurar. Belirli bir sürümü kurmak isterseniz, URL’ye sürüm numarasını ekleyebilirsiniz (örneğin, https://astral.sh/uv/0.6.12/install.sh
).
2. Homebrew ile Kurulum (macOS)
macOS kullanıcıları, Homebrew kullanarak uv’yi kurabilir:
$ brew install uv
3. pip ile Kurulum
uv, PyPI üzerinden pip
ile de kurulabilir:
$ pip install uv
Bu yöntem, özellikle mevcut bir Python ortamında uv kullanmak isteyenler için uygundur.
4. Cargo ile Kurulum
Rust geliştiricileri, uv’yi Cargo üzerinden kurabilir:
$ cargo install uv --git https://github.com/astral-sh/uv
Kurulum tamamlandıktan sonra, uv --help
komutunu çalıştırarak uv’nin sunduğu komutları ve seçenekleri görebilirsiniz. Ayrıca, kabuk tamamlamayı etkinleştirmek için aşağıdaki komutu çalıştırabilirsiniz:
$ uv --generate-shell-completion zsh
Bu komutu .zshrc
veya .bashrc
dosyanıza ekleyerek, uv komutlarını yazarken otomatik tamamlamadan faydalanabilirsiniz.
Proje Başlatma ve Bağımlılık Yönetimi
uv ile yeni bir Python projesi başlatmak oldukça basittir. uv init
komutu, bir proje dizini oluşturur ve gerekli dosyaları otomatik olarak hazırlar. Örneğin:
$ uv init ornek-proje Initialized project `ornek-proje` at `/home/user/ornek-proje` $ cd ornek-proje
Bu komut, aşağıdaki dosyaları içeren bir proje dizini oluşturur:
- .git/: Yerel bir Git deposu başlatılır.
- .gitignore: Python projeleri için standart yoksayma kuralları içerir.
- .python-version: Kullanılacak Python sürümünü belirtir (örneğin, 3.12).
- hello.py: Basit bir “Merhaba Dünya” betiği.
- README.md: Boş bir README dosyası.
- pyproject.toml: Proje meta verilerini ve bağımlılıkları tanımlayan dosya.
Bağımlılık Ekleme ve Kaldırma
Projenize bağımlılık eklemek için uv add
komutunu kullanabilirsiniz:
$ uv add pandas
Bu komut, pandas
paketini projenize ekler, sanal ortamı oluşturur (eğer yoksa) ve pyproject.toml
dosyasını günceller. Birden fazla bağımlılık eklemek için:
$ uv add fastapi sqlalchemy
Bağımlılıkları kaldırmak da bir o kadar kolaydır:
$ uv remove sqlalchemy
Bu komut, sqlalchemy
paketini kaldırır ve pyproject.toml
dosyasını günceller.
Bağımlılık Kilitleme ve Senkronizasyon
uv, bağımlılıkları kilitlemek için uv.lock
dosyasını kullanır. Bu dosya, projenizin bağımlılıklarının tam sürüm bilgilerini içerir ve ortamların tekrarlanabilirliğini sağlar. Kilitleme işlemi için:
$ uv lock Resolved 2 packages in 0.33ms
Sanal ortamın bağımlılıklarla senkronize olduğundan emin olmak için:
$ uv sync Resolved 2 packages in 0.70ms Audited 1 package in 0.02ms
Bağımlılık Ağacı Görüntüleme
Projenizin bağımlılık ağacını görmek için uv tree
komutunu kullanabilirsiniz:
$ uv tree
Bu komut, örneğin fastapi
bağımlılığının pydantic
ve starlette
gibi alt bağımlılıklara sahip olduğunu gösterir. Bu, bağımlılıklar arasındaki ilişkileri anlamak için oldukça kullanışlıdır.
Çalışma Alanları (Workspaces)
uv, monorepo tarzı projeler için çalışma alanları (workspaces) desteğine sahiptir. Çalışma alanları, birden fazla Python projesinin aynı bağımlılıkları ve sanal ortamı paylaşmasını sağlar. Örneğin, bir dizinde uv init
komutunu çalıştırarak bir çalışma alanı oluşturabilirsiniz:
$ uv init baska-proje
Eğer bu komut, mevcut bir proje dizininde çalıştırılırsa, yeni proje çalışma alanına eklenir ve bağımlılıklar paylaşılır. Çalışma alanları, özellikle aynı bağımlılıklara sahip birden fazla mikro proje (örneğin, bulut fonksiyonları) için kullanışlıdır.
Bağımsız bir proje oluşturmak isterseniz, --no-workspace
bayrağını kullanabilirsiniz:
$ uv init bagimsiz-proje --no-workspace
Bu, yeni bir sanal ortam ve ayrı bir uv.lock
dosyası oluşturur.
Komut Satırı Araçları Yönetimi
Bazı Python paketleri, ruff
, pytest
veya black
gibi komut satırı araçları sunar. uv, bu araçları kolayca çalıştırmak ve yönetmek için uvx
(veya uv tool run
) ve uv tool install
komutlarını sağlar.
Araç Çalıştırma
Bir aracı geçici bir sanal ortamda çalıştırmak için:
$ uvx ruff check
Bu komut, ruff
paketini indirir, geçici bir sanal ortama kurar ve belirtilen komutu çalıştırır. Örneğin:
$ uvx pycowsay 'Merhaba Dünya!' Resolved 1 package in 167ms Installed 1 package in 9ms + pycowsay==0.0.0.2 """ ------------ < Merhaba Dünya! > ------------ \ ^__^ \ (oo)\_______ (__)\ )\/\ ||----w | || ||
Araç Kurma
Sık kullanılan bir aracı kalıcı olarak kurmak için:
$ uv tool install ruff Resolved 1 package in 6ms Installed 1 package in 2ms + ruff==0.5.4 Installed 1 executable: ruff
Kurulu araçları görmek için:
$ uv tool list
Araçları güncellemek veya kaldırmak da mümkündür:
$ uv tool upgrade ruff $ uv tool uninstall ruff
Python Sürüm Yönetimi
uv, birden fazla Python sürümünü kolayca yönetmenizi sağlar. Sistemdeki Python sürümlerini listelemek için:
$ uv python list
Belirli bir Python sürümünü kurmak için:
$ uv python install 3.12.0
Bir proje için belirli bir Python sürümünü sabitlemek isterseniz:
$ uv python pin 3.11 Pinned `.python-version` to `3.11`
uv, sistemde uygun bir Python sürümü bulamazsa, otomatik olarak indirir ve kurar. Bu, özellikle farklı projeler için farklı Python sürümleriyle çalışırken büyük kolaylık sağlar.
Paket Oluşturma ve Yayınlama
uv, Python paketlerinizi oluşturup PyPI gibi depolara yayınlamanızı destekler. Ancak, şu anda bir yapı sistemi tanımlamanız gerekiyor (örneğin, hatchling
). pyproject.toml
dosyasına aşağıdaki gibi bir yapı sistemi ekleyebilirsiniz:
[build-system] requires = ["hatchling"] build-backend = "hatchling.build"
Paket oluşturmak için:
$ uv build
Paketi PyPI’ye yayınlamak için:
$ uv publish
Eğer PyPI’de güvenilir yayıncı (trusted publisher) ayarını kullanıyorsanız, kimlik bilgisi gerekmeden yayınlama yapabilirsiniz.
uv’nin Eksik Yönleri
uv, etkileyici özelliklere sahip olsa da, henüz bazı eksiklikleri bulunmaktadır:
- Özel Betik Desteği: Node.js’deki
package.json
betiklerine benzer şekilde, uv’de özel betikler tanımlama özelliği bulunmuyor. Örneğin,uv test
gibi bir komutla testlerinizi çalıştırmak şu anda mümkün değil. - Yerleşik Yapı Sistemi: uv, paket oluşturmak için
hatchling
gibi üçüncü taraf bir yapı sistemine ihtiyaç duyar. Kendi yapı sistemini geliştirmesi, süreci daha da hızlandırabilir. - Kapsam Büyümesi Riski: uv, çok fazla özelliği tek bir araçta birleştirdiği için, ileride “her şeyi yapan bir mutfak lavabosu” aracına dönüşme riski taşıyabilir.
Bu eksikliklere rağmen, uv’nin geliştiricileri bu konular üzerinde aktif olarak çalışmaktadır. Örneğin, yerleşik bir yapı sistemi için açık bir GitHub konusu bulunmaktadır.
uv ile Geleneksel Araçların Karşılaştırması
uv, pip
ve virtualenv
gibi geleneksel araçlara kıyasla şu avantajları sunar:
- Hız: Rust tabanlı olması, bağımlılık çözümleme ve kurulum süreçlerini önemli ölçüde hızlandırır.
- Bütünleşiklik: Bağımlılık yönetimi, sanal ortam oluşturma ve Python sürüm yönetimi gibi işlevleri tek bir araçta birleştirir.
- Standart Dosya Kullanımı:
pyproject.toml
gibi standart dosyaları kullanır, bu dapoetry
gibi araçlara kıyasla daha geniş bir uyumluluk sağlar.
Ancak, mevcut iş akışlarınızı tamamen değiştirmeden uv’ye geçiş yapabilirsiniz. uv pip
komutları, mevcut pip
komutlarıyla uyumludur ve 10-100 kat daha hızlıdır.
UV 0.8.0 ile Gelen Önemli Yenilikler
UV, çok sık güncellenen (neredeyse haftalık yeni sürümler) ve sürekli gelişen bir araç. 0.8.0 sürümüyle birlikte gelen bazı önemli yenilikler şunlar:
1. Yeni Varsayılan Build Backend
Artık UV, paket inşa işlemlerinde varsayılan olarak kendi geliştirdiği uv build
backend’ini kullanıyor.
Önceden hatchling
gibi farklı backend’ler gerekiyordu.
Yeni backend:
- 10-30 kat daha hızlı build süreleri sunuyor.
- Metadata doğrulaması yaparak hatalı paketlemelerin önüne geçiyor.
- Modern Python standartlarıyla tam uyumlu.
- Çoğu proje için ek yapılandırma gerektirmeden çalışıyor.
2. Workspace Desteği
--workspace
özelliği ile birden fazla proje için tek bir sanal ortam ve bağımlılık seti kullanmak mümkün.
- Proje bazında
pyproject.toml
dosyaları ayrı kalırken, ortak bir lock dosyası kullanılıyor. - Bu sayede bağımlılıklar tutarlı kalıyor ve güncellemeler daha hızlı oluyor.
- Özellikle benzer bağımlılıklara sahip çok sayıda projeniz varsa ciddi kolaylık sağlıyor.
3. Genişleyen Python Versiyon ve Platform Desteği
- Python 3.14 beta sürümleri ve ARM64 Windows gibi platformlar için destek eklendi.
- Bu sayede UV, farklı ortamlarda çalışırken uyumluluk sorunlarını en aza indiriyor.
4. Performans İyileştirmeleri
Son sürümlerde pek çok küçük ama etkili optimizasyon yapıldı:
- Kod çözümleme işlemleri %10 daha hızlı.
lock
vesync
işlemleri artık cache paylaşımı ile daha verimli.- Daha hızlı cache key hesaplamaları.
5. Kalite ve Kullanım Kolaylığı İyileştirmeleri
- GPU farkındalığı (Intel ve AMD) ile optimize kurulumlar.
- Daha anlaşılır hata mesajları.
- Daha güvenli lock mekanizmaları.
Kısacası, UV 0.8.0 sürümüyle birlikte hem hız hem de kullanılabilirlik anlamında ciddi bir seviyeye gelmiş durumda. Eğer hâlâ eski bir sürüm kullanıyorsanız, en son sürüme güncellemenizi tavsiye ederim.
İstersen ben sana bunu senin mevcut yazının yapısına göre uygun görsel ve kod örnekleriyle de tamamlayabilirim, böylece hem SEO hem okunabilirlik artar. Bu eklemenin yeri olarak “Kurulum ve Temel Kullanım” bölümünden hemen sonra veya yazının sonundaki “Sonuç” bölümünden önce uygun olur.
Sonuç
uv, Python ekosisteminde devrim yaratan, hızlı, esnek ve kullanıcı dostu bir araçtır. Bağımlılık yönetimi, sanal ortamlar, Python sürümleri ve komut satırı araçları gibi birçok özelliği tek bir çatı altında birleştirerek geliştiricilerin hayatını kolaylaştırır. Rust ile yazılmış olması, performansını artırırken, Astral’in desteği de sürekli geliştirme ve güncellemeler vaat eder.
Eğer Python projelerinizde daha hızlı ve verimli bir iş akışı arıyorsanız, uv’yi denemenizi şiddetle öneririz. Daha fazla bilgi için resmi uv dokümantasyonunu ziyaret edebilir ve bu güçlü aracı keşfetmeye başlayabilirsiniz.
Kaynaklar
- Kapak Görseli: Photo by Gustavo Quepóns on Unsplash
- UV Github Repo
Bir Yanıt
Bir yanıt yazın Yanıtı iptal et
Yorum yapabilmek için oturum açmalısınız.
Mükemmel bir Paket ve Proje Yöneticisiymiş. Sizlerin emeğine sağlık.