Я сопровождающий модуль runpy в Python и один из сопровождающих текущей системы импорта. Несмотря на то, что наша система импорта впечатляюще гибкая, я бы посоветовал не принимать ее оптом, не внося некоторых изменений - из-за проблем с обратной совместимостью, есть куча вещей, которые более неудобны, чем они могли бы быть в противном случае.
Одна вещь, которая мешает PEP 302 в Python, - это то, сколько времени нам понадобилось, чтобы перевести основную систему импорта на ее использование. На протяжении большей части десятилетия любой, кто делал что-то сложное с использованием ловушек импорта, застревал в реализации двух частей: одна обрабатывает загрузчики, совместимые с PEP 302 (например, импорт zip), а вторая - стандартный механизм импорта на основе файловой системы. Только в следующих версиях 3.3 обработка загрузчиков PEP 302 также позаботится об обработке модулей, импортированных с помощью стандартного механизма импорта файловой системы. Постарайтесь не повторять эту ошибку, если вы можете избежать ее.
PEP 420 (реализовано для Python 3.3) вносит некоторые дополнения в протокол, чтобы позволить импортерам добавлять части в пакеты пространства имен. Это также устраняет проблему именования в определении API Finder (фактически заменяя неправильно названный «find_module» более точным «find_loader»). Надеемся, что все это будет более четко задокументировано в спецификации языка к тому времени, когда 3.3rc1 появится через пару недель.
Другая заметная проблема заключается в том, что подход, документированный специально в PEP 302, имеет слишком большое глобальное состояние процесса. Не идите по этому пути - попробуйте инкапсулировать состояние в более согласованную объектную модель, чтобы немного легче выборочно импортировать другие модули (модули расширения C - основа для того, чтобы сделать любую такую инкапсуляцию полностью эффективной, но даже некоторый уровень инкапсуляции может быть полезным)
В PEP 406 (http://www.python.org/dev/peps/pep-0406/) обсуждается возможная обратно совместимая эволюция подхода Python с улучшенной инкапсуляцией состояний. Если у вас есть модель инкапсулированного состояния с самого начала, тогда вы можете соответствующим образом определить свои API и избежать того, чтобы импортеры и загрузчики обращались к глобальному состоянию вообще (вместо того, чтобы передавать ссылку на активный механизм).
Еще одна недостающая часть в PEP 302 - это возможность запросить у импортера итератор для модулей, предоставляемых этим импортером (это необходимо для таких вещей, как утилиты замораживания и утилиты автоматической документации, которые извлекают строки документации). Так как это невероятно полезно, вам, вероятно, лучше было бы стандартизировать его с самого начала: http://docs.python.org/dev/library/pkgutil#pkgutil.iter_modules (мы, вероятно, в конце концов повысим это до формально определенного API в Python 3.4)
И мой последний комментарий заключается в том, что вы должны внимательно посмотреть на разделение ответственности между системой импорта и объектами загрузчика. В частности, рассмотрите возможность разделения API «load_module» на отдельные шаги «init_module» и «exec_module». Это должно позволить вам минимизировать степень, в которой загрузчики должны напрямую взаимодействовать с состоянием импорта.
PEP 302 и importlib являются отличной отправной точкой для более гибкой системы импорта, но мы определенно допустили ошибки, которых стоит избегать.