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
.
-
class
pkgutil.
ImpLoader
(fullname, file, filename, etc)¶ Загрузчик, который обертывает «классический» алгоритм импорта Python’а.
-
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
необходим.
-
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).
Если именованный модуль находится в пакете, этот пакет импортируется как побочный эффект вызова этой функции.
Если имя модуля не указано, создаются все поисковые устройства верхнего уровня.
-
pkgutil.
iter_modules
(path=None, prefix='')¶ Вырабатывает
ModuleInfo
для всех подмодулей на path, или, если pathNone
, для всех модулей верхнего уровня наsys.path
.path должен быть либо
None
, либо списком путей для поиска модулей в.prefix является строка для вывода на передней стороне каждого имени модуля на выходе.
Примечание
Работает только для поисковика, который определяет метод
iter_modules()
. Этот интерфейс не является стандартным, поэтому модуль также предоставляет реализации дляimportlib.machinery.FileFinder
иzipimport.zipimporter
.
-
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
.
-
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
.