PYTHON PACKAGING VENV VE POETRY

Python paketleme akışı venv izole ortam pyproject toml manifest ve poetry lock dosyası

JetBrains 2024 Python Developer Survey'e göre geliştiricilerin yaklaşık %85'i hâlâ pip kullanıyor; ancak poetry payı %37'ye, hızla yayılan uv ise birkaç ay içinde %11'e ulaştı. Bu rakamlar, Python ekosisteminin tek bir paket yöneticisinde karar kılmadığını ve doğru aracı seçmenin proje ömrü boyunca tekrar tekrar gündeme geldiğini gösteriyor. Aşağıda beş aracın ne işe yaradığını, hangi sorunu çözdüğünü ve hangi durumda hangisinin tercih edilmesi gerektiğini somut özellik tablolarıyla aktarıyoruz.

Python'da Paketleme Sorunu Nereden Çıkıyor?

Python kurulumu sistem üzerinde tek bir global site-packages dizinine sahiptir. Aynı makinede iki farklı proje, Django 3 ve Django 5 gibi uyumsuz sürümleri talep ettiğinde çakışma kaçınılmazdır. Paketleme araçlarının var olma nedeni budur: izole ortam, deterministik bağımlılık çözümü ve yayınlanabilir bir artefakt. Daha fazla bilgi için geniş kapsamlı belgeleri başvurulabilir.

Bir paket yöneticisinden beklenenler genellikle şu başlıklar altında toplanır:

  • Sanal ortam oluşturma ve yönetme
  • Bağımlılıkları çözme (resolver) ve kilitleme (lock file)
  • Geliştirme ve üretim bağımlılıklarını ayırma
  • Paketi PyPI'ye yayınlama (build + publish)
  • Python sürümünü kendisi kurabilme

Tek bir araç bu beş işi de eşit ağırlıkta yapmaz. Kullanım payları ve hedef kitleler farklılaşır.

Kullanım Payları: 2024 Verileri ile Manzara

Python paket yöneticilerinin pazar payı pip poetry uv pipenv conda yatay karşılaştırma grafiği

JetBrains ve Python Software Foundation ortak anketi, hangi aracın hangi paya sahip olduğunu net biçimde ortaya koyuyor:

  • pip: ~%85 (Python ile birlikte gelen varsayılan kurucu)
  • conda / mamba: ~%29 (veri bilimi ve bilimsel hesaplama ağırlıklı)
  • poetry: ~%37 (modern uygulama ve kütüphane geliştirme)
  • pipenv: ~%10 (eski projelerde devam ediyor, yeni kurulumlarda gerileme)
  • uv: ~%11 (Astral tarafından 2024 başında duyuruldu, hızla büyüyor)
  • hatch, pdm, rye: toplam %5-8 bandında

Toplam %100'ü geçmesinin nedeni geliştiricilerin birden fazla aracı paralel kullanmasıdır; örneğin bir ekibin poetry ile bağımlılık tanımlayıp CI'da pip ile kurulum yapması olağandır.

pip ve virtualenv: Temel Katman

pip, Python'ın resmi paket kurucusudur ve Python 3.4'ten itibaren standart kütüphane ile birlikte gelir. virtualenv ise pip'ten önce sanal ortam ihtiyacını karşılamak için doğmuştur; bugün büyük ölçüde standart kütüphanedeki venv modülü aynı işi görür.

Tipik akış şu şekildedir:

  • python -m venv .venv ile izole ortam
  • .venvScriptsactivate (Windows) veya source .venv/bin/activate (POSIX)
  • pip install -r requirements.txt ile bağımlılıkları kurma
  • pip freeze > requirements.txt ile sürümleri dondurma

Bu kombinasyonun zayıf yanı, requirements.txt'nin gerçek bir lock dosyası olmamasıdır. Geçişli bağımlılıkların sürümleri makineye göre değişebilir. Ayrıca paket yayınlama, geliştirme/üretim ayrımı veya Python sürümü yönetimi pip'in kapsamı dışındadır.

pipenv: requirements.txt'den Lock'a Geçiş

pipenv 2017'de PyPA tarafından önerilen bir araç olarak çıktı. Pipfile ve Pipfile.lock ile deterministik kurulum vaadi getirdi. Ancak bağımlılık çözüm hızı uzun süre tartışma konusu oldu ve sürüm yayınları kesintili ilerledi. Bu nedenle yeni projelerde tercih oranı düşmektedir. Mevcut pipenv kullanan projelerin korunması mantıklıdır; sıfırdan başlayan ekipler genelde poetry veya uv tarafına yönelir.

poetry: Modern Uygulama Geliştirme

poetry, pyproject.toml üzerinden hem bağımlılıkları hem paket meta verisini tek dosyada tutar. poetry.lock tüm geçişli sürümleri kilitler. Yayınlama (poetry publish) ve build işlemleri tek komutla yapılabilir.

Özellik tablosu açısından poetry'nin güçlü yönleri:

  • SAT-tabanlı bağımlılık çözücü (çakışmaları net raporlar)
  • Geliştirme bağımlılığı için --group dev
  • Kütüphane ve uygulama modunu ayırma
  • Plugin sistemi

Zayıf yönü tarihsel olarak çözüm hızıydı; büyük projelerde lock dosyası üretimi dakikalar sürebiliyordu. Sürüm 1.5'ten sonra bu önemli ölçüde iyileşti.

uv: Rust ile Yazılmış Yeni Nesil

uv paket yöneticisi Rust tabanlı hızlı bağımlılık çözümü ile pip ve poetry kıyaslaması

uv, ruff'ı geliştiren Astral ekibi tarafından Şubat 2024'te duyuruldu. Rust ile yazılmıştır ve pip ile aynı arayüzü taklit ederek başladı, sonrasında poetry benzeri proje yönetimine doğru genişledi. Ölçümlerde pip'ten 10-100x, poetry'den ise lock üretiminde belirgin biçimde daha hızlı sonuç verir.

uv'nin diğer araçlardan ayrıştığı noktalar:

  • Python yorumcusunu kendisi indirip yönetebilmesi (pyenv'e ihtiyacı azaltır)
  • Tek bir çalıştırılabilir dosya (Python kurulumu olmadan da çalışır)
  • pip-compile / pip-sync uyumlu komut seti
  • Workspace ve monorepo desteği

Olgunluk anlamında hâlâ genç bir araçtır; ancak benimseme hızı yüksektir.

Karşılaştırma Tablosu: Hangi Araç Neyi Yapar?

Beş aracın temel özellikleri yan yana getirildiğinde şu tablo ortaya çıkar:

  • Sanal ortam yönetimi: pip yok / virtualenv var / pipenv var / poetry var / uv var
  • Lock dosyası: pip yok / virtualenv yok / pipenv var / poetry var / uv var
  • Paket yayınlama (build & publish): pip kısmi / virtualenv yok / pipenv yok / poetry var / uv var
  • Python sürümü kurma: sadece uv (yerleşik)
  • Çözüm hızı: uv > poetry > pipenv > pip
  • Olgunluk: pip > virtualenv > pipenv > poetry > uv

Bu tabloyu kendi projenize uygulamak için Python ekosistemine dair temel kavramları gözden geçirmek isterseniz Python eğitim içeriğinden yararlanabilirsiniz.

Hangi Senaryoda Hangi Araç?

Seçim, projenin türüne ve ekibin alışkanlığına göre değişir:

  • Tek dosyalık script veya öğrenme aşaması: pip + venv yeterli
  • PyPI'ye yayınlanacak kütüphane: poetry veya hatch
  • Hız kritik CI/CD pipeline'ı: uv
  • Veri bilimi, derin öğrenme, native bağımlılık ağırlıklı iş: conda / mamba
  • Mevcut pipenv projesi: migrasyon zorunlu değilse devam, yeni proje açılıyorsa poetry veya uv

Çoğu ekip için pratik öneri şudur: Bağımlılıkları pyproject.toml'da tanımlayın, lock dosyası kullanın, CI'da kurulumu uv ile hızlandırın. Bu kombinasyon, hem standartlara hem hıza uyar.

Geçiş ve Birlikte Yaşama

Bir araçtan diğerine geçiş genellikle pyproject.toml üzerinden yapılır. poetry export ile requirements.txt üretip pip veya uv'ye aktarmak mümkündür. uv, poetry'nin lock formatını henüz okumaz; ancak pyproject.toml'daki bağımlılık tanımını okuyup kendi lock'unu üretebilir. pipenv'den çıkarken Pipfile'ı manuel olarak pyproject.toml'a çevirmek pratik bir yoldur.

Araçların hızla evrildiği bu dönemde tek bir araca koşulsuz bağlanmak yerine, pyproject.toml standardına yatırım yapmak en sağlam yaklaşım gibi görünüyor. Python paketlemesi konusunda derinleşmek isteyenler yapılandırılmış Python eğitimi ile konunun temellerini takip edebilir.

pyproject toml standart dosyası ve poetry uv pdm hatch araçları ortak okuma akışı

Sonuç olarak pip varsayılan olarak kalmaya devam edecek; poetry kütüphane geliştirmede konumunu korurken uv, hızıyla CI ve uygulama tarafında hızlı pay kazanıyor. Pipenv ve virtualenv ise giderek arka plana çekiliyor. Karar verirken aracın özellik tablosundan çok, ekibin günlük iş akışıyla nasıl örtüştüğünü ölçmek daha sağlıklı bir kriterdir.