Bize, yorumlayıcıyı yeniden başlatmadan bir Python modülünü güncellemek ve test etmek istediğimiz bir durum veriliyor. Bu, özellikle modül dosyalarını harici olarak değiştirdiğinizde ve bu değişikliklerin hemen yansımasını istediğinizde geliştirme sırasında faydalıdır. Python, reload() işlevini kullanarak önceden içe aktarılan bir modülü yeniden yüklememize olanak tanır. Örneğin betiğiniz çalışırken utils.py yardımcı program dosyasını düzenlediyseniz, yeniden yükleme, Python kabuğunu yeniden başlatmadan güncellenen içeriği yeniden içe aktarmanıza olanak tanır.
Bir Modülü Ne Zaman Yeniden Yüklemelisiniz?
- Hata ayıklama veya canlı test sırasında
- IPython veya Jupyter gibi etkileşimli tercümanları kullanırken
- Eklenti veya modüler sistemler geliştirirken
- Oturumu yeniden başlatmadan harici .py dosyalarında yapılan değişiklikleri yansıtmak için
Python 2.x'te Modülleri Yeniden Yükleme
Python 2.x'te önceden içe aktarılmış bir modülü yeniden yüklemek için yerleşik reload() işlevini doğrudan kullanabilirsiniz.
Pythonimport mymodule # Modify 'mymodule.py' externally here... reload(mymodule)
Açıklama:
- mymodule ilk olarak içe aktarma kullanılarak içe aktarılır.
- mymodule.py dosyasında harici değişiklikler yaptıktan sonra reload(mymodule) çağrısı, yorumlayıcıyı yeniden başlatmadan güncellenmiş sürümü yeniden yükler.
- Yeniden içe aktarmaya gerek yok; reload(), önceden içe aktarılmış bir modül nesnesinde çalışır.
Python 3.0'dan 3.3'e Modülleri Yeniden Yükleme
Python 3.0 ila 3.3 sürümlerinde yerleşik reload() işlevi kaldırıldı. Bunun yerine onu imp modülünden içe aktarmanız gerekir.
Pythonimport mymodule import imp # Modify 'mymodule.py' externally... imp.reload(mymodule)
Açıklama:
- İlk mymodule her zamanki gibi içe aktarıldı.
- imp modülü bu sürüm aralığında reload() işlevini sağlar.
- mymodule.py'yi düzenledikten sonra imp.reload(mymodule), güncellenmiş değişikliklerle modülü yeniden yükler.
Not: imp modülü Python 3.4'ten itibaren kullanımdan kaldırılmıştır ve yerini importlib almıştır.
Python 3.4 ve Üstü Sürümlerde Modülleri Yeniden Yükleme
Python 3.4'ten itibaren bir modülü yeniden yüklemenin önerilen yolu importlib.reload() işlevini kullanmaktır.
Pythonimport mymodule import importlib # Modify 'mymodule.py' externally... importlib.reload(mymodule)
Açıklama:
- mymodule ilk önce normal şekilde içe aktarılır.
- Daha sonra importlib.reload(mymodule) güncellenen modülü yeniden yükler.
- Bu, Python 3.4+ sürümündeki modülleri yeniden yüklemenin mevcut ve resmi yoludur.
Not: Modül değişikliklerini test ederken bu yöntemi tüm modern Python komut dosyalarında ve not defterlerinde kullanın.
Python'da Bir Modülü Kaldırabilir misiniz?
Şu anda Python, bir modülü içe aktardıktan sonra tamamen boşaltmak için yerleşik bir yol sağlamamaktadır. Bir modül belleğe yüklendikten sonra program bitene kadar sys.modules dosyasında kullanılabilir durumda kalır. Bir modülü sys.modules dosyasından silebilmenize rağmen, bu onun bellekten tamamen silineceğini veya referanslarının kaybolduğunu garanti etmez:
Pythonimport mymodule import sys del sys.modules['mymodule']
Bu, modülü yalnızca sys.modules önbelleğinden kaldıracaktır. Herhangi bir değişken veya nesne hala modüle referans veriyorsa, modül tamamen boşaltılmayacaktır.
Boşaltma Neden Desteklenmiyor?
- Python, bellekteki modülleri global olarak yönetir.
- Kodunuzun bazı bölümleri hala eski modüle referanslar taşıyorsa, dinamik olarak boşaltma işlemi tutarsız davranışlara yol açabilir.