Импорт модулей¶
-
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.