Python’da Modül İçe Aktarma
Herhangi bir modülde bulunan işlevselliği kullanmak için onu geçerli programınıza içe aktarmanız gerekir. İstediğiniz modül adıyla birlikte import anahtar kelimesini kullanmanız yeterlidir. Yorumlayıcı bir import ifadesiyle karşılaştığında modülü geçerli programınıza dahil eder.
Bir modülün içindeki fonksiyonları modül adıyla birlikte nokta (.) operatörünü kullanarak çağırabilirsiniz.
Önce standart kütüphane modüllerinin nasıl kullanılacağını görelim. Aşağıdaki örnekte math modülü programa içe aktarılır, böylece sqrt() fonksiyonunu kullanabilirsiniz.
import math # Import the math module
num = 4
print(math.sqrt(num)) # Call the sqrt() function from the math module
Verimlilik nedeniyle, her modül yorumlayıcı oturumu başına yalnızca bir kez içe aktarılır. Bu nedenle modüllerinizde değişiklik yaparsanız yorumlayıcıyı yeniden başlatmalısınız.
Daha önce içe aktardığınız bir modülü yeniden yüklemek isterseniz (ör. düzenledikten sonra), importlib.reload() kullanın.
Eski yerleşik reload() fonksiyonunun Python 3’te artık bulunmadığını unutmayın — Python 3.4+’ta modülleri yeniden yüklemenin güncel ve resmi yolu importlib.reload()’dır.
import importlib
importlib.reload(module_name)
Not: sys, __main__, builtins ve diğer kilit modülleri yeniden yüklemek önerilmez. Birçok uzantı modülü birden fazla kez başlatılacak şekilde tasarlanmamıştır ve yeniden yüklendiğinde öngörülemeyen şekillerde başarısız olabilir. Geliştirme sırasında yalnızca kendi modüllerinizi yeniden yüklemekle yetinin.
Yakında: Python “tembel içe aktarma” (lazy imports) getiriyor. Bunlar, modüllerin yüklenmesini ilk kullanılana kadar erteleyerek başlangıç sürelerini hızlandıracak. Bu, özellikle büyük projelerde faydalıdır; çünkü çoğu modül dosyanın en üstünde içe aktarılır ama hemen gerekmez.
Kendi Python Modüllerinizi Nasıl Yazarsınız
Artık bir modülün programınıza nasıl içe aktarılacağını öğrendiğinize göre, sıra kendi modülünüzü yazıp başka bir programda kullanmaya geldi. Bir modül yazmak, herhangi bir Python dosyası yazmakla aynıdır. calculation.py dosyasında iki sayıyı toplama/çıkarma fonksiyonları yazarak başlayalım.
def add(x,y):
return (x+y)
def sub(x,y):
return (x-y)
Bu betiği komut satırında çalıştırmayı denerseniz hiçbir şey olmaz; çünkü programa herhangi bir şey yapmasını söylemediniz. Aynı dizinde module_test.py adında başka bir Python betiği oluşturun ve aşağıdaki kodu yazın.
import calculation #Importing calculation module
print(calculation.add(1,2)) #Calling function defined in the calculation module
module_test.py dosyasını çalıştırırsanız çıktı olarak "3" görürsünüz. Yorumlayıcı import ifadesiyle karşılaştığında calculation modülünü kodunuza dahil etti ve nokta operatörünü kullanarak add() fonksiyonuna erişebildiniz.
Çalıştırılabilir kodu if __name__ == "main__" ile koruma
Modül yazarken edinmeniz gereken önemli bir alışkanlık var: Yalnızca doğrudan çalıştırmak istediğiniz (içe aktarıldığında değil) kodu if __name__ == "__main__" korumasına sarmak.
# calculation.py
def add(x, y):
return x + y
def sub(x, y):
return x - y
if __name__ == "__main__":
# This only runs when you execute calculation.py directly
# It will NOT run when another script imports this module
print(add(1, 2))
__name__ değerini "__main__" olarak ayarlar. Başka bir betik tarafından içe aktarıldığında ise __name__ modülün dosya adına ayarlanır. Bu da yukarıdaki print ifadesinin, birisi calculation modülünü kendi programına içe aktardığında beklenmedik şekilde tetiklenmeyeceği anlamına gelir.Python’da Modül İçe Aktarmanın Diğer Yolları
Modülleri içe aktarmanın başka yolları da vardır:
-
from .. importifadesi -
from .. import *ifadesi -
içe aktarılan modülün yeniden adlandırılması
from module import name kullanma
from..import ifadesi, bir modüldeki her şeyi içe aktarmak yerine belirli fonksiyonları/değişkenleri içe aktarmanıza olanak tanır. Önceki örnekte module_test.py dosyasına calculation modülünü içe aktardığınızda hem add() hem de sub() fonksiyonları içe aktarılmıştı. Peki ya kodunuzda yalnızca add() fonksiyonuna ihtiyaç duyuyorsanız? İşte from..import kullanımını gösteren bir örnek.
from calculation import add
print(add(1,2))
Yukarıdaki örnekte yalnızca add() fonksiyonu içe aktarılıp kullanılmıştır. add() kullanımına dikkat ettiniz mi? Artık modül adını kullanmadan doğrudan erişebilirsiniz. Birden fazla özelliği de içe aktarabilirsiniz; içe aktarma ifadesinde virgülle ayırmanız yeterlidir. Aşağıdaki örneğe bakın:
from calculation import add,sub
from module import * kullanma
Bu ifadeyle bir modülün tüm özelliklerini içe aktarabilirsiniz. Bu, içe aktarılan modülün tüm özelliklerini kodunuzda görünür kılar.
from .. import * kullanımını gösteren bir örnek:
from calculation import *
print(add(1,2))
print(sub(3,2))
Not ki profesyonel dünyada from..import ve from..import* kullanmaktan kaçınmalısınız. Bu yaklaşım, modüldeki tüm adlarla isim alanınızı kirletir, kodu okurken bir fonksiyonun nereden geldiğini anlamayı imkânsız hale getirir ve zaten tanımladığınız adları fark ettirmeden ezebilir. Bunun yerine açık içe aktarımları kullanın.
Python’da Modülleri Yeniden Adlandırma
İçe aktardığınız modülü yeniden adlandırabilirsiniz; bu, modüle daha anlamlı bir ad vermek istediğinizde veya modül adı tekrar tekrar kullanmak için fazla uzunsa yararlı olabilir. Bunu yapmak için as anahtar kelimesini kullanabilirsiniz. Aşağıdaki örnek programınızda nasıl kullanacağınızı açıklar.
import calculation as cal
print(cal.add(1,2))
calculation adını cal olarak değiştirerek yazma zahmetinden biraz tasarruf ettiniz.
Not artık calculation.add(1,2) kullanamazsınız; çünkü programınızda calculation artık tanınmaz. Olan şu: Bir modülü as ile takma adlandırdığınızda, o betik içinde özgün ad kullanılamaz hâle gelir.
Python’da Modül Arama Yolu
Modüllerinizin farklı program veya projelerde kullanılmasını isteyebilirsiniz ve fiziksel konumları dizinde farklı olabilir. Başka bir dizinde bulunan bir modülü kullanmak istiyorsanız Python’un sunduğu bazı seçenekler vardır.
calculation adlı bir modül içe aktardığınızda, yorumlayıcı önce bu ada sahip yerleşik bir modül arar. Bulunamazsa, ardından sys.path değişkeninin sunduğu dizinler listesinde calculation.py adlı bir dosya arar. sys.path şu konumları içerir:
-
Girdi betiğini içeren dizin (veya geçerli dizin)
-
PYTHONPATH(kabuk değişkeniPATHile aynı sözdizimine sahip dizin adlarının listesi) -
Kuruluma bağlı varsayılan değer
module_test.py dosyasının /home/datacamp/ dizininde olduğunu ve calculation.py dosyasını /home/test/ dizinine taşıdığınızı varsayalım. Python yorumlayıcısının modülü arayacağı yollar listesine /home/test/ dizinini dahil etmek için sys.path’i değiştirebilirsiniz. Bunun için module_test.py dosyasını aşağıdaki şekilde düzenlemeniz gerekir:
import sys
sys.path.append('/home/test/')
import calculation
print(calculation.add(1,2))
Python’da Bayt Derlenmiş Dosyalar
Bir modülü içe aktarmak programların yürütme süresini artırır; bu nedenle Python’un bunu hızlandırmak için bazı yöntemleri vardır. Yollardan biri, .pyc uzantılı bayt derlenmiş dosyalar oluşturmaktır.
Python dahili olarak kaynak kodu bayt kodu adı verilen ara bir biçime dönüştürür. Sonra bunu bilgisayarınızın yerel diline çevirir ve çalıştırır. Bu .pyc dosyası, modülü bir sonraki sefere farklı bir programdan içe aktardığınızda işe yarar — bir modülü içe aktarmak için gereken işlemenin bir kısmı zaten yapıldığından çok daha hızlı olacaktır. Ayrıca bu bayt derlenmiş dosyalar platformdan bağımsızdır.
Not bu .pyc dosyaları genellikle ilgili .py dosyalarıyla aynı dizinde oluşturulur. Python’un o dizinde dosya yazma izni yoksa .pyc dosyaları oluşturulmaz. Bu dosyalar genellikle __pycache__ dizininde, .py dosyalarınızın yanında, kullanılan Python sürümünü yansıtan calculation.cpython-312.pyc gibi adlarla saklanır. Bu klasörü güvenle yok sayabilir veya .gitignore ile hariç tutabilirsiniz. Python bunu otomatik olarak yönetir.
Python dir() Fonksiyonu
dir() fonksiyonu bir modülde tanımlanan tüm adları bulmak için kullanılır. Bir modülde tanımlanan adları içeren sıralı bir dize listesi döndürür.
import calculation
print(calculation.add(1,2))
print(dir(calculation))
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'add', 'sub']
Çıktıda modülde tanımladığınız add ve sub fonksiyonlarının adlarını görebilirsiniz. __name__ özniteliği modülün adını içerir. Alt çizgi ile başlayan tüm öznitelikler, bir modülle ilişkili varsayılan Python öznitelikleridir.
Sonuç
Bir modül oluşturmak, kodun daha iyi yönetimi ve yeniden kullanılabilirliği için gereklidir. Python, import anahtar kelimesiyle içe aktarabileceğiniz bazı yerleşik modüller sunar. Python ayrıca kendi modüllerinizi oluşturmanıza ve programlarınızda kullanmanıza olanak tanır. Modül kullanımının maliyetini azaltmak için bayt derlenmiş dosyalar sağlar; bu da yürütmeyi hızlandırır. Bir programda kullanılan modülde tanımlanan öznitelikleri öğrenmek için dir() fonksiyonunu kullanabilirsiniz. Bu hem önceden tanımlı modüller hem de kullanıcı tanımlı modüller için geçerlidir.
Python hakkında daha fazla bilgi edinmek isterseniz Intermediate Python for Data Science kursumuza göz atabilirsiniz.
Yazar
Nishant Kumar
SSS
Bir modülü bir fonksiyonun içinde içe aktarabilir miyim?
Evet. Modülleri fonksiyonların içinde de içe aktarabilirsiniz; ancak netlik ve performans için genellikle dosyanın en üstünde içe aktarmak daha iyidir.
İki modülün aynı ada sahip olması durumunda ne olur?
Python, modül arama yolunda (sys.path) bulduğu ilk eşleşmeyi içe aktarır. Çakışmalardan kaçınmak için adlandırmaya dikkat edin.
Modülümü .pyc olarak elle derlemem gerekir mi?
Hayır. Python bir modülü içe aktardığınızda, yazma izinleri varsa, .pyc dosyalarını otomatik olarak oluşturur.
Bir modülün nereden içe aktarıldığını nasıl kontrol edebilirim?
from module import * kullanmak uygun mudur?
Çalışır ancak üretim kodunda önerilmez. İsim alanını kirletebilir ve nelerin kullanıldığını takip etmeyi zorlaştırabilir.

Python öğrenmeye ilk başladığınızda her şeyi tek bir dosyada yazarsınız. Bu, küçük betikler için işe yarar; ancak programlarınız büyüdükçe tek bir dosya okumayı ve bakımını zorlaştırır, projeler arasında yeniden kullanımı ise imkânsız hale getirir. Python’un buna sunduğu çözüm modüllerdir.
Bu eğitimde modüllerin ne olduğunu, nasıl içe aktarılacağını, kendi modüllerinizi nasıl yazacağınızı ve başlangıç seviyesindeki betiklerle üretim ortamına hazır kodu birbirinden ayıran en iyi uygulamaları öğreneceksiniz. Kendi modüllerinizi yazmaya başlamadan önce Intro to Python for Data Science kursumuza göz atmanızı öneririm.
Python Modülleri Nedir?
Bir modül basitçe bir Python dosyasıdır. Python kodu — fonksiyonlar, sınıflar, değişkenler veya çalıştırılabilir mantık — içeren
.pyuzantılı herhangi bir dosya bir modüldür.calculation.pyadlı bir dosya kaydettiğinizde,calculationadlı bir modül oluşturmuş olursunuz.Modüllerin gücü, bunları diğer programlara içe aktarabilmekten gelir. Aynı fonksiyonu birden fazla betiğe kopyalayıp yapıştırmak yerine, onu bir modülde bir kez tanımlar ve ihtiyaç duyduğunuzda içe aktarırsınız. Python’un standart kütüphanesi de tam olarak böyle çalışır:
math,osverandomgibi önceden oluşturulmuş modülleri tek satırla herhangi bir programa dahil edebilirsiniz.Daha spesifik olarak, Python’da karşınıza çıkacak üç tür modül vardır:
Yerleşik modüller: Python’la birlikte gelir; az önce bahsettiğim
mathveosgibi.Üçüncü taraf modüller:
pipile kurulur;numpyveyapandasgibi.Kendi modülleriniz: kendinizin yazdığı herhangi bir
.pydosyası.