Модуль importlib.machinery
содержит различные объекты, которые помогают оператору import
найти и загрузить модули.
importlib.machinery.SOURCE_SUFFIXES
importlib.machinery.DEBUG_BYTECODE_SUFFIXES
importlib.machinery.OPTIMIZED_BYTECODE_SUFFIXES
importlib.machinery.BYTECODE_SUFFIXES
importlib.machinery.EXTENSION_SUFFIXES
importlib.machinery.all_suffixes
importlib.machinery.BuiltinImporter
importlib.machinery.FrozenImporter
importlib.machinery.WindowsRegistryFinder
importlib.machinery.PathFinder
importlib.machinery.FileFinder
importlib.machinery.SourceFileLoader
importlib.machinery.SourcelessFileLoader
importlib.machinery.ExtensionFileLoader
importlib.machinery.ModuleSpec
importlib.machinery.SOURCE_SUFFIXES
:Список строк, представляющих распознанные файловые суффиксы для исходных модулей.
>>> import importlib.machinery >>> importlib.machinery.SOURCE_SUFFIXES # ['.py']
importlib.machinery.DEBUG_BYTECODE_SUFFIXES
:Устарело с версии Python-3.5: используйте взамен importlib.machinery.BYTECODE_SUFFIXES
.
importlib.machinery.OPTIMIZED_BYTECODE_SUFFIXES
:Устарело с версии Python-3.5: используйте взамен importlib.machinery.BYTECODE_SUFFIXES
.
importlib.machinery.BYTECODE_SUFFIXES
:Список строк, представляющих распознанные файловые суффиксы для модулей байт-кода, включая начальную точку.
>>> import importlib.machinery >>> importlib.machinery.BYTECODE_SUFFIXES # ['.pyc']
importlib.machinery.EXTENSION_SUFFIXES
:Список строк, представляющих распознанные суффиксы файлов для модулей расширения.
>>> import importlib.machinery >>> importlib.machinery.EXTENSION_SUFFIXES # ['.cpython-36m-x86_64-linux-gnu.so', '.abi3.so', '.so']
importlib.machinery.all_suffixes()
:Метод importlib.machinery.all_suffixes()
возвращает объединенный список строк, представляющих все файловые суффиксы для модулей, распознаваемых стандартным механизмом импорта. Это помощник для кода, который должен знать, ссылается ли путь файловой системы на модуль без каких-либо подробностей о типе модуля.
>>> import importlib.machinery >>> importlib.machinery.all_suffixes() # ['.py', '.pyc', '.cpython-36m-x86_64-linux-gnu.so', '.abi3.so', '.so']
importlib.machinery.BuiltinImporter
:Класс importlib.machinery.BuiltinImporter
импортер для встроенных модулей. Все известные встроенные модули перечислены в sys.builtin_module_names
.
Этот класс реализует ABCs importlib.abc.MetaPathFinder
и importlib.abc.InspectLoader
.
Этот класс определяет только методы класса, чтобы облегчить необходимость создания экземпляров.
importlib.machinery.FrozenImporter
:Класс importlib.machinery.FrozenImporter
импортер для замороженных модулей. Этот класс реализует ABCs importlib.abc.MetaPathFinder
и importlib.abc.InspectLoader
.
Этот класс определяет только методы класса, чтобы облегчить необходимость создания экземпляров.
importlib.machinery.WindowsRegistryFinder
:Класс importlib.machinery.WindowsRegistryFinder
Искатель для модулей, объявленных в реестре Windows. Этот класс реализует ABC importlib.abc.MetaPathFinder
.
Этот класс определяет только методы класса, чтобы облегчить необходимость создания экземпляров.
Устаревший с версии Python-3.6: вместо него используйте конфигурацию площадки. Будущие версии Python не будут включать этот поиск по умолчанию.
importlib.machinery.PathFinder
:Класс importlib.machinery.PathFinder
Средство поиска для атрибутов sys.path
и пакета __path__
. Этот класс реализует ABC importlib.abc.MetaPathFinder
.
Этот класс определяет только методы класса, чтобы облегчить необходимость создания экземпляров.
Атрибуты и методы класса:
find_spec(fullname, path=None, target=None)
:
Метод класса, который пытается найти спецификацию для модуля, указанного fullname
в sys.path
или, если определено, в пути path
. Для каждой найденной записи пути проверяется sys.path_importer_cache
. Если найден не ложный объект, он используется в качестве искателя записи пути для поиска искомого модуля. Если в sys.path_importer_cache
не найдено ни одной записи, то для sys.path_hooks
ищется искатель для пути и, если он найден, сохраняется в sys.path_importer_cache
вместе с запросом о модуле. Если искатель не найден, то возвращается None
и одновременно сохраняется в кеше.
find_module(fullname, path=None)
:
Устаревшая обертка для метода .find_spec()
.
invalidate_caches()
:
Вызывает importlib.abc.PathEntryFinder.invalidate_caches()
для всех искателей, хранящихся в sys.path_importer_cache
, которые определяют метод. В противном случае записи в sys.path_importer_cache
со значением None удаляются.
importlib.machinery.FileFinder(path, *loader_details)
:Класс importlib.machinery.FileFinder()
Конкретная реализация importlib.abc.PathEntryFinder
, который кэширует результаты из файловой системы.
Аргумент path
- это каталог, в котором выполняется поиск.
Аргумент *loader_details
представляет собой переменное число кортежей из 2 элементов, каждый из которых содержит загрузчик и последовательность суффиксов файлов. Ожидается, что загрузчики будут вызываться и принимать два аргумента имя модуля и путь к найденному файлу.
Средство поиска будет кэшировать содержимое каталога по мере необходимости, делая статистические вызовы для каждого модуля поиска, чтобы убедиться, что кэш не устарел. Поскольку стабильность кеша зависит от степени детализации информации о состоянии файловой системы OS, существует потенциальное условие поиска: поиск модуля, создание нового файла, а затем поиск модуля, который представляет новый файл. Если операции происходят достаточно быстро, чтобы вписаться в гранулярность вызовов статистики, поиск модуля завершится неудачей. Чтобы этого не происходило, при динамическом создании модуля обязательно вызовите importlib.invalidate_caches()
.
Атрибуты и методы класса:
path
:
Путь, по которому будет искать искатель.
find_spec(fullname, target=None)
:
Метод find_spec()
будет пытаться найти спецификацию для обработки полного имени в пути fullname
.
find_loader(fullname)
:
Метод find_loader()
будет пытаться найти загрузчик для обработки полного имени в пути fullname
.
invalidate_caches()
:
Очистить внутренний кеш.
path_hook(*loader_details)
:
Метод класса, который возвращает замыкание для использования в sys.path_hooks
. Экземпляр FileFinder
возвращается по закрытию с помощью аргумента пути к закрытию loader_details
напрямую и косвенно.
Если аргумент к закрытию не существующий каталог, то поднимается исключение ImportError
.
importlib.machinery.SourceFileLoader(fullname, path)
:Класс importlib.machinery.SourceFileLoader()
Конкретная реализация importlib.АВС.SourceLoader
на подклассы importlib.АВС.FileLoader
и предоставляет некоторые конкретные реализации других методов.
Атрибуты и методы класса:
name
:
Имя модуля, который будет обрабатываться этим загрузчиком.
path
:
Путь к исходному файлу.
is_package(fullname)
:
True, если путь fullname
указан для пакета.
path_stats(path)
:
Конкретная реализация importlib.abc.SourceLoader.path_stats()
.
set_data(path, data)
:
Конкретная реализация importlib.abc.SourceLoader.set_data()
.
load_module(name=None)
:
Конкретная реализация importlib.abc.Loader.load_module()
, где указание имени загружаемого модуля name
необязательно.
Устарело с версии Python-3.6: взамен используйте importlib.abc.Loader.exec_module()
.
importlib.machinery.SourcelessFileLoader(fullname, path)
:Класс importlib.machinery.SourcelessFileLoader()
это конкретная реализация importlib.abc.FileLoader
, которая может импортировать файлы байт-кода, т.е. если файлов с исходным кодом не существует.
Обратите внимание, что прямое использование файлов байт-кода запрещает использование ваших модулей всеми реализациями Python или новыми версиями Python, которые изменяют формат байт-кода.
Атрибуты и методы класса:
name
:
Имя модуля, который будет обрабатывать загрузчик.
path
:
Путь к файлу байт-кода.
is_package(fullname)
:
Определяет, является ли модуль fullname
пакетом на основе пути path
.
get_code(fullname)
:
Возвращает объект кода для имени name
, созданного из пути path
.
get_source(fullname)
:
Возвращает None
, если файлы байт-кода не имеют исходников.
load_module(name=None)
:
Конкретная реализация importlib.abc.Loader.load_module()
, где указание имени name
загружаемого модуля необязательно.
Метод устарел с версии Python-3.6: взамен используйте importlib.abc.Loader.exec_module()
.
importlib.machinery.ExtensionFileLoader(fullname, path)
:Класс importlib.machinery.ExtensionFileLoader()
это конкретная реализация importlib.АВС.ExecutionLoader
для модулей расширения.
Аргумент fullname
указывает имя модуля, который должен поддерживать загрузчик. Аргумент path
- это путь к файлу модуля расширения.
Атрибуты и методы класса:
name
:
Название модуля, поддерживаемого загрузчиком.
path
:
Путь к модулю расширения.
create_module(spec)
:
Создает объект модуля из заданной спецификации.
exec_module(module)
:
Инициализирует данный объект модуля.
is_package(fullname)
:
Возвращает True
, если путь к файлу указывает на модуль пакета __init__
на основе importlib.machinery.EXTENSION_SUFFIXES
.
get_code(fullname)
:
Возвращает None
, если у модулей расширения отсутствует объект кода.
get_source(fullname)
:
Возвращает None
, если модули расширения не имеют исходного кода.
get_filename(fullname)
:
Возвращает путь.
importlib.machinery.ModuleSpec(name, loader, *, origin=None, loader_state=None, is_package=None)
:Класс importlib.machinery.ModuleSpec()
это спецификация для состояния модуля, относящегося к системе импорта. Обычно спецификация отображается как атрибут модуля __spec__
. В описаниях ниже, имена в скобках, дают соответствующий атрибут, доступный непосредственно на объекте модуля.
Например: module.__spec__.origin == module.__file__
.
Обратите внимание, что хотя значения обычно эквивалентны, они могут различаться, поскольку синхронизация между двумя объектами отсутствует. Таким образом, можно обновить __path__
модуля во время выполнения, и это не будет автоматически отражено в __spec__.submodule_search_locations
.
Атрибуты и методы класса:
name
:
Представляет собой атрибут модуля __name__
- это строка полного имени модуля.
loader
:
Представляет собой атрибут модуля __loader__
- это используемый загрузчик. Для пакетов пространства имен loader
должен быть установлен в None
.
origin
:
Представляет собой атрибут модуля __file__
- это название места, из которого загружен модуль, например 'builtin'
для встроенных модулей и имя файла для модулей, загружаемых из источника. Обычно origin
должно быть установлено, но оно может быть и None
(по умолчанию), например для пакетов пространства имен.
submodule_search_locations
:
Представляет собой атрибут модуля __path__
- это список строк для поиска подмодулей, если это пакет, в противном случае None
loader_state
:
Это контейнер дополнительных специфичных для модуля данных для использования во время загрузки или None
.
cached
:
Установка
__cached__
в модуле устарела и перестанет устанавливаться или приниматься во внимание системой импорта в Python 3.14.
Представляет собой атрибут модуля __cached__
- это строка, в которой должен храниться скомпилированный модуль или None
.
parent
:
Установка
__package__
в модуле устарела и перестанет устанавливаться или приниматься во внимание системой импорта в Python 3.14.
Представляет собой атрибут модуля __package__
- это полное имя пакета, к которому относится модуль в качестве подмодуля или None
. Только для чтения.
has_location
:
Логическое значение, указывающее, относится ли атрибут origin
модуля к загружаемому местоположению.