Neden önemli?
Python'ın gücünün yarısı dilin kendisi, diğer yarısı da PyPI'daki (Python Package Index) yarım milyonu aşkın pakettir. Anadolu Market'te yeni başlayan bir analiste "aylık satış Excel'ini oku, grafiğini çiz, PDF raporunu e-postayla gönder" denildiğinde işin çoğu doğru kütüphaneyi seçmektir: Excel için openpyxl, analiz için pandas, grafik için matplotlib. Yanlış seçim haftalar kaybettirir; bakımı bırakılmış ya da sahte bir paket ise güvenlik açığı demektir.
Bu ders bir harita sunar: her iş alanında sektörde yaygın kabul gören kütüphaneler, kurulum komutları, bu uygulamada tarayıcıda çalışıp çalışmadıkları ve hangi derste derinleştirileceği. Ardından paketi nasıl değerlendireceğini, belgesini nasıl okuyacağını ve güvenlik tuzaklarını öğreneceksin. Sanal ortam (virtual environment) ve pip ayrıntılarını Sanal ortam ve paket yönetimi dersinde, standart kütüphaneyi Standart kütüphane turu dersinde gördün; burada bakış açısı "dışarıdan ne alırım?" sorusudur.
Büyük harita
| Alan | Kütüphane | Ne işe yarar | Kurulum | Tarayıcıda | Nerede derinleşir |
|---|---|---|---|---|---|
| Veri | pandas | Tablo verisi: oku, temizle, grupla, birleştir | pip install pandas | Evet | pandas giriş, temizlik, groupby |
| Veri | polars | Çok hızlı, tembel (lazy) değerlendirmeli DataFrame | pip install polars | Evet | Veri boru hattı (ETL) |
| Veri | numpy | Sayısal diziler, vektör işlemleri, lineer cebir | pip install numpy | Evet | numpy dersi |
| Veri | duckdb | Dosya ve DataFrame üzerinde SQL | pip install duckdb | Evet | Veri boru hattı (pipeline) |
| Görsel | matplotlib | Her tür statik grafik, tam kontrol | pip install matplotlib | Evet | matplotlib ile görselleştirme |
| Görsel | seaborn | İstatistiksel grafiklerin kısa yolu (matplotlib üstüne) | pip install seaborn | Evet, gerekince iner | Görselleştirme (not) |
| Görsel | plotly | Etkileşimli, tarayıcıda yakınlaştırılabilir grafik | pip install plotly | Evet, gerekince iner | Görselleştirme (not) |
| ML | scikit-learn | Klasik makine öğrenmesi: regresyon, sınıflandırma, kümeleme | pip install scikit-learn | Evet | İleri seviye projeler |
| ML | xgboost | Gradyan artırma; tablo verisinde yarışma favorisi | pip install xgboost | Hayır | Kendi bilgisayarında |
| ML | pytorch | Derin öğrenme, sinir ağları, GPU | pip install torch | Hayır | Kendi bilgisayarında |
| Web | Django | Her şey dahil web çatısı: yönetim paneli, ORM, oturum | pip install django | Hayır | API ve web |
| Web | Flask | Küçük, esnek web çatısı | pip install flask | Hayır | API ve web |
| Web | FastAPI | Tip ipuçlarıyla (type hint) hızlı REST API, otomatik belge | pip install "fastapi[standard]" | Hayır | API ve web |
| Kazıma | requests / httpx | HTTP istekleri; httpx async da destekler | pip install requests httpx | httpx (ağsız) | API ve web |
| Kazıma | BeautifulSoup | HTML ayrıştırma ve veri çekme | pip install beautifulsoup4 | Evet | API ve web |
| Kazıma | Playwright | Gerçek tarayıcı sürerek JavaScript'li sayfa kazıma, test | pip install playwright | Hayır | Kendi bilgisayarında |
| Ofis | openpyxl | Excel (.xlsx) oku, yaz, biçimlendir | pip install openpyxl | Evet, gerekince iner | Excel otomasyonu |
| Ofis | python-docx | Word belgesi üret ve düzenle | pip install python-docx | Hayır | Kendi bilgisayarında |
| Ofis | pypdf | PDF birleştir, böl, metin çıkar | pip install pypdf | Hayır | Kendi bilgisayarında |
| CLI | argparse | Komut satırı argümanları (standart kütüphane) | Kurulum yok | Evet | Standart kütüphane turu |
| CLI | click / typer | Dekoratörle (decorator) CLI; typer tip ipuçlarından üretir | pip install click typer | click evet | Paketleme ve dağıtım |
| CLI | rich | Renkli tablo, ilerleme çubuğu, güzel hata çıktısı | pip install rich | Evet | Bu ders |
| Test | pytest | Düz assert ile test, fixture, parametrize | pip install pytest pytest-cov | Modül olarak | pytest ile test |
| Veritabanı | SQLAlchemy | ORM ve SQL ifade dili, veritabanından bağımsız | pip install sqlalchemy | Evet | sqlite3 ile Python (not) |
| Veritabanı | psycopg | PostgreSQL sürücüsü | pip install "psycopg[binary]" | Hayır | Kendi bilgisayarında |
| Doğrulama | pydantic | Tip ipuçlarıyla veri doğrulama ve dönüştürme | pip install pydantic | Evet | API ve web |
| Tarih | python-dateutil | Esnek tarih ayrıştırma, "ayın son günü" gibi göreli tarihler | pip install python-dateutil | Evet | Tarih ve saat |
| Tarih | pendulum | Saat dilimi dostu, okunur tarih API'si | pip install pendulum | Hayır | Kendi bilgisayarında |
| Görev | celery | Dağıtık arka plan görev kuyruğu (Redis/RabbitMQ ile) | pip install celery | Hayır | Kendi bilgisayarında |
| Görev | APScheduler | Uygulama içinde zamanlanmış görev (cron benzeri) | pip install apscheduler | Hayır | Kendi bilgisayarında |
Kendi bilgisayarında: tarayıcıda çalışmayan iki örnek
# pip install openpyxl
from openpyxl import Workbook
wb = Workbook()
ws = wb.active
ws.append(["Şehir", "Ciro"])
ws.append(["İzmir", 125000])
ws["B2"].number_format = "#,##0 TL"
wb.save("ciro.xlsx")
# pip install typer
import typer
def rapor(sehir: str, ay: int = 1, detay: bool = False):
"""Şehir bazlı aylık satış raporu üretir."""
print(f"{sehir} için {ay}. ay raporu, detay={detay}")
if __name__ == "__main__":
typer.run(rapor) # python rapor.py Ankara --ay 3 --detay
pip install komutunu çalıştır, kodu bir .py dosyasına kaydet ve terminalden çalıştır.rich: tarayıcıda da çalışan güzel çıktı
rich, terminal çıktısını tablolar ve renklerle okunur yapar. Komut satırı araçlarında ve hata ayıklamada (debugging) çok yaygındır:
from rich.console import Console
from rich.table import Table
tablo = Table(title="Anadolu Market: kütüphane seçimi")
tablo.add_column("İş", style="cyan")
tablo.add_column("Kütüphane")
tablo.add_column("Tarayıcıda", justify="center")
tablo.add_row("Satış analizi", "pandas", "evet")
tablo.add_row("Excel raporu", "openpyxl", "hayır")
tablo.add_row("REST API", "FastAPI", "hayır")
Console(width=70).print(tablo)
PyPI'da paket seçmek: beş ölçüt
| Ölçüt | Nereye bakarsın? | Kırmızı bayrak |
|---|---|---|
| Bakım | Son sürüm tarihi, açık issue'lara yanıt, son commit | 2 yıldır sürüm yok, issue'lar yanıtsız |
| Sürüm olgunluğu | 1.0 üstü mü, değişiklik günlüğü (changelog) düzenli mi | 0.0.x, her sürümde kırıcı değişiklik |
| Lisans | PyPI sayfası "License", depodaki LICENSE dosyası | Lisans yok ya da ticari kullanımı kısıtlayan GPL/AGPL (şirket politikasına bak) |
| Kullanım | İndirme istatistikleri, bağımlı proje sayısı | Popüler bir pakete benzeyen adla çok az indirme |
| Uyumluluk | Requires-Python, desteklenen işletim sistemleri, wheel var mı | Senin Python sürümünü desteklemiyor |
reqeusts, pandsa) kötü amaçlı paketler yükler. pip install kurulum sırasında paketin kodunu çalıştırabildiği için tek bir yazım hatası makineni ele geçirtebilir. Komutu kopyalamadan önce adı resmî belgeden doğrula, requirements dosyalarını kod incelemesinden (code review) geçir, kurumda iç PyPI aynası kullan.Bir de pip adı ile import adı farklı olabilir: pip install scikit-learn ama import sklearn; beautifulsoup4 → bs4; python-dateutil → dateutil; pyyaml → yaml; pillow → PIL. Bu farkı bilmeyenler "kurdum ama import edemiyorum" diye saatlerini harcar.
Belge okumak: help, __doc__, inspect
Yeni bir kütüphaneyi öğrenmenin sırası: resmî belgenin "Quickstart" bölümü, sonra API referansı. Kod içinden ise dört araç vardır:
import inspect, statistics
def kdv_hesapla(tutar: float, oran: float = 0.20, *, yuvarla: bool = True) -> float:
"""Tutara KDV ekler.
oran ondalık verilir (0.20 = yüzde 20).
"""
sonuc = tutar * (1 + oran)
return round(sonuc, 2) if yuvarla else sonuc
imza = inspect.signature(kdv_hesapla)
print(imza)
for ad, p in imza.parameters.items():
varsayilan = "zorunlu" if p.default is inspect.Parameter.empty else p.default
print(f" {ad:8} tür={p.kind.name:22} varsayılan={varsayilan}")
print(inspect.getdoc(kdv_hesapla).splitlines()[0])
print(inspect.signature(statistics.median))
print(statistics.median.__doc__.strip().splitlines()[0])
help(nesne) tüm bunları biçimlendirilmiş bir sayfa olarak yazdırır; etkileşimli kabukta en hızlı keşif aracıdır. dir(modul) içindeki adları, inspect.getdoc girintisi temizlenmiş belgeyi, inspect.signature parametreleri türleriyle birlikte verir. Parametre türleri PCAP ve gerçek API okuması için önemlidir: * sonrası parametreler yalnızca adla verilebilir (KEYWORD_ONLY).
Kurulu mu, hangi sürüm?
Bir paketi import etmek kodunu çalıştırır; yalnızca var olup olmadığını öğrenmek için importlib.util.find_spec kullan. Kurulu sürüm için importlib.metadata.version vardır.
import importlib.util
from importlib.metadata import version, PackageNotFoundError
for ad in ["json", "sqlite3", "olmayan_paket_xyz"]:
print(ad, "kurulu" if importlib.util.find_spec(ad) else "YOK")
try:
print("pip sürümü:", version("pip"))
except PackageNotFoundError:
print("pip bu ortamda paket olarak kayıtlı değil")
# Sürüm karşılaştırma: metin değil, sayı demeti
a, b = "2.10.0", "2.9.3"
print(a > b) # yanlış sonuç!
print(tuple(map(int, a.split("."))) > tuple(map(int, b.split("."))))
Gerçek projede sürüm karşılaştırması için packaging.version.Version kullanılır; "2.0.0rc1" gibi ön sürüm etiketlerini de doğru sıralar. Semver (anlamsal sürümleme) kuralı: BÜYÜK.küçük.yama; büyük artış kırıcı değişiklik, küçük artış geriye uyumlu yeni özellik, yama artışı hata düzeltmesidir.
requirements dosyasından rapor
Yeni bir projeye katıldığında ilk iş requirements.txt ya da pyproject.toml dosyasını okumaktır; projenin ne yaptığını büyük ölçüde oradan anlarsın:
import re
from collections import defaultdict
requirements = """
pandas>=2.2 # analiz
openpyxl==3.1.2
fastapi[standard]>=0.110
pydantic~=2.7
pytest ; extra == 'test'
"""
KATALOG = {"pandas": "veri", "openpyxl": "ofis", "fastapi": "web", "pydantic": "doğrulama", "pytest": "test"}
rapor = defaultdict(list)
for satir in requirements.splitlines():
satir = satir.split("#")[0].strip()
if not satir:
continue
ad = re.split(r"[\[<>=!~; ]", satir, maxsplit=1)[0].lower()
rapor[KATALOG.get(ad, "diğer")].append(ad)
for kategori, paketler in sorted(rapor.items()):
print(f"{kategori:10} {', '.join(paketler)}")
pip-audit, Dependabot), bakım durumu ve "standart kütüphane ya da zaten kullandığımız bir paket bu işi yapıyor mu?" sorusu. Pull request açıklamasına "neden bu paket, alternatifleri neydi" yazmak iyi bir alışkanlıktır. Excel raporu, PDF birleştirme ve zamanlanmış görev gibi otomasyon işleri Python'a geçişin en sık nedenidir; bu işlerde openpyxl, pypdf ve APScheduler üçlüsü çok yaygındır.Bağımlılık ağacı ve çakışma
Bir paket kurmak onun bağımlılıklarını da kurar. pip install pandas numpy, python-dateutil, pytz ve tzdata'yı da getirir. İki paket aynı bağımlılığın uyumsuz sürümlerini isterse çakışma (dependency conflict) çıkar. pip check çakışmaları raporlar, pipdeptree ağacı gösterir. Az bağımlılıklı paketi tercih etmek uzun vadede kazandırır.
Wheel, saf Python ve derlenmiş paketler
numpy ve pandas gibi paketler C/Rust ile derlenmiş kod içerir; PyPI bunları işletim sistemi ve Python sürümüne özel wheel (.whl) dosyaları olarak sunar. Yeni bir Python sürümü çıktığında wheel henüz yoksa pip kaynaktan derlemeye çalışır ve derleyici hatası alırsın. Bu yüzden kurumlar yeni Python sürümüne birkaç ay gecikmeyle geçer. Tarayıcıdaki Pyodide da paketlerin WebAssembly'ye derlenmiş hâllerini kullanır; tablodaki "Hayır" satırlarının çoğu bu yüzdendir.
Belgeyi koddan üretmek
Kütüphanelerin API referans sayfaları çoğunlukla docstring'lerden otomatik üretilir (Sphinx, MkDocs + mkdocstrings). Kendi kodunda iyi docstring yazarsan aynı araçlarla belge siteni bedavaya alırsın ve help() senin kodunda da işe yarar.