Obok ncoghlan jestem drugim opiekunem systemu importu Pythona i autorem jego bieżącej implementacji importlib (http://docs.python.org/dev/py3k/library/importlib.html). Wszystko, co Nick powiedział, zgadzam się, więc chcę tylko dodać dodatkowe informacje.
Po pierwsze, nie polegaj zbytnio bezpośrednio na PEP 302, ale zamiast tego spójrz na to, co zapewnia importlib w kategoriach abstrakcyjnych klas bazowych itp. Dla kompatybilności wstecznej rzeczy musiały być kompatybilne z PEP 302, ale musiałem dodać trochę moich własne interfejsy API, aby zakończyć rozwijanie obsługi prawdziwej elastyczności.
Inną ważną kwestią jest to, że dajesz programistom dwa elementy elastyczności. Jedną z nich jest możliwość przechowywania kodu w sposób inny niż tylko bezpośrednio w systemie plików jako pojedyncze pliki (nazywam to zapleczem pamięci do importowania), np. Pozwala to na kod w pliku zip, bazie danych sqlite itp. Drugim wsparciem jest umożliwienie kontroli w pewien sposób kodu przed lub po przetworzeniu, np. Quixote (https://www.mems-exchange.org/software/quixote/) i jego alternatywne użycie literałów łańcuchowych nieprzypisanych do zmienna byłaby znacznie łatwiejsza do obsługi.
Podczas gdy ten drugi jest rzadko potrzebny, ten drugi jest miejscem, gdzie musisz się martwić o wsparcie. I tutaj kończy się praktycznie redefinicja interfejsów API interakcji systemu plików. Ponieważ niektóre osoby potrzebują zasobów przechowywanych jako pliki z ich kodem, musisz zapewnić dobry sposób czytania plików, odkrywania plików itp. Nadal musimy wdrożyć część interfejsu API w celu wykrycia, które pliki danych są dostępne, umieszczenia ich na liście itp. .
Ale wtedy potrzebujesz również interfejsów API specyficznych dla kodu. Jak wspomniał Nick, w końcu potrzebujesz interfejsów API do odkrycia, jakie moduły zawiera pakiet itp., Które nie są specyficzne dla plików. Istnieje dziwna dwoistość posiadania interfejsów API do obsługi modułów, w których wyodrębniono pojęcie plików, ale w końcu trzeba udostępnić interfejsy API, aby uzyskać dostęp do danych zasobów podobnych do plików. I gdy tylko spróbujesz wdrożyć jedno w odniesieniu do drugiego, aby uniknąć powielania, wody stają się naprawdę mętne (tzn. Ludzie polegają na oczekiwanej strukturze ścieżki pliku itp., Nie zwracając uwagi na fakt, że ścieżka może nie być prawdziwą ścieżką ponieważ dotyczy pliku zip zawierającego kod, a nie tylko plik). IOW będziesz musiał zaimplementować dwa podobne interfejsy API, ale na dłuższą metę będzie ci lepiej.
Jak powiedział Nick, nasze rozwiązanie jest dobrym punktem wyjścia, ale nie w ten sposób zrobiłbym to dzisiaj, gdybym projektował API od zera.