Rehberler Uzun Okuma Paket Yonetimi

Bağımlılıkları nasıl yönetirsiniz?

pip, venv ve Poetry ile izole ve güvenilir ortamlar.

12 Ocak 2026 17 dk okuma
Paylaş
X in

Giriş

Python ekosisteminin gücü PyPI'daki binlerce paketten gelir; ancak projeler büyüdükçe bağımlılık yönetimi karmaşıklaşır. Sistem Python'una doğrudan pip install yapmak, sürüm çakışmalarına ve 'bende çalışıyor' problemlerine yol açar. Sanal ortam ve kilit dosyası disiplini, profesyonel geliştirmenin temelidir.

Bu yazıda venv ile izolasyon, pip ile kurulum, requirements.txt ile dondurma ve Poetry ile modern proje yönetimini karşılaştırmalı inceliyoruz. CI/CD pipeline'larında ve Docker imajlarında aynı bağımlılık grafiğinin tekrarlanabilir olması hedeflenir.

venv ile Sanal Ortamlar

python -m venv .venv komutu proje dizininde bağımsız bir Python yorumlayıcısı ve site-packages klasörü oluşturur. Windows'ta .venv\Scripts\activate, Unix'te source .venv/bin/activate ile ortam etkinleştirilir. Deactivate ile sistem Python'una dönülür.

Her proje için ayrı venv kullanmak, global site-packages kirlenmesini önler. .venv klasörünü .gitignore'a ekleyin; ortam makineye özeldir. CI sunucularında her build'de sıfırdan venv oluşturmak standart uygulamadır.

python -m venv .venv
# Windows:
.venv\Scripts\activate
# Linux/macOS:
source .venv/bin/activate
pip install --upgrade pip

pip ve Bağımlılık Dosyaları

pip install requests paketi indirir ve aktif ortama kurar. pip freeze > requirements.txt mevcut ortamdaki tüm paketleri sabitler; pip install -r requirements.txt ile aynı set yeniden kurulur. Ancak freeze, geliştirme araçlarını da dahil edebilir; üretim için ayrı requirements-prod.txt tercih edilir.

pip-tools (pip-compile) requirements.in dosyasından çözümlenmiş requirements.txt üretir; transitif bağımlılıklar pinlenir. pip install package==1.2.3 ile sürüm kilitleme yapılır; semver uyumlu üst sınırlar (^, ~=) dikkatli seçilmelidir.

  • pip install -r requirements.txt: toplu kurulum
  • pip freeze: mevcut ortamı dondurma
  • pip-compile: çözümlenmiş bağımlılık üretme
  • pip list --outdated: güncelleme kontrolü

Poetry ile Modern Proje Yönetimi

Poetry pyproject.toml üzerinden proje meta verisi, bağımlılıklar ve build ayarlarını tek dosyada toplar. poetry add requests runtime bağımlılığı ekler; poetry add --group dev pytest geliştirme grubuna ekler. poetry.lock dosyası tam çözümü kilitler ve commit edilmelidir.

poetry install lock dosyasına göre kurulum yapar; poetry update belirli paketleri günceller. poetry build ve poetry publish ile PyPI'ya paket yayınlanır. PEP 621 ile uyumlu pyproject.toml, setuptools ve setup.py'nin yerini almaya devam ediyor.

poetry new myproject
cd myproject
poetry add fastapi uvicorn
poetry add --group dev pytest ruff
poetry install
poetry run pytest

venv + pip vs Poetry Karşılaştırması

venv + pip + requirements.txt minimal ve her yerde çalışır; ek araç gerektirmez. Poetry ise bağımlılık çözümleme, sanal ortam yönetimi ve yayınlama akışını birleştirir. Küçük scriptler için venv yeterli; kütüphane veya çok modüllü uygulamalar için Poetry veya pipenv tercih edilir.

uv ve rye gibi yeni araçlar pip uyumlu ama çok daha hızlı kurulum sunar. Takım standardı seçtikten sonra tüm repolarda tutarlı kalın; karışık pip/poetry/conda kullanımı onboarding maliyetini artırır.

Docker ve CI Entegrasyonu

Dockerfile'da çok aşamalı build: önce requirements kopyalanıp pip install, sonra uygulama kodu eklenir; layer cache'den faydalanılır. Poetry için poetry export -f requirements.txt veya poetry install --only main kullanılır.

GitHub Actions'ta actions/setup-python ile Python sürümü sabitlenir; cache: pip veya cache: poetry ile bağımlılık indirmeleri hızlandırılır. Güvenlik taraması için pip-audit veya poetry audit (plugin) pipeline'a eklenmelidir.

  1. Python sürümünü .python-version veya matrix ile sabitleyin
  2. Lock dosyasını commit edin
  3. Üretim ve geliştirme bağımlılıklarını ayırın
  4. Düzenli güvenlik taraması çalıştırın

Sık Karşılaşılan Sorunlar

ModuleNotFoundError genelde yanlış ortam veya eksik kurulumdan kaynaklanır; which python ile aktif yorumlayıcıyı doğrulayın. Sürüm çakışması pip'in resolver hatası verir; poetry show --tree veya pipdeptree ile grafiği inceleyin.

Platforma özel wheel eksikliğinde kaynak derleme gerekir; build-essential ve python3-dev Docker imajına eklenmelidir. Private PyPI için pip.conf veya POETRY_HTTP_BASIC_* ortam değişkenleri kullanılır.

Lock dosyası olmadan üretim deploy'u yapmayın; tekrarlanabilirlik kaybolur.

Sonuç

Sağlam paket yönetimi, Python projelerinin ölçeklenebilirliğinin ön koşuludur. venv ile izole edin, pip veya Poetry ile bağımlılıkları kilitleyin, CI'da aynı grafiği kurun. Poetry modern projeler için güçlü bir varsayılan; minimal ihtiyaçlarda venv + pip-tools da yeterlidir.

Bağımlılık güncellemelerini düzenli planlayın; major sürüm atlamalarını test ortamında doğrulayın. Dokümantasyonda kurulum adımlarını güncel tutmak, yeni geliştiricilerin ilk gününde saatler kazandırır.