Я підтримувач запущеного модуля Python та один із підтримуючих поточну систему імпорту. Хоча наша система імпорту надзвичайно гнучка, я б радив не застосовувати її оптом, не роблячи декількох змін - через зворотні проблеми сумісності, є маса речей, які більш незручні, ніж вони інакше потребували б.
Одне, що шкодить PEP 302 в Python, - це те, як довго нам знадобилося перетворити основну систему імпорту на її використання. Більшу частину десятиліття кожен, хто робив що-небудь складне з гачками імпорту, застряг, реалізуючи дві частини: одна обробка навантажувачів, сумісних з PEP 302 (наприклад, імпорт поштових індексів), а друга - обробка стандартного механізму імпорту на основі файлової системи. Лише в наступному 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 - це чудова відправна точка для більш гнучкої системи імпорту, але ми неодмінно помилилися, яких варто уникати.