Ana içeriğe geç
Kesit Python
Orta · Standart kütüphane

Python kütüphane haritası: hangi iş için hangi paket?

Veri, görselleştirme, makine öğrenmesi, web, kazıma, ofis otomasyonu, CLI, test, veritabanı ve doğrulama için doğru kütüphaneyi seçmeyi; PyPI'da paket değerlendirmeyi, belge okumayı (help, __doc__, inspect.signature), sürüm uyumunu ve typosquatting gibi güvenlik risklerini öğrenirsin.

Uygulamada aç, 19 alıştırmayı çözÜcretsiz, hesap gerekmez, kurulum yok.

Bu sayfa dersin okuma sürümüdür. Metin bir kutuyu çalıştırmanı ya da adıma geçmeni söylüyorsa dersi uygulamada aç.

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

AlanKütüphaneNe işe yararKurulumTarayıcıdaNerede derinleşir
VeripandasTablo verisi: oku, temizle, grupla, birleştirpip install pandasEvetpandas giriş, temizlik, groupby
VeripolarsÇok hızlı, tembel (lazy) değerlendirmeli DataFramepip install polarsEvetVeri boru hattı (ETL)
VerinumpySayısal diziler, vektör işlemleri, lineer cebirpip install numpyEvetnumpy dersi
VeriduckdbDosya ve DataFrame üzerinde SQLpip install duckdbEvetVeri boru hattı (pipeline)
GörselmatplotlibHer tür statik grafik, tam kontrolpip install matplotlibEvetmatplotlib ile görselleştirme
Görselseabornİstatistiksel grafiklerin kısa yolu (matplotlib üstüne)pip install seabornEvet, gerekince inerGörselleştirme (not)
GörselplotlyEtkileşimli, tarayıcıda yakınlaştırılabilir grafikpip install plotlyEvet, gerekince inerGörselleştirme (not)
MLscikit-learnKlasik makine öğrenmesi: regresyon, sınıflandırma, kümelemepip install scikit-learnEvetİleri seviye projeler
MLxgboostGradyan artırma; tablo verisinde yarışma favorisipip install xgboostHayırKendi bilgisayarında
MLpytorchDerin öğrenme, sinir ağları, GPUpip install torchHayırKendi bilgisayarında
WebDjangoHer şey dahil web çatısı: yönetim paneli, ORM, oturumpip install djangoHayırAPI ve web
WebFlaskKüçük, esnek web çatısıpip install flaskHayırAPI ve web
WebFastAPITip ipuçlarıyla (type hint) hızlı REST API, otomatik belgepip install "fastapi[standard]"HayırAPI ve web
Kazımarequests / httpxHTTP istekleri; httpx async da desteklerpip install requests httpxhttpx (ağsız)API ve web
KazımaBeautifulSoupHTML ayrıştırma ve veri çekmepip install beautifulsoup4EvetAPI ve web
KazımaPlaywrightGerçek tarayıcı sürerek JavaScript'li sayfa kazıma, testpip install playwrightHayırKendi bilgisayarında
OfisopenpyxlExcel (.xlsx) oku, yaz, biçimlendirpip install openpyxlEvet, gerekince inerExcel otomasyonu
Ofispython-docxWord belgesi üret ve düzenlepip install python-docxHayırKendi bilgisayarında
OfispypdfPDF birleştir, böl, metin çıkarpip install pypdfHayırKendi bilgisayarında
CLIargparseKomut satırı argümanları (standart kütüphane)Kurulum yokEvetStandart kütüphane turu
CLIclick / typerDekoratörle (decorator) CLI; typer tip ipuçlarından üretirpip install click typerclick evetPaketleme ve dağıtım
CLIrichRenkli tablo, ilerleme çubuğu, güzel hata çıktısıpip install richEvetBu ders
TestpytestDüz assert ile test, fixture, parametrizepip install pytest pytest-covModül olarakpytest ile test
VeritabanıSQLAlchemyORM ve SQL ifade dili, veritabanından bağımsızpip install sqlalchemyEvetsqlite3 ile Python (not)
VeritabanıpsycopgPostgreSQL sürücüsüpip install "psycopg[binary]"HayırKendi bilgisayarında
DoğrulamapydanticTip ipuçlarıyla veri doğrulama ve dönüştürmepip install pydanticEvetAPI ve web
Tarihpython-dateutilEsnek tarih ayrıştırma, "ayın son günü" gibi göreli tarihlerpip install python-dateutilEvetTarih ve saat
TarihpendulumSaat dilimi dostu, okunur tarih API'sipip install pendulumHayırKendi bilgisayarında
GörevceleryDağıtık arka plan görev kuyruğu (Redis/RabbitMQ ile)pip install celeryHayırKendi bilgisayarında
GörevAPSchedulerUygulama içinde zamanlanmış görev (cron benzeri)pip install apschedulerHayırKendi bilgisayarında
Önce standart kütüphaneİhtiyacın csv, json, sqlite3, datetime, pathlib, argparse ya da statistics ile çözülüyorsa paket ekleme. Her bağımlılık güncelleme, güvenlik ve lisans takibi demektir. "Bir fonksiyon için bir paket" alışkanlığı projeyi kırılgan yapar.

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
Kendi bilgisayarında deneBu iki örnek tarayıcıda çalışmaz. Sanal ortamını etkinleştirip yorumdaki 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çütNereye bakarsın?Kırmızı bayrak
BakımSon sürüm tarihi, açık issue'lara yanıt, son commit2 yıldır sürüm yok, issue'lar yanıtsız
Sürüm olgunluğu1.0 üstü mü, değişiklik günlüğü (changelog) düzenli mi0.0.x, her sürümde kırıcı değişiklik
LisansPyPI 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
UyumlulukRequires-Python, desteklenen işletim sistemleri, wheel var mıSenin Python sürümünü desteklemiyor
Typosquatting: sahte ikiz paketlerSaldırganlar popüler paketlere bir harf farkla benzeyen adlarla (ör. 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)}")
Gerçek işteKurumsal ekiplerde yeni bir paket eklemek genelde bir onay sürecinden geçer: lisans kontrolü (hukuk), güvenlik taraması (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.
Uzmanlaş

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.

Alıştırmalara geç (19)