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

PyObject *PyImport_ImportModule(const char *name)
Возвращаемое значение: Новая ссылка. Часть Стабильный ABI.

Это обертка вокруг PyImport_Import(), которая принимает в качестве аргумента const char*, а не PyObject*.

PyObject *PyImport_ImportModuleNoBlock(const char *name)
Возвращаемое значение: Новая ссылка. Часть Стабильный ABI.

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

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

Утратил актуальность с версии 3.13, будет удален в версии 3.15: Вместо этого используйте PyImport_ImportModule().

PyObject *PyImport_ImportModuleEx(const char *name, PyObject *globals, PyObject *locals, PyObject *fromlist)
Возвращаемое значение: Новая ссылка.

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

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

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

PyObject *PyImport_ImportModuleLevelObject(PyObject *name, PyObject *globals, PyObject *locals, PyObject *fromlist, int level)
Возвращаемое значение: Новая ссылка. Часть Стабильный ABI с версии 3.7.

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

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

Added in version 3.3.

PyObject *PyImport_ImportModuleLevel(const char *name, PyObject *globals, PyObject *locals, PyObject *fromlist, int level)
Возвращаемое значение: Новая ссылка. Часть Стабильный ABI.

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

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

PyObject *PyImport_Import(PyObject *name)
Возвращаемое значение: Новая ссылка. Часть Стабильный ABI.

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

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

PyObject *PyImport_ReloadModule(PyObject *m)
Возвращаемое значение: Новая ссылка. Часть Стабильный ABI.

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

PyObject *PyImport_AddModuleRef(const char *name)
Возвращаемое значение: Новая ссылка. Часть Стабильный ABI с версии 3.13.

Возвращает объект модуля, соответствующий имени модуля.

Аргумент name может иметь вид package.module. Сначала проверьте словарь модулей, если он там есть, а если нет, создайте новый и вставьте его в словарь модулей.

В случае успеха верните модулю значение strong reference. При неудаче возвращается NULL с установленным исключением.

Имя модуля name декодируется из UTF-8.

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

Added in version 3.13.

PyObject *PyImport_AddModuleObject(PyObject *name)
Возвращаемое значение: Заимствованная ссылка. Часть Стабильный ABI с версии 3.7.

Аналогично PyImport_AddModuleRef(), но возвращает borrowed reference, а name - объект Python str.

Added in version 3.3.

PyObject *PyImport_AddModule(const char *name)
Возвращаемое значение: Заимствованная ссылка. Часть Стабильный ABI.

Аналогично PyImport_AddModuleRef(), но возвращает borrowed reference.

PyObject *PyImport_ExecCodeModule(const char *name, PyObject *co)
Возвращаемое значение: Новая ссылка. Часть Стабильный 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().

Изменено в версии 3.12: Установки __cached__ и __loader__ устарели. Альтернативные варианты см. в разделе ModuleSpec.

PyObject *PyImport_ExecCodeModuleEx(const char *name, PyObject *co, const char *pathname)
Возвращаемое значение: Новая ссылка. Часть Стабильный ABI.

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

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

PyObject *PyImport_ExecCodeModuleObject(PyObject *name, PyObject *co, PyObject *pathname, PyObject *cpathname)
Возвращаемое значение: Новая ссылка. Часть Стабильный ABI с версии 3.7.

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

Added in version 3.3.

Изменено в версии 3.12: Значение __cached__ устарело. Альтернативные варианты см. в разделе ModuleSpec.

PyObject *PyImport_ExecCodeModuleWithPathnames(const char *name, PyObject *co, const char *pathname, const char *cpathname)
Возвращаемое значение: Новая ссылка. Часть Стабильный ABI.

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

Added in version 3.2.

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

Изменено в версии 3.12: Больше не использует удаленный модуль imp.

long PyImport_GetMagicNumber()
Часть Стабильный ABI.

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

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

const char *PyImport_GetMagicTag()
Часть Стабильный ABI.

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

Added in version 3.2.

PyObject *PyImport_GetModuleDict()
Возвращаемое значение: Заимствованная ссылка. Часть Стабильный ABI.

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

PyObject *PyImport_GetModule(PyObject *name)
Возвращаемое значение: Новая ссылка. Часть Стабильный ABI с версии 3.8.

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

Added in version 3.7.

PyObject *PyImport_GetImporter(PyObject *path)
Возвращаемое значение: Новая ссылка. Часть Стабильный ABI.

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

int PyImport_ImportFrozenModuleObject(PyObject *name)
Часть Стабильный ABI с версии 3.7.

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

Added in version 3.3.

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

int PyImport_ImportFrozenModule(const char *name)
Часть Стабильный 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;
    bool is_package;
};

Изменено в версии 3.11: Новое поле is_package указывает, является ли модуль пакетом или нет. Оно заменяет установку отрицательного значения в поле size.

const struct _frozen *PyImport_FrozenModules

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

int PyImport_AppendInittab(const char *name, PyObject *(*initfunc)(void))
Часть Стабильный ABI.

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

struct _inittab

Структура, описывающая одну запись в списке встроенных модулей. Программы, встраивающие Python, могут использовать массив этих структур в сочетании с PyImport_ExtendInittab() для предоставления дополнительных встроенных модулей. Структура состоит из двух членов:

const char *name

Имя модуля в виде строки в кодировке ASCII.

PyObject *(*initfunc)(void)

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

int PyImport_ExtendInittab(struct _inittab *newtab)

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

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