ProgramlamaBackend Geliştirici

Python'da bir modülün içe aktarılması sırasında neler olduğunu anlatın. Python modülleri nasıl arar ve yükler? Yanlış içe aktarma düzenlemesi sırasında yapılabilecek tipik hatalar nelerdir?

Hintsage yapay zeka asistanı ile mülakatları geçin

Cevap.

Python'da bir modül içe aktarılırken, yorumlayıcı sys.path içinde listelenen dizinlerde onu arar. Önce standart modüller arasında, sonra .py, .pyc dosyaları ve __init__.py dosyasına sahip dizinler (paketler) arasında arar.

  1. Eğer modül zaten içe aktarılmışsa, tekrar içe aktarma sys.modules içinden onu alır.
  2. Eğer modül standart yollar içinde bulunamazsa, ModuleNotFoundError istisnası fırlatılır.
  3. İçe aktarım sırasında modül bayt koduna (.pyc) dönüştürülür ve önbelleğe alınır (yazma izni varsa).

Örnek:

# mypkg/__init__.py (boş olabilir) # mypkg/mod.py # main.py import mypkg.mod
  • Dosya adı, dizin yapısı, __init__.py nin varlığı/yokluğu (Python <3.3 için zorunlu) — her şey önemlidir.

Arama Nasıl Yapılır:

  • Öncelikle mutlak içe aktarma.
  • Daha sonra sys.path dizinlerinde arama (her zaman ilk olarak mevcut betik dizini gelir).
  • Paketlerde bağlam önemlidir (from . import ..., mutlak/nisbi içe aktarma).

Altta yatan bir soru.

Eğer betiğinizin bulunduğu dizinde random.py adlı bir dosya varsa ve standart random modülünü içe aktarmaya çalışırsanız, ne olur?

Cevap:

Yerli dosyam random.py içe aktarılır, standart kütüphane değil. İsim çakışmaları (shadowing) nedeniyle zor tespit edilen hataların sık bir nedeni — dosyaların isimlendirilmesine dikkat edilmesi gerekmektedir.

Konunun inceliklerini bilmemek nedeniyle yaşanan gerçek hataların örnekleri.


Hikaye

Büyük bir projede email.py modülü, kütüphanedeki standart email modülünü yanlışlıkla gölgede bıraktı ve geliştiriciler, üçüncü taraf kütüphanelerden e-posta ayrıştırma işlevlerinin neden çalışmadığını uzun süre anlayamadılar.


Hikaye

Bir ML projesinde os.path işlevi çalışmadı: ana betiğin yanında os.py adlı bir dosya vardı ve bu tüm standart modül çağrılarını engelledi. İsim çakışmasını bulana kadar bir ay boyunca hata ayıklama yapıldı.


Hikaye

Mikro hizmet mimarisinde, birkaç alt paket arasında modellerin ilişkisel içe aktarımını yapmaya çalışırken döngüsel içe aktarmalar oluştu. Problemi yalnızca proje yapısını yeniden düzenleyerek ve modül yükleme sırasını belirleyerek çözdüler.