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

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

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

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

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

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

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)
Возвращаемое значение: Новая ссылка. Part of the Стабильный 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)
Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI.

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

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

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

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

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

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

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

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

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

Примечание

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

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

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

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

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

Задав имя модуля (возможно, в виде package.module) и объект кода, считанный из файла байт-кода Python или полученный из встроенной функции compile(), загрузите модуль. Возвращает новую ссылку на объект module или 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)
Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI.

Например PyImport_ExecCodeModule(), но атрибуту __file__ объекта module присваивается значение pathname, если он не является``NULL``.

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

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

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

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

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

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

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

const char *PyImport_GetMagicTag()
Part of the Стабильный ABI.

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

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

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

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

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

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

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

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

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

int PyImport_ImportFrozenModuleObject(PyObject *name)
Part of the Стабильный ABI since version 3.7.

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

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

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

int PyImport_ImportFrozenModule(const char *name)
Part of the Стабильный ABI.

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

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))
Part of the Стабильный 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 должен заканчиваться контрольной записью, которая содержит NULL для поля name; если не указать контрольное значение, это может привести к сбою в памяти. Возвращает 0 в случае успеха или -1, если для расширения внутренней таблицы может быть выделено недостаточно памяти. В случае сбоя модули во внутреннюю таблицу не добавляются. Это должно быть вызвано до Py_Initialize().

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

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