Yazılım geliştirme sürecinde projeler büyüdükçe yazılan kod satırlarının sayısı hızla artar. Tüm fonksiyonları, sınıfları ve değişkenleri tek bir dosya içinde tutmak, kodun okunabilirliğini düşürür ve bakımını neredeyse imkansız hale getirir. Python, bu sorunu çözmek için modüler bir mimari sunar. Bu mimarinin temel taşı olan python import yapısı, kod tabanınızı mantıksal parçalara ayırmanıza ve gerektiğinde bu parçaları yeniden kullanmanıza olanak tanır.
Modül Kavramı Nedir?
Python’da modül, aslında .py uzantısına sahip herhangi bir Python dosyasıdır. Bu dosya; fonksiyonlar, sınıflar, değişkenler ve hatta çalıştırılabilir kod blokları içerebilir. Modüller sayesinde bir projede yazdığınız bir algoritmayı veya yardımcı aracı, kod kopyalamaya gerek kalmadan başka bir projeye veya dosyaya dahil edebilirsiniz.
Modül kullanımının sağladığı başlıca avantajlar şunlardır:
- Kodun tekrar kullanılabilirliğini artırır.
- Büyük projeleri daha küçük, yönetilebilir ve test edilebilir parçalara böler.
- İsim çakışmalarını önleyerek kodun düzenli kalmasını sağlar.
Temel python import Yöntemleri
Python’da bir modülü mevcut çalışma alanınıza dahil etmek için farklı sözdizimleri mevcuttur. İhtiyacınıza göre bu yöntemlerden birini seçebilirsiniz.
1. Doğrudan Modül Adını İçe Aktarma
En yalın yöntem, import anahtar kelimesinin ardından modülün adını yazmaktır. Bu yöntem, Python’un standart kütüphanesinde yer alan modüller için sıkça tercih edilir.
import math
sonuc = math.sqrt(64)
print(sonuc)
Bu örnekte standart matematik modülü olan math sisteme yüklenir. Modülün içindeki karekök alma fonksiyonu olan sqrt çağrılırken modul_adi.fonksiyon_adi() yapısı kullanılır. Bu yaklaşım, fonksiyonun hangi modülden geldiğini açıkça belirttiği için oldukça güvenlidir.
2. Modülden Belirli Bir Elemanı İçe Aktarma
Tüm modülü içeri almak yerine yalnızca ihtiyacınız olan belirli bir fonksiyonu veya sınıfı almak isteyebilirsiniz. Bunun için from ... import ... kalıbı kullanılır.
from math import pi, pow
alan = pi * pow(5, 2)
print(alan)
Burada math modülünden sadece pi sabiti ve üs alma işlemi yapan pow fonksiyonu çekilmiştir. Bu yöntemde modül adını önek olarak yazmanıza gerek kalmaz; elemanları doğrudan adlarıyla çağırabilirsiniz.
3. Takma Ad (Alias) Kullanımı
Modül adları bazen çok uzun olabilir veya projenizdeki diğer adlandırmalarla karışabilir. Bu gibi durumlarda as anahtar kelimesi ile modüle veya fonksiyona daha kısa bir takma ad verilebilir.
import datetime as dt
simdi = dt.datetime.now()
print(simdi.year)
Örnekte datetime modülü dt adıyla çağrılmıştır. Özellikle veri analizi dünyasında yaygın olan kütüphaneler için bu yöntem endüstri standardı haline gelmiştir.
4. Tüm Elemanları İçe Aktarma (Yıldız Kullanımı)
Bir modüldeki her şeyi doğrudan mevcut isim alanına aktarmak için yıldız simgesi kullanılabilir:
from math import *
print(sin(0))
Bu yöntem yeni başlayanlar için pratik görünse de profesyonel projelerde önerilmez. Mevcut dosyanızdaki değişken adlarıyla modülden gelen isimler çakışabilir ve hangi fonksiyonun nereden geldiği anlaşılamaz hale gelebilir.
Kendi Modülünüzü Oluşturma
Python’da kendi modülünüzü yazmak için özel bir yapılandırmaya gerek yoktur. Aynı dizinde yer alan iki dosya üzerinden bir örnek oluşturalım.
İlk olarak hesaplayici.py adında bir dosya oluşturup içine aşağıdaki fonksiyonları yazalım:
def topla(a, b):
return a + b
def cikar(a, b):
return a - b
VERSIYON = "1.0.0"
Ardından aynı dizinde ana_program.py adında ikinci bir dosya oluşturalım ve yazdığımız bu modülü çağıralım:
import hesaplayici
toplam = hesaplayici.topla(15, 25)
fark = hesaplayici.cikar(50, 10)
print("Versiyon:", hesaplayici.VERSIYON)
print("Toplam:", toplam)
print("Fark:", fark)
ana_program.py çalıştırıldığında Python, aynı klasörde bulunan hesaplayici.py dosyasını bir modül olarak algılar, derler ve içindeki fonksiyonları erişilebilir kılar.
if __name__ == '__main__' Yapısının Önemi
Bir Python dosyasını doğrudan mı çalıştırdığınızı, yoksa başka bir dosya tarafından import mu edildiğini ayırt etmek için bu blok kullanılır.
Python bir dosyayı doğrudan çalıştırdığında dosyanın __name__ değişkenine '__main__' değerini atar. Ancak dosya bir modül olarak içe aktarıldığında bu değişken dosyanın kendi adını alır.
hesaplayici.py dosyasını şu şekilde güncelleyelim:
def topla(a, b):
return a + b
if __name__ == "__main__":
print("Bu dosya doğrudan çalıştırıldı.")
print("Test sonucu:", topla(5, 5))
Bu güncellemeyle birlikte, hesaplayici.py dosyasını terminalden çalıştırdığınızda test çıktıları ekrana basılır. Fakat bu dosyayı başka bir betikte import hesaplayici diyerek dahil ettiğinizde if bloğunun altındaki kodlar çalışmaz. Bu yöntem, modüllerin içine test kodları eklemek için idealdir.
Python Modülleri Nerede Arar?
Bir modülü içe aktarmaya çalıştığınızda Python belirli bir arama sırasını takip eder:
- İlk olarak çalıştırılan dosyanın bulunduğu mevcut dizine bakar.
- Ardından
PYTHONPATHortam değişkeninde tanımlı dizinleri kontrol eder. - Son olarak Python’un standart kütüphane dizinlerine ve
pipile kurulan paketlerin yer aldığısite-packagesklasörüne bakar.
Bu sıralama sys.path listesi üzerinden kontrol edilebilir:
import sys
for yol in sys.path:
print(yol)
Eğer içe aktarmak istediğiniz modül bu dizinlerden hiçbirinde bulunmuyorsa Python bir ModuleNotFoundError hatası fırlatır.
Modül ile Paket Arasındaki Fark
Konuyu derinleştirirken modül ve paket farkını bilmek gerekir:
- Modül, tek bir
.pydosyasıdır. - Paket ise içinde birden fazla modül ve genellikle bir
__init__.pydosyası barındıran klasör yapısıdır. Paketler, büyük kütüphaneleri hiyerarşik bir düzene sokmak için kullanılır.
Sonuç ve Sonraki Adımlar
Python’da import sistemi, temiz, sürdürülebilir ve modüler yazılımlar geliştirmenin temelini oluşturur. Kendi modüllerinizi yazarak kod tekrarından kurtulabilir, projelerinizi mantıksal birimlere ayırabilirsiniz.
Bir sonraki adımda, birden fazla modülü klasörler altında toplayarak Python paketleri (packages) oluşturmayı ve pip aracılığıyla üçüncü parti kütüphaneleri sanal ortamlara (virtual environment) dahil etmeyi deneyebilirsiniz.


Yorumlar
Henüz yorum yok. İlk yorumu siz yazın.