Импорт модулей¶
-
PyObject *
PyImport_ImportModule(const char *name)¶ - Return value: New reference. Part of the Stable ABI.
Это упрощенный интерфейс к
PyImport_ImportModuleEx()ниже, в котором аргументы globals и locals установлены вNULL, а level установлен в 0. Когда аргумент name содержит точку (когда он указывает на подмодуль пакета), аргумент fromlist устанавливается в список['*'], так что возвращаемым значением является именованный модуль, а не пакет верхнего уровня, содержащий его, как было бы в противном случае. (К сожалению, это имеет дополнительный побочный эффект, когда name на самом деле указывает подпакет, а не подмодуль: загружаются подмодули, указанные в переменной__all__пакета). Возвращает новую ссылку на импортированный модуль, илиNULLс установленным исключением в случае неудачи. Неудачный импорт модуля не оставляет модуль вsys.modules.Эта функция всегда использует абсолютный импорт.
-
PyObject *
PyImport_ImportModuleNoBlock(const char *name)¶ - Return value: New reference. Part of the Stable ABI.
Эта функция является устаревшим псевдонимом
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. Part of the Stable 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)¶ - Return value: New reference. Part of the Stable ABI.
Аналогично
PyImport_ImportModuleLevelObject(), но имя представляет собой строку в кодировке UTF-8, а не объект Unicode.Изменено в версии 3.3: Отрицательные значения для level больше не принимаются.
-
PyObject *
PyImport_Import(PyObject *name)¶ - Return value: New reference. Part of the Stable ABI.
Это интерфейс более высокого уровня, который вызывает текущую «функцию крючка импорта» (с явным уровнем 0, что означает абсолютный импорт). Он вызывает функцию
__import__()из__builtins__текущих глобалов. Это означает, что импорт выполняется с использованием любых крючков импорта, установленных в текущем окружении.Эта функция всегда использует абсолютный импорт.
-
PyObject *
PyImport_ReloadModule(PyObject *m)¶ - Return value: New reference. Part of the Stable ABI.
Перезагрузить модуль. Возвращает новую ссылку на перезагруженный модуль, или
NULLс установленным исключением при неудаче (в этом случае модуль все еще существует).
-
PyObject *
PyImport_AddModuleObject(PyObject *name)¶ - Return value: Borrowed reference. Part of the Stable ABI since version 3.7.
Возвращает объект модуля, соответствующий имени модуля. Аргумент name может иметь вид
package.module. Сначала проверьте словарь модулей, если он там есть, а если нет, создайте новый и вставьте его в словарь модулей. ВозвращаетNULLс установленным исключением при неудаче.Примечание
Эта функция не загружает и не импортирует модуль; если модуль еще не был загружен, вы получите пустой объект модуля. Для импорта модуля используйте
PyImport_ImportModule()или один из его вариантов. Структуры пакетов, подразумеваемые точечным именем для name, не создаются, если они еще не существуют.Добавлено в версии 3.3.
-
PyObject *
PyImport_AddModule(const char *name)¶ - Return value: Borrowed reference. Part of the Stable ABI.
Аналогично
PyImport_AddModuleObject(), но имя представляет собой строку в кодировке UTF-8, а не объект Unicode.
-
PyObject *
PyImport_ExecCodeModule(const char *name, PyObject *co)¶ - Return value: New reference. Part of the 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().
-
PyObject *
PyImport_ExecCodeModuleEx(const char *name, PyObject *co, const char *pathname)¶ - Return value: New reference. Part of the Stable ABI.
Подобно
PyImport_ExecCodeModule(), но атрибут__file__объекта модуля устанавливается в pathname, если он не``NULL``.См. также
PyImport_ExecCodeModuleWithPathnames().
-
PyObject *
PyImport_ExecCodeModuleObject(PyObject *name, PyObject *co, PyObject *pathname, PyObject *cpathname)¶ - Return value: New reference. Part of the Stable ABI since version 3.7.
Как и
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. Part of the Stable 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 Stable ABI.
Возвращает магическое число для файлов байткода Python (он же файл
.pyc). Магическое число должно присутствовать в первых четырех байтах файла байткода в порядке little-endian. При ошибке возвращает-1.Изменено в версии 3.3: Возвращаемое значение
-1при неудаче.
-
const char *
PyImport_GetMagicTag()¶ - Part of the Stable ABI.
Возвращает строку магического тега для имен файлов байткода Python формата PEP 3147. Помните, что значение
sys.implementation.cache_tagявляется авторитетным и должно использоваться вместо этой функции.Добавлено в версии 3.2.
-
PyObject *
PyImport_GetModuleDict()¶ - Return value: Borrowed reference. Part of the Stable ABI.
Возвращает словарь, используемый для администрирования модуля (он же
sys.modules). Обратите внимание, что это переменная для каждого интерпретатора.
-
PyObject *
PyImport_GetModule(PyObject *name)¶ - Return value: New reference. Part of the Stable ABI since version 3.8.
Возвращает уже импортированный модуль с заданным именем. Если модуль еще не был импортирован, то возвращает
NULL, но не устанавливает ошибку. ВозвращаетNULLи выдает ошибку, если поиск не удался.Добавлено в версии 3.7.
-
PyObject *
PyImport_GetImporter(PyObject *path)¶ - Return value: New reference. Part of the Stable ABI.
Возвращает объект finder для элемента path из
sys.path/pkg.__path__, возможно, путем извлечения его из диктантаsys.path_importer_cache. Если он еще не был кэширован, перейдите поsys.path_hooks, пока не будет найден хук, который может обрабатывать элемент path. ВернитеNone, если не удалось найти хук; это сообщает вызывающей стороне, что path based finder не смог найти искатель для этого элемента пути. Кэшируйте результат вsys.path_importer_cache. Верните новую ссылку на объект finder.
-
int
PyImport_ImportFrozenModuleObject(PyObject *name)¶ - Return value: New reference. Part of the Stable ABI since version 3.7.
Загрузить замороженный модуль с именем name. Возвращает
1в случае успеха,0если модуль не найден, и-1с набором исключений, если инициализация не удалась. Для доступа к импортированному модулю при успешной загрузке используйтеPyImport_ImportModule(). (Обратите внимание на неправильное название — эта функция перезагрузит модуль, если он уже был импортирован).Добавлено в версии 3.3.
Изменено в версии 3.4: Атрибут
__file__больше не устанавливается на модуле.
-
int
PyImport_ImportFrozenModule(const char *name)¶ - Part of the 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; };
-
const struct _frozen *
PyImport_FrozenModules¶ Этот указатель инициализируется, чтобы указывать на массив записей struct _frozen, заканчивающийся одной, все члены которой
NULLили ноль. Когда импортируется замороженный модуль, он ищется в этой таблице. Сторонний код может играть с этим, чтобы обеспечить динамически создаваемую коллекцию замороженных модулей.
-
int
PyImport_AppendInittab(const char *name, PyObject *(*initfunc)(void))¶ - Part of the Stable ABI.
Добавить один модуль в существующую таблицу встроенных модулей. Это удобная обертка вокруг
PyImport_ExtendInittab(), возвращающая-1, если таблица не может быть расширена. Новый модуль может быть импортирован по имени name, и использует функцию initfunc в качестве функции инициализации, вызываемой при первой попытке импорта. Она должна вызываться передPy_Initialize().
-
struct
_inittab¶ Структура, описывающая одну запись в списке встроенных модулей. Каждая из этих структур дает имя и функцию инициализации для модуля, встроенного в интерпретатор. Имя представляет собой строку в кодировке ASCII. Программы, встраивающие Python, могут использовать массив этих структур в сочетании с
PyImport_ExtendInittab()для предоставления дополнительных встроенных модулей. Структура определена вInclude/import.hкак:struct _inittab { const char *name; /* ASCII encoded string */ PyObject* (*initfunc)(void); };
-
int
PyImport_ExtendInittab(struct _inittab *newtab)¶ Добавить коллекцию модулей в таблицу встроенных модулей. Массив newtab должен завершаться записью sentinel, содержащей
NULLдля поляname; не предоставление значения sentinel может привести к ошибке памяти. Возвращает0при успехе или-1, если не удалось выделить достаточно памяти для расширения внутренней таблицы. В случае неудачи никакие модули не добавляются во внутреннюю таблицу. Эта функция должна быть вызвана доPy_Initialize().Если Python инициализируется несколько раз,
PyImport_AppendInittab()илиPyImport_ExtendInittab()должны быть вызваны перед каждой инициализацией Python.