Импорт модулей

PyObject *PyImport_ImportModule(const char *name)
Return value: New reference. Part of the Stable ABI.

Это упрощенный интерфейс к PyImport_ImportModuleEx() ниже, в котором аргументы globals и locals установлены в NULL, а level установлен в 0. Когда аргумент name содержит точку (когда он указывает на подмодуль пакета), аргумент fromlist устанавливается в список ['*'], так что возвращаемым значением является именованный модуль, а не пакет верхнего уровня, содержащий его, как было бы в противном случае. (К сожалению, это имеет дополнительный побочный эффект, когда name на самом деле указывает подпакет, а не подмодуль: загружаются подмодули, указанные в переменной __all__ пакета). Возвращает новую ссылку на импортированный модуль, или NULL с установленным исключением в случае неудачи. Неудачный импорт модуля не оставляет модуль в sys.modules.

Эта функция всегда использует абсолютный импорт.

PyObject *PyImport_ImportModuleNoBlock(const char *name)
Return value: New reference. Part of the Stable ABI.

Эта функция является устаревшим псевдонимом PyImport_ImportModule().

Изменено в версии 3.3: Раньше эта функция немедленно выходила из строя, если блокировка импорта принадлежала другому потоку. Однако в Python 3.3 схема блокировки для большинства целей перешла на пермодульные блокировки, поэтому особое поведение этой функции больше не нужно.

PyObject *PyImport_ImportModuleEx(const char *name, PyObject *globals, PyObject *locals, PyObject *fromlist)
Return value: New reference.

Импортировать модуль. Лучше всего это можно описать, обратившись к встроенной функции Python __import__().

Возвращаемое значение - новая ссылка на импортированный модуль или пакет верхнего уровня, или NULL с установленным исключением в случае неудачи. Как и для __import__(), возвращаемым значением, если был запрошен подмодуль пакета, обычно является пакет верхнего уровня, если только не был задан непустой fromlist.

При неудачном импорте удаляются неполные объекты модуля, как в случае с PyImport_ImportModule().

PyObject *PyImport_ImportModuleLevelObject(PyObject *name, PyObject *globals, PyObject *locals, PyObject *fromlist, int level)
Return value: New reference. Part of the Stable ABI since version 3.7.

Импортируйте модуль. Это лучше всего описать, обратившись к встроенной функции Python __import__(), поскольку стандартная функция __import__() вызывает эту функцию напрямую.

Возвращаемое значение - новая ссылка на импортированный модуль или пакет верхнего уровня, или NULL с установленным исключением в случае неудачи. Как и для __import__(), возвращаемым значением, если был запрошен подмодуль пакета, обычно является пакет верхнего уровня, если только не был задан непустой fromlist.

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

PyObject *PyImport_ImportModuleLevel(const char *name, PyObject *globals, PyObject *locals, PyObject *fromlist, int level)
Return value: New reference. Part of the Stable ABI.

Аналогично PyImport_ImportModuleLevelObject(), но имя представляет собой строку в кодировке UTF-8, а не объект Unicode.

Изменено в версии 3.3: Отрицательные значения для level больше не принимаются.

PyObject *PyImport_Import(PyObject *name)
Return value: New reference. Part of the Stable ABI.

Это интерфейс более высокого уровня, который вызывает текущую «функцию крючка импорта» (с явным уровнем 0, что означает абсолютный импорт). Он вызывает функцию __import__() из __builtins__ текущих глобалов. Это означает, что импорт выполняется с использованием любых крючков импорта, установленных в текущем окружении.

Эта функция всегда использует абсолютный импорт.

PyObject *PyImport_ReloadModule(PyObject *m)
Return value: New reference. Part of the Stable ABI.

Перезагрузить модуль. Возвращает новую ссылку на перезагруженный модуль, или NULL с установленным исключением при неудаче (в этом случае модуль все еще существует).

PyObject *PyImport_AddModuleObject(PyObject *name)
Return value: Borrowed reference. Part of the Stable ABI since version 3.7.

Возвращает объект модуля, соответствующий имени модуля. Аргумент name может иметь вид package.module. Сначала проверьте словарь модулей, если он там есть, а если нет, создайте новый и вставьте его в словарь модулей. Возвращает NULL с установленным исключением при неудаче.

Примечание

Эта функция не загружает и не импортирует модуль; если модуль еще не был загружен, вы получите пустой объект модуля. Для импорта модуля используйте PyImport_ImportModule() или один из его вариантов. Структуры пакетов, подразумеваемые точечным именем для name, не создаются, если они еще не существуют.

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

PyObject *PyImport_AddModule(const char *name)
Return value: Borrowed reference. Part of the Stable ABI.

Аналогично PyImport_AddModuleObject(), но имя представляет собой строку в кодировке UTF-8, а не объект Unicode.

PyObject *PyImport_ExecCodeModule(const char *name, PyObject *co)
Return value: New reference. Part of the Stable ABI.

Учитывая имя модуля (возможно, в форме package.module) и объект кода, считанный из файла байткода Python или полученный из встроенной функции compile(), загрузите модуль. Возвращает новую ссылку на объект модуля, или NULL с установленным исключением, если произошла ошибка. name удаляется из sys.modules в случае ошибки, даже если name уже было в sys.modules при входе в PyImport_ExecCodeModule(). Оставлять не полностью инициализированные модули в sys.modules опасно, так как импорты таких модулей не имеют возможности узнать, что объект модуля находится в неизвестном (и, вероятно, поврежденном относительно намерений автора модуля) состоянии.

Параметры __spec__ и __loader__ модуля будут установлены, если они еще не установлены, в соответствующие значения. Загрузчик спецификации будет установлен в __loader__ модуля (если установлен) и в экземпляр SourceFileLoader в противном случае.

Атрибут __file__ модуля будет установлен на co_filename объекта кода. Если применимо, будет также установлен __cached__.

Эта функция перезагрузит модуль, если он уже был импортирован. Смотрите PyImport_ReloadModule() для предполагаемого способа перезагрузки модуля.

Если name указывает на точечное имя вида package.module, любые структуры пакета, которые еще не созданы, все равно не будут созданы.

См. также PyImport_ExecCodeModuleEx() и PyImport_ExecCodeModuleWithPathnames().

PyObject *PyImport_ExecCodeModuleEx(const char *name, PyObject *co, const char *pathname)
Return value: New reference. Part of the Stable ABI.

Подобно PyImport_ExecCodeModule(), но атрибут __file__ объекта модуля устанавливается в pathname, если он не``NULL``.

См. также PyImport_ExecCodeModuleWithPathnames().

PyObject *PyImport_ExecCodeModuleObject(PyObject *name, PyObject *co, PyObject *pathname, PyObject *cpathname)
Return value: New reference. Part of the Stable ABI since version 3.7.

Как и PyImport_ExecCodeModuleEx(), но атрибут __cached__ объекта модуля устанавливается в cpathname, если он не``NULL``. Из трех функций предпочтительнее использовать именно эту.

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

PyObject *PyImport_ExecCodeModuleWithPathnames(const char *name, PyObject *co, const char *pathname, const char *cpathname)
Return value: New reference. Part of the Stable ABI.

Подобно PyImport_ExecCodeModuleObject(), но name, pathname и cpathname являются строками в кодировке UTF-8. Также предпринимаются попытки выяснить значение pathname из cpathname, если первое установлено в NULL.

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

Изменено в версии 3.3: Использует imp.source_from_cache() при вычислении пути к источнику, если предоставлен только путь к байткоду.

long PyImport_GetMagicNumber()
Part of the Stable ABI.

Возвращает магическое число для файлов байткода Python (он же файл .pyc). Магическое число должно присутствовать в первых четырех байтах файла байткода в порядке little-endian. При ошибке возвращает -1.

Изменено в версии 3.3: Возвращаемое значение -1 при неудаче.

const char *PyImport_GetMagicTag()
Part of the Stable ABI.

Возвращает строку магического тега для имен файлов байткода Python формата PEP 3147. Помните, что значение sys.implementation.cache_tag является авторитетным и должно использоваться вместо этой функции.

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

PyObject *PyImport_GetModuleDict()
Return value: Borrowed reference. Part of the Stable ABI.

Возвращает словарь, используемый для администрирования модуля (он же sys.modules). Обратите внимание, что это переменная для каждого интерпретатора.

PyObject *PyImport_GetModule(PyObject *name)
Return value: New reference. Part of the Stable ABI since version 3.8.

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

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

PyObject *PyImport_GetImporter(PyObject *path)
Return value: New reference. Part of the Stable ABI.

Возвращает объект finder для элемента path из sys.path/pkg.__path__, возможно, путем извлечения его из диктанта sys.path_importer_cache. Если он еще не был кэширован, перейдите по sys.path_hooks, пока не будет найден хук, который может обрабатывать элемент path. Верните None, если не удалось найти хук; это сообщает вызывающей стороне, что path based finder не смог найти искатель для этого элемента пути. Кэшируйте результат в sys.path_importer_cache. Верните новую ссылку на объект finder.

int PyImport_ImportFrozenModuleObject(PyObject *name)
Return value: New reference. Part of the Stable ABI since version 3.7.

Загрузить замороженный модуль с именем name. Возвращает 1 в случае успеха, 0 если модуль не найден, и -1 с набором исключений, если инициализация не удалась. Для доступа к импортированному модулю при успешной загрузке используйте PyImport_ImportModule(). (Обратите внимание на неправильное название — эта функция перезагрузит модуль, если он уже был импортирован).

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

Изменено в версии 3.4: Атрибут __file__ больше не устанавливается на модуле.

int PyImport_ImportFrozenModule(const char *name)
Part of the Stable ABI.

Аналогично PyImport_ImportFrozenModuleObject(), но имя представляет собой строку в кодировке UTF-8, а не объект Unicode.

struct _frozen

Это определение типа структуры для дескрипторов замороженных модулей, генерируемое утилитой freeze (см. Tools/freeze/ в исходном дистрибутиве Python). Его определение, найденное в Include/import.h, следующее:

struct _frozen {
    const char *name;
    const unsigned char *code;
    int size;
};
const struct _frozen *PyImport_FrozenModules

Этот указатель инициализируется, чтобы указывать на массив записей struct _frozen, заканчивающийся одной, все члены которой NULL или ноль. Когда импортируется замороженный модуль, он ищется в этой таблице. Сторонний код может играть с этим, чтобы обеспечить динамически создаваемую коллекцию замороженных модулей.

int PyImport_AppendInittab(const char *name, PyObject *(*initfunc)(void))
Part of the Stable ABI.

Добавить один модуль в существующую таблицу встроенных модулей. Это удобная обертка вокруг PyImport_ExtendInittab(), возвращающая -1, если таблица не может быть расширена. Новый модуль может быть импортирован по имени name, и использует функцию initfunc в качестве функции инициализации, вызываемой при первой попытке импорта. Она должна вызываться перед Py_Initialize().

struct _inittab

Структура, описывающая одну запись в списке встроенных модулей. Каждая из этих структур дает имя и функцию инициализации для модуля, встроенного в интерпретатор. Имя представляет собой строку в кодировке ASCII. Программы, встраивающие Python, могут использовать массив этих структур в сочетании с PyImport_ExtendInittab() для предоставления дополнительных встроенных модулей. Структура определена в Include/import.h как:

struct _inittab {
    const char *name;           /* ASCII encoded string */
    PyObject* (*initfunc)(void);
};
int PyImport_ExtendInittab(struct _inittab *newtab)

Добавить коллекцию модулей в таблицу встроенных модулей. Массив newtab должен завершаться записью sentinel, содержащей NULL для поля name; не предоставление значения sentinel может привести к ошибке памяти. Возвращает 0 при успехе или -1, если не удалось выделить достаточно памяти для расширения внутренней таблицы. В случае неудачи никакие модули не добавляются во внутреннюю таблицу. Эта функция должна быть вызвана до Py_Initialize().

Если Python инициализируется несколько раз, PyImport_AppendInittab() или PyImport_ExtendInittab() должны быть вызваны перед каждой инициализацией Python.

Вернуться на верх