Документация Python неофициальный перевод

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

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

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

PyObject *PyImport_ImportModuleNoBlock(const char *name)
Возвращаемое значение: новая ссылка. Часть Stable 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)
Возвращаемое значение: новая ссылка. Часть Stable ABI начиная с версии 3.7.

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

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

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

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

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

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

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

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

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

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

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

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

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

Примечание

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

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

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

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

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

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

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

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

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

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

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

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

Изменено в версии 3.12: Установка __cached__ является устаревшей. См. ModuleSpec для альтернатив.

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

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

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

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

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

long PyImport_GetMagicNumber()
Часть Stable ABI.

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

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

const char *PyImport_GetMagicTag()
Часть Stable ABI.

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

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

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

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

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

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

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

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

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

int PyImport_ImportFrozenModuleObject(PyObject *name)
Часть Stable ABI начиная с версии 3.7.

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

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

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

int PyImport_ImportFrozenModule(const char *name)
Часть 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;
    bool is_package;
};

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

const struct _frozen *PyImport_FrozenModules

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

int PyImport_AppendInittab(const char *name, PyObject *(*initfunc)(void))
Часть Stable 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 инициализируется несколько раз, PyImport_AppendInittab() или PyImport_ExtendInittab() должны вызываться перед каждой инициализацией Python.