Шаг 192.
Python: сборник рецептов. Модули и пакеты. Импортирование модулей с использованием имени, передаваемого в форме строки

    На этом шаге мы рассмотрим использование importlib. import_module() для импортирования модулей.

Задача

    У вас есть имя модуля, который вы хотите импортировать, но оно хранится в строке. Вы хотели бы вызвать команду import с этой строкой.

Решение

    Используйте функцию importlib.import_module(), чтобы вручную импортировать модуль или часть пакета, имена которых передаются в форме строк. Например:

>>> import importlib
>>> math = importlib.import_module('math')
>>> math.sin(2)
0.9092974268256817
>>> mod = importlib.import_module('urllib.request')
>>> u = mod.urlopen('http://www.python.org')
>>>

    Функция import_module() просто выполняет те же шаги, что и import, но возвращает получившийся объект модуля обратно в результате. Вам нужно просто сохранить его в переменной и затем использовать, как обычный модуль.

    Если вы работаете с пакетами, import_module() также может быть использована для выполнения относительного импортирования. Однако вам нужно предоставить ей дополнительный аргумент. Например:

import importlib

# Так же, как 'from . import b' 
b = importlib.import_module('.b', __package__)


Обсуждение

    Задача ручного импортирования модулей с использованием import_module() чаще всего возникает при написании кода, который как-то манипулирует модулями или создает над ними обертки. Например, если вы реализовываете какой-то собственный механизм импортирования, который подразумевает загрузку модуля по имени и применение патчей к загруженному коду.

    В старом коде вы иногда сможете встретить использование встроенной функции import() для выполнения импортирования. Хотя это и работает, importlib. import_module() обычно проще в использовании.

    На следующем шаге приведен продвинутый пример кастомизации процесса импортирования.

    На следующем шаге мы рассмотрим загрузку модулей с удаленного компьютера с использованием хуков импортирования.




Предыдущий шаг Содержание Следующий шаг