pkgutil — Утилита расширения пакета

Исходный код: Lib/pkgutil.py


Модуль предоставляет утилиты для системы импорта, в частности поддержку пакетов.

class pkgutil.ModuleInfo(module_finder, name, ispkg)

Именованный кортеж, содержащий краткую информацию о модуле.

Добавлено в версии 3.6.

pkgutil.extend_path(path, name)

Расширение пути поиска модулей, которые содержат пакет. Надлежащее использование должно поместить следующий код в __init__.py пакета:

from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)

Это добавит к __path__ пакета все подкаталоги каталогов в sys.path, названном после пакета. Это полезно, если требуется распределить различные части одного логического пакета в виде нескольких каталогов.

Он также ищет файлы *.pkg, начиная с того, где * соответствует аргументу name. Эта функция похожа на файлы *.pth (дополнительные сведения см. в модуле site), за исключением того, что она не содержит строк специального варианта, начиная с import. Файл *.pkg является доверенным на грани значение: кроме проверки дубликатов, все записи, найденные в файле *.pkg, добавляются в путь, независимо от того, существуют ли они в файловой системе. (Это футура.)

Если входной путь не список (как имеет место для замороженных пакетов), это возвращенный неизменный. Входной путь не изменен; расширенная копия является возвращенный. Элементы добавляются к копии только в конце.

Предполагается, что sys.path является последовательностью. Проигнорированы предметы sys.path, которые не являются строки, обращающимся к существующим справочникам. Предметы Unicode на sys.path, которые вызывают ошибки, когда используемый, поскольку имена файлов могут заставить эту функцию поднимать исключение (в соответствии с поведением os.path.isdir()).

class pkgutil.ImpImporter(dirname=None)

Поисковик PEP 302, который обертывает «классический» алгоритм импорта Python’а.

Если dirname является строка, создается средство поиска PEP 302, которое выполняет поиск в этой папке. Если dirname имеет значение None, создается средство поиска PEP 302, которое выполняет поиск текущего sys.path, а также любых модулей, которые заморожены или встроены.

Обратите внимание, что ImpImporter в настоящее время не поддерживает быть используемый размещением на sys.meta_path.

Не рекомендуется, начиная с версии 3.3: Эта эмуляция больше не необходима, поскольку стандартный механизм импорта - теперь полностью PEP 302, соответствующий и доступный в importlib.

class pkgutil.ImpLoader(fullname, file, filename, etc)

Загрузчик, который обертывает «классический» алгоритм импорта Python’а.

Не рекомендуется, начиная с версии 3.3: Эта эмуляция больше не необходима, поскольку стандартный механизм импорта - теперь полностью PEP 302, соответствующий и доступный в importlib.

pkgutil.find_loader(fullname)

Извлечение модуля загрузчика для данного fullname.

Это назад обертка совместимости вокруг importlib.util.find_spec(), который преобразовывает большинство неудач в ImportError и только возвращает погрузчик, а не полный ModuleSpec.

Изменено в версии 3.3: Обновленный, чтобы базироваться непосредственно на importlib вместо того, чтобы полагаться на пакет внутренние PEP 302 импортируют эмуляцию.

Изменено в версии 3.4: Обновлено на основе PEP 451

pkgutil.get_importer(path_item)

Получить поисковик для данного path_item.

Поиск возвращенный кэшируется в sys.path_importer_cache, если он был создан путем хук.

Кэш (или часть его) может быть очищен вручную, если перепросмотрен sys.path_hooks необходим.

Изменено в версии 3.3: Обновленный, чтобы базироваться непосредственно на importlib вместо того, чтобы полагаться на пакет внутренние PEP 302 импортируют эмуляцию.

pkgutil.get_loader(module_or_name)

Получение объекта загрузчика для module_or_name.

Если модуль или упаковка доступны через обычный механизм импорта, обертка вокруг соответствующей части этого механизма является возвращенный. Возвращает None, если модуль не может быть найден или импортирован. Если именованный модуль еще не импортирован, его содержащий пакет (если имеется) импортируется, чтобы установить пакет __path__.

Изменено в версии 3.3: Обновленный, чтобы базироваться непосредственно на importlib вместо того, чтобы полагаться на пакет внутренние PEP 302 импортируют эмуляцию.

Изменено в версии 3.4: Обновлено на основе PEP 451

pkgutil.iter_importers(fullname='')

Вернуть поисковик объекты для данного имени модуля.

Если fullname содержит „.“, то поисковики будут для пакета, содержащего полное имя, в противном случае это будут все зарегистрированные поисковики верхнего уровня (т.е. те, которые находятся как на sys.meta_path, так и на sys.path_hooks).

Если именованный модуль находится в пакете, этот пакет импортируется как побочный эффект вызова этой функции.

Если имя модуля не указано, создаются все поисковые устройства верхнего уровня.

Изменено в версии 3.3: Обновленный, чтобы базироваться непосредственно на importlib вместо того, чтобы полагаться на пакет внутренние PEP 302 импортируют эмуляцию.

pkgutil.iter_modules(path=None, prefix='')

Вырабатывает ModuleInfo для всех подмодулей на path, или, если path None, для всех модулей верхнего уровня на sys.path.

path должен быть либо None, либо списком путей для поиска модулей в.

prefix является строка для вывода на передней стороне каждого имени модуля на выходе.

Примечание

Работает только для поисковика, который определяет метод iter_modules(). Этот интерфейс не является стандартным, поэтому модуль также предоставляет реализации для importlib.machinery.FileFinder и zipimport.zipimporter.

Изменено в версии 3.3: Обновленный, чтобы базироваться непосредственно на importlib вместо того, чтобы полагаться на пакет внутренние PEP 302 импортируют эмуляцию.

pkgutil.walk_packages(path=None, prefix='', onerror=None)

Вырабатывает ModuleInfo для всех модулей рекурсивно на path, или, если path является None, для всех доступных модулей.

path должен быть либо None, либо списком путей для поиска модулей.

prefix является строкой для вывода на передней стороне каждого имени модуля на выходе.

Обратите внимание, что эта функция должна импортировать весь packages (not все модули!) на данном path, чтобы получить доступ к __path__ атрибут, чтобы найти подмодули.

onerror - это функция, вызываемая с одним аргументом (именем импортируемого пакета), если при попытке импорта пакета возникает какое-либо исключение. Если функция onerror не задана, ImportError перехватывается и игнорируется, в то время как все остальные исключения распространяются, завершая поиск.

Примеры:

# список всех модулей, к которым может получить доступ python
walk_packages()

# список всех подмодулей ctypes
walk_packages(ctypes.__path__, ctypes.__name__ + '.')

Примечание

Работает только для поисковика, который определяет метод iter_modules(). Этот интерфейс не является стандартным, поэтому модуль также предоставляет реализации для importlib.machinery.FileFinder и zipimport.zipimporter.

Изменено в версии 3.3: Обновленный, чтобы базироваться непосредственно на importlib вместо того, чтобы полагаться на пакет внутренние PEP 302 импортируют эмуляцию.

pkgutil.get_data(package, resource)

Получение ресурса из пакета.

Это обертка для API загрузчика get_data. Аргумент package должен быть именем пакета в стандартном формате модуля (foo.bar). Аргумент resource должен иметь форму относительного имени файла с использованием / в качестве разделителя пути. Имя родительского каталога .. не допускается и не является корневым именем (начиная с /).

Функция возвращает бинарную строку, которая является содержанием указанного ресурса.

Для пакетов, расположенных в файловой системе, которые уже были импортированы, это грубый эквивалент:

d = os.path.dirname(sys.modules[package].__file__)
data = open(os.path.join(d, resource), 'rb').read()

Если пакет не может быть найден или загружен, или он использует загрузчик, который не поддерживает get_data, то возвращается None. В частности, загрузчик для пакетов пространства имен не поддерживает get_data.