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 pippip 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 pytestvenv + 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.
- Python sürümünü .python-version veya matrix ile sabitleyin
- Lock dosyasını commit edin
- Üretim ve geliştirme bağımlılıklarını ayırın
- 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.