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.
sys.modules içinden onu alır.ModuleNotFoundError istisnası fırlatılır..pyc) dönüştürülür ve önbelleğe alınır (yazma izni varsa).# mypkg/__init__.py (boş olabilir) # mypkg/mod.py # main.py import mypkg.mod
__init__.py nin varlığı/yokluğu (Python <3.3 için zorunlu) — her şey önemlidir.sys.path dizinlerinde arama (her zaman ilk olarak mevcut betik dizini gelir).from . import ..., mutlak/nisbi içe aktarma).Eğer betiğinizin bulunduğu dizinde
random.pyadlı bir dosya varsa ve standartrandommodülünü içe aktarmaya çalışırsanız, ne olur?
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.
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.