Veri Bilimi Okulu

Python uv: Yeni Nesil Python Paket ve Proje Yöneticisi
Python uv: Yeni Nesil Python Paket ve Proje Yöneticisi
uv_kapak_960x640

Loading

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:

  1. Ö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.
  2. 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.
  3. 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 da poetry 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 ve sync 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

0

Bir Yanıt

Bir yanıt yazın

Password Requirements:

  • At least 8 characters
  • At least 1 lowercase letter
  • At least 1 uppercase letter
  • At least 1 numerical number
  • At least 1 special character