Заміна стандартної системи імпорту

Оновлено: 28.04.2023

Найнадійнішим механізмом заміни всієї системи імпорту є видалення вмісту за замовчуванням sys.meta_path, повністю замінивши його спеціальним хуком мета-шляху.

Якщо прийнятно лише змінювати поведінку операторів імпорту, не впливаючи на інші API, які отримують доступ до системи імпорту, тоді заміни вбудованої функції __import__() може бути достатньо. Цю техніку також можна використовувати на рівні модуля лише для зміни поведінки операторів імпорту в цьому модулі.

Щоб вибірково запобігти імпорту деяких модулів із хука на ранній стадії меташляху (замість повного відключення стандартної системи імпорту), достатньо викликати ModuleNotFoundError безпосередньо з find_spec() замість повернення None. Останнє вказує на те, що пошук меташляху має продовжуватися, тоді як виклик винятку негайно припиняє його.