Импортирование модулей
-
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.Добавлено в версии 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.
Это интерфейс более высокого уровня, который вызывает текущую «функцию перехвата импорта» (с явно заданным level, равным 0, то есть для абсолютного импорта). Он вызывает функцию
__import__()из__builtins__текущих глобальных переменных. Это означает, что импорт выполняется с использованием перехватчиков импорта, установленных в текущем окружении.Эта функция всегда использует абсолютный импорт.
-
PyObject *PyImport_ReloadModule(PyObject *m) -
Возвращаемое значение: новая ссылка. Часть стабильного ABI.
Перезагрузить модуль. Возвращает новую ссылку на перезагруженный модуль либо
NULL, если произошла ошибка и было установлено исключение (в этом случае модуль всё ещё существует).
-
PyObject *PyImport_AddModuleRef(const char *name) -
Возвращаемое значение: новая ссылка. Часть стабильного ABI начиная с версии 3.13.
Возвращает объект модуля, соответствующий имени модуля.
Аргумент name может иметь вид
package.module. Сначала выполняется поиск в словаре модулей; если модуль там отсутствует, создаётся новый объект и добавляется в словарь модулей.В случае успеха возвращает сильную ссылку на модуль. Если произошла ошибка и было установлено исключение, возвращает
NULL.Имя модуля name декодируется из UTF-8.
Эта функция не загружает и не импортирует модуль; если модуль ещё не был загружен, будет возвращён пустой объект модуля. Для импорта модуля используйте
PyImport_ImportModule()или один из её вариантов. Структуры пакетов, подразумеваемые именем name с точками, не создаются, если их ещё нет.Добавлено в версии 3.13.
-
PyObject *PyImport_AddModuleObject(PyObject *name) -
Возвращаемое значение: заимствованная ссылка. Часть стабильного ABI начиная с версии 3.7.
Похожа на
PyImport_AddModuleRef(), но возвращает заимствованную ссылку, а name является объектом Pythonstr.Добавлено в версии 3.3.
-
PyObject *PyImport_AddModule(const char *name) -
Возвращаемое значение: заимствованная ссылка. Часть стабильного ABI.
Похожа на
PyImport_AddModuleRef(), но возвращает заимствованную ссылку.
-
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. Из этих трёх функций предпочтительно использовать именно эту.Добавлено в версии 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.Добавлено в версии 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является авторитетным, и следует использовать его, а не эту функцию.Добавлено в версии 3.2.
-
PyObject *PyImport_GetModuleDict() -
Возвращаемое значение: заимствованная ссылка. Часть стабильного ABI.
Возвращает словарь, используемый для управления модулями (также называемый
sys.modules). Обратите внимание, что эта переменная существует отдельно для каждого интерпретатора.
-
PyObject *PyImport_GetModule(PyObject *name) -
Возвращаемое значение: новая ссылка. Часть стабильного ABI начиная с версии 3.8.
Возвращает уже импортированный модуль с указанным именем. Если модуль ещё не импортирован, возвращает
NULL, не устанавливая ошибку. Если поиск не удался, возвращаетNULLи устанавливает ошибку.Добавлено в версии 3.7.
-
PyObject *PyImport_GetImporter(PyObject *path) -
Возвращаемое значение: новая ссылка. Часть стабильного ABI.
Возвращает объект поиска для элемента path из
sys.path/pkg.__path__, при необходимости получая его из словаряsys.path_importer_cache. Если элемент ещё не кэширован, функция перебираетsys.path_hooks, пока не найдёт перехватчик, способный обработать этот элемент пути. Если подходящий перехватчик не найден, возвращаетсяNone; это сообщает вызывающему коду, что поиск на основе пути не смог найти объект поиска для данного элемента пути. Результат кэшируется вsys.path_importer_cache. Возвращает новую ссылку на объект поиска.
-
int PyImport_ImportFrozenModuleObject(PyObject *name) -
Часть стабильного ABI начиная с версии 3.7.
Загружает замороженный модуль с именем name. В случае успеха возвращает
1, если модуль не найден —0, а если инициализация не удалась и было установлено исключение —-1. Чтобы получить доступ к успешно загруженному модулю, используйтеPyImport_ImportModule(). (Обратите внимание на неправильное название: если модуль уже был импортирован, эта функция перезагрузит его.)Добавлено в версии 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 должен завершаться сигнальной записью, в поле
nameкоторой содержитсяNULL; отсутствие сигнального значения может привести к ошибке памяти. В случае успеха возвращает0, а если для расширения внутренней таблицы не удалось выделить достаточно памяти —-1. При сбое ни один модуль не добавляется во внутреннюю таблицу. Эту функцию необходимо вызвать доPy_Initialize().Если Python инициализируется несколько раз,
PyImport_AppendInittab()илиPyImport_ExtendInittab()необходимо вызывать перед каждой инициализацией Python.
-
struct _inittab *PyImport_Inittab -
Таблица встроенных модулей, используемая при инициализации Python. Не используйте её напрямую; вместо этого используйте
PyImport_AppendInittab()иPyImport_ExtendInittab().
-
PyObject *PyImport_ImportModuleAttr(PyObject *mod_name, PyObject *attr_name) -
Возвращаемое значение: новая ссылка.
Импортирует модуль mod_name и получает его атрибут attr_name.
Имена должны быть объектами Python
str.Вспомогательная функция, объединяющая
PyImport_Import()иPyObject_GetAttr(). Например, она может вызватьImportError, если модуль не найден, иAttributeError, если атрибут не существует.Добавлено в версии 3.14.
-
PyObject *PyImport_ImportModuleAttrString(const char *mod_name, const char *attr_name) -
Возвращаемое значение: новая ссылка.
Похожа на
PyImport_ImportModuleAttr(), но имена передаются в виде строк в кодировке UTF-8, а не объектов Pythonstr.Добавлено в версии 3.14.
© 2001 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.14/c-api/import.html