pkgutil – Утилита расширения пакетов¶pkgutil – Package extension utility
Этот модуль предоставляет функции для работы с пакетами:
- 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()).
- pkgutil.get_data(package, resource)¶
Получить ресурс из пакета.
Это обёртка для API get_data() загрузчика PEP 302. Аргумент package должен быть именем пакета в стандартном формате модуля (foo.bar). Аргумент resource должен быть относительным именем файла, с использованием / в качестве разделителя путей. Имя родительского каталога .. не допускается, равно как и абсолютное имя (начинающееся с /).
Функция возвращает двоичную строку, содержащую указанный ресурс.
Для пакетов, расположенных в файловой системе, которые уже были импортированы, это приблизительный эквивалент следующего:
d = os.path.dirname(sys.modules[package].__file__) data = open(os.path.join(d, resource), 'rb').read()
Если пакет не удается найти или загрузить, или он использует загрузчик PEP 302, не поддерживающий get_data(), то возвращается None.