13 PEP 302: Nowe punkty zaczepienia importu

Choć tworzenie własnych punktów zaczepienia dla importu było możliwe od czasu wprowadzenia modułu ihooks w Pythonie 1.3, to właściwie nikomu dostępny mechanizm nie odpowiadał, gdyż był bałaganiarski i zawiły. Pojawiało się wiele alternatywnych propozycji, takich, jak moduły imputil i iu, jednak żadna z nich nie zystała powszechnej akceptacji i nie pozwalała na łatwe użycie z poziomu kodu napisanego w C.

Dokument PEP 302 zapożycza pomysły od swoich poprzedników, szczególnie z modułu iu autorstwa Gordona McMillana. Do modułu sys dodano trzy nowe elementy:

Obiekt importera musi mieć jedną metodę, find_module(fullname, path=None). Jako fullname (pełna_nazwa) zostanie przekazana nazwa modułu lub pakietu, np. "string" czy "distutils.core". Metoda find_module() musi zwrócić obiekt loadera, który oferuje metodę load_module(fullname) -- odpowiada ona za utworzenie i zwrócenie odpowiedniego obiektu modułu.

Nieco uproszczony pseudokod, odpowiadający nowemu mechanizmowi importowania w Pythonie, wygląda więc następująco (szczegóły zawarte są w dokumencie PEP 302):

for mp in sys.meta_path:
    ładowarka = mp(pełna_nazwa)
    if ładowarka is not None:
        <moduł> = ładowarka.load_module(pełna_nazwa)
        
for ścieżka in sys.path:
    for pkt_zacz in sys.path_hooks:
        try:
            importer = pkt_zacz(ścieżka)
        except ImportError:
            # Wystąpił wyjątek ImportError, spróbuj inne punkty zaczepienia
            pass
        else:
            ładowarka = importer.find_module(pełna_nazwa)
            <moduł> = ładowarka.load_module(pełna_nazwa)

# Nie odnaleziono!
raise ImportError

Zobacz też:

PEP 302, Nowe punkty zaczepienia importu
Autor dokumentu: Just van Rossum i Paul Moore. Autor implementacji: Just van Rossum.

Zajrzyj do Informacji na temat tej publikacji... aby pomóc w jej rozwoju.