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

PyObject* PyImport_ImportModule(const char *name)
Return value: New reference.

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

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

PyObject* PyImport_ImportModuleNoBlock(const char *name)
Return value: New reference.

Данная функция является устаревшим псевдонимом 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.

Импортирует модуль. Лучше всего её описать, сославшись на встроенную функцию 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.

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

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

PyObject* PyImport_Import(PyObject *name)
Return value: New reference.

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

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

PyObject* PyImport_ReloadModule(PyObject *m)
Return value: New reference.

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

PyObject* PyImport_AddModuleObject(PyObject *name)
Return value: Borrowed reference.

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

Примечание

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

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

PyObject* PyImport_AddModule(const char *name)
Return value: Borrowed reference.

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

PyObject* PyImport_ExecCodeModule(const char *name, PyObject *co)
Return value: New reference.

Загружает модуль учитывая имя модуля (возможно, в форме 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.

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

Также PyImport_ExecCodeModuleWithPathnames().

PyObject* PyImport_ExecCodeModuleObject(PyObject *name, PyObject *co, PyObject *pathname, PyObject *cpathname)
Return value: New reference.

Подобна 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.

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

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

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

long PyImport_GetMagicNumber()

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

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

const char * PyImport_GetMagicTag()

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

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

PyObject* PyImport_GetModuleDict()
Return value: Borrowed reference.

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

PyObject* PyImport_GetModule(PyObject *name)
Return value: New reference.

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

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

PyObject* PyImport_GetImporter(PyObject *path)
Return value: New reference.

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

void _PyImport_Init()

Инициализирует механизм импорта. Только для внутреннего использования.

void PyImport_Cleanup()

Очищает таблицу модулей. Только для внутреннего использования.

void _PyImport_Fini()

Дорабатывает механизм импорта. Только для внутреннего использования.

int PyImport_ImportFrozenModuleObject(PyObject *name)
Return value: New reference.

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

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

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

int PyImport_ImportFrozenModule(const char *name)

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

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))

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

struct _inittab

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

struct _inittab {
    const char *name;           /* Строка в кодировке ASCII */
    PyObject* (*initfunc)(void);
};
int PyImport_ExtendInittab(struct _inittab *newtab)

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