Menu
Playground'da Dene

Python Modülleri ve Import: import, from-import, pip ve Paketler

Python'un modül sistemi nasıl çalışır — kendi modüllerini yazmak, onlardan içe aktarmak ve üçüncü parti paketleri pip ile kurmak.

Bir Dosya Bir Modüldür

Python kodun tek bir script'in ötesine geçtiğinde, onu birden fazla dosyaya bölmek isteyeceksin. Python'un modül sistemi basittir: herhangi bir .py dosyası otomatik olarak bir modüldür ve ismiyle içe aktarılabilir.

Diyelim ki util.py dosyan var:

# util.py
def greet(name):
    return f"Hello, {name}"

PI = 3.14159

Aynı dizindeki başka bir dosyadan — main.py — onu kullanabilirsin:

# main.py
import util

print(util.greet("Ada"))
print(util.PI)

python3 main.py çalıştır; Python util.py'yi bulur, bir kez çalıştırır ve üst düzeyde tanımlanan her şeyi (fonksiyonlar, değişkenler, sınıflar) util modülünün öznitelikleri olarak sunar.

Üç İçe Aktarma Biçimi

Modülün tamamını içe aktar. İçindeki şeylere modül adı üzerinden erişilir:

main.py
Output
Click Run to see the output here.

Belirli isimleri içe aktar. Doğrudan kullanılabilir olurlar:

main.py
Output
Click Run to see the output here.

Takma ad ile içe aktar. Modül adı uzun olduğunda veya iki modül aynı adı paylaştığında kullanışlıdır:

import numpy as np
import pandas as pd

# Şimdi np.array(...), pd.DataFrame(...) vb. kullan.

Dördüncü bir biçim daha var: from math import *, her şeyi isim alanına çeker. REPL denemeleri dışında bundan kaçın — bir ismin nereden geldiğini anlamayı imkânsız kılar ve sessiz isim çakışmaları yaratır.

Import'lar Ne Zaman Çalışır

Python, içe aktarılan bir modülün üst düzey kodunu bir programda ilk kez içe aktarıldığında bir kez çalıştırır. Aynı modülün sonraki içe aktarmaları önceden yüklenmiş sürümü döndürür. Yani şu:

# setup.py
print("setup module loading...")
VALUE = 42
# main.py
import setup
import setup  # iki kez içe aktarıldı — ama "loading" yalnızca bir kez yazdırılır
print(setup.VALUE)

"setup module loading..." yalnızca bir kez yazdırılır. Bu önemli: modül üst düzeyine yan etkiler (dosya açmak ya da yazdırmak gibi) koyarsan, bunlar içe aktarma sırasında çalışır — bu genellikle istediğin şey değildir. Onları fonksiyonların içine koy.

Standart Kütüphane

Python, büyük bir standart modül kütüphanesiyle birlikte gelir. Birkaçını zaten gördün. Sürekli uzanacakların:

  • math — sqrt, sin, log, pi ve e gibi sabitler.
  • random — rastgele sayılar, seçimler, karıştırma.
  • datetime — tarihler ve saatler.
  • json — JSON okuma/yazma.
  • os, os.path — dosya sistemi yolları ve işlemleri.
  • pathlib — modern yol işleme, çoğu zaman os.path'tan daha hoş.
  • re — düzenli ifadeler.
  • collections — özelleşmiş koleksiyon tipleri (Counter, defaultdict, deque vs.).
  • itertools, functools — iteratör ve fonksiyon yardımcıları.
  • csv — CSV dosyaları okuma ve yazma.

Standart kütüphane zaten kurulu — pip install etmene gerek yok.

main.py
Output
Click Run to see the output here.

Üçüncü Parti Paketler ve pip

Standart kütüphanenin kapsamadığı her şey için Python Package Index (PyPI) yüz binlerce paket barındırır. Onları pip ile kur:

pip install requests
pip install pandas
pip install --upgrade requests
pip uninstall requests

Kurulduktan sonra, her şey gibi içe aktarılırlar:

import requests

response = requests.get("https://api.example.com/data")
print(response.status_code)

Bunu aklıselim yönetmek için birkaç ipucu:

Sanal ortamları kullan

Her şeyi genele kurmak sıkıntı yaratır. Farklı projelerin farklı sürümlere ihtiyacı vardır; bazı paketler belirli Python sürümlerine bağlıdır; bazı sistemlerde genel kurulum yönetici yetkisi gerektirir. Sanal ortam, yalnızca tek bir proje için yalıtılmış bir Python kurulumudur:

python3 -m venv .venv
source .venv/bin/activate    # macOS/Linux
.venv\Scripts\activate       # Windows

pip install requests

Venv aktifken pip paketleri sistemine değil proje klasörüne kurar. İşin bittiğinde deactivate ile devre dışı bırak.

Bağımlılıklarını sabitle

Kurulu paketlerin listesini kaydet ki başkaları (gelecekteki sen dahil) aynı ortamı yeniden oluşturabilsin:

pip freeze > requirements.txt

Daha sonra:

pip install -r requirements.txt

Poetry, pipenv ve uv gibi araçlar bunu daha ergonomik yönetir ama öğrenmek için düz pip + requirements.txt akışı hâlâ yeterlidir.

Kendi Modüllerini Yazmak

Dosyalar arası yeniden kullanmak istediğin fonksiyonlar olduğunda, onları kendi modüllerine koy. İsimlendirme gelenekleri:

  • Dosya adları lower_snake_case.py olmalı.
  • Modül düzeyindeki fonksiyonlar ve değişkenler de lower_snake_case.
  • Sınıflar PascalCase kullanır.
# shopping.py
PRICES = {"apple": 0.50, "bread": 2.00}

def total(items):
    return sum(PRICES[item] for item in items)
# main.py
from shopping import total, PRICES

print(total(["apple", "bread"]))
print(PRICES)

Aynı klasördeki iki dosya birbirini içe aktarırsa, kazara bir dairesel import oluşturabilirsin. Olağan çözüm, paylaşılan kodu her ikisinin de içe aktardığı üçüncü bir dosyaya taşımaktır.

Paketler: Modül Klasörleri

Elinde bir avuçtan fazla modül olunca, onları bir pakette grupla — içinde __init__.py dosyası olan bir klasörde:

myproject/
├── main.py
└── utils/
    ├── __init__.py
    ├── text.py
    └── numbers.py

Ardından:

from utils.text import slugify
from utils import numbers

print(slugify("Hello, World"))
print(numbers.mean([1, 2, 3]))

__init__.py boş olabilir; varlığı utils'i paket yapan şeydir. Modern Python, __init__.py olmadan da "namespace paketleri" destekler ama başlangıç için açık sürüm daha nettir.

Import'lar Bozulduğunda Minik Bir Kontrol Listesi

  • "ModuleNotFoundError: No module named X". Ya paket kurulu değildir ya da Python'u pip install yaptığından farklı bir yorumlayıcıdan çalıştırıyorsundur. Bir venv içindeysen, venv'in aktif olduğundan emin ol.
  • "ImportError: cannot import name Y from X". Modül var ama istediğin isim orada yok. Yazım hatalarını kontrol et ve modülün gerçek içeriğine bak.
  • "Circular import". İki modül birbirini içe aktarıyor. Paylaşılan kodu üçüncü bir modüle taşı.

Sırada: Üçüncü Parti Paketleri Kurmak

Kendi modüllerin seni uzağa götürür ama çoğu gerçek proje PyPI'dan kütüphaneler de çeker — requests, pandas, bir test framework'ü. Bir sonraki sayfa pip'i, paketleri temizce nasıl kuracağını ve projenin bağımlılıklarını nasıl kaydedeceğini anlatıyor.

Sıkça Sorulan Sorular

Python'da modül nedir?

Modül, herhangi bir .py dosyasıdır. Python dosyaları otomatik olarak modül haline gelir — onları ismiyle (.py olmadan) içe aktarırsın. Standart kütüphane; math, json ve datetime gibi her Python kurulumuyla gelen yerleşik modüllerin büyük bir koleksiyonudur.

import X ile from X import Y arasındaki fark nedir?

import X, modülün tamamını içe aktarır ve içindeki şeylere X.something ile erişirsin. from X import Y, yalnızca Y'yi isim alanına çeker, böylece onu doğrudan Y olarak kullanabilirsin. İlki daha güvenlidir (isim çakışması olmaz); ikincisi daha derlidir.

Python paketini nasıl kurarım?

Terminalde pip install paket_adi komutunu kullan. pip, Python'un paket yöneticisidir ve modern kurulumlarla birlikte gelir. Proje yalıtımı için önce bir sanal ortam oluştur; böylece kurulan paketler projeler arasında sızmaz.

Coddy ile kodlamayı öğren

BAŞLA