Импорт модулей¶
-
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.Added in version 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.
Это интерфейс более высокого уровня, который вызывает текущую «функцию импорта» (с явным уровнем 0, что означает абсолютный импорт). Он вызывает функцию
__import__()
из__builtins__
текущих глобалов. Это означает, что импорт выполняется с использованием тех крючков импорта, которые установлены в текущем окружении.Эта функция всегда использует абсолютный импорт.
-
PyObject *PyImport_ReloadModule(PyObject *m)¶
- Возвращаемое значение: Новая ссылка. Часть Стабильный ABI.
Перезагрузить модуль. Возвращает новую ссылку на перезагруженный модуль или
NULL
с установленным исключением в случае неудачи (в этом случае модуль все еще существует).
-
PyObject *PyImport_AddModuleRef(const char *name)¶
- Возвращаемое значение: Новая ссылка. Часть Стабильный ABI с версии 3.13.
Возвращает объект модуля, соответствующий имени модуля.
Аргумент name может иметь вид
package.module
. Сначала проверьте словарь модулей, если он там есть, а если нет, создайте новый и вставьте его в словарь модулей.В случае успеха верните модулю значение strong reference. При неудаче возвращается
NULL
с установленным исключением.Имя модуля name декодируется из UTF-8.
Эта функция не загружает и не импортирует модуль; если модуль еще не был загружен, вы получите пустой объект модуля. Для импорта модуля используйте
PyImport_ImportModule()
или один из его вариантов. Структуры пакетов, подразумеваемые точечным именем для name, не создаются, если они еще не существуют.Added in version 3.13.
-
PyObject *PyImport_AddModuleObject(PyObject *name)¶
- Возвращаемое значение: Заимствованная ссылка. Часть Стабильный ABI с версии 3.7.
Аналогично
PyImport_AddModuleRef()
, но возвращает borrowed reference, а name - объект Pythonstr
.Added in version 3.3.
-
PyObject *PyImport_AddModule(const char *name)¶
- Возвращаемое значение: Заимствованная ссылка. Часть Стабильный ABI.
Аналогично
PyImport_AddModuleRef()
, но возвращает borrowed reference.
-
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``. Из трех функций эта является наиболее предпочтительной.Added in version 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
.Added in version 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
является авторитетным и должно использоваться вместо этой функции.Added in version 3.2.
-
PyObject *PyImport_GetModuleDict()¶
- Возвращаемое значение: Заимствованная ссылка. Часть Стабильный ABI.
Возвращает словарь, используемый для администрирования модуля (он же
sys.modules
). Обратите внимание, что это переменная для каждого интерпретатора.
-
PyObject *PyImport_GetModule(PyObject *name)¶
- Возвращаемое значение: Новая ссылка. Часть Стабильный ABI с версии 3.8.
Возвращает уже импортированный модуль с заданным именем. Если модуль еще не был импортирован, то возвращается
NULL
, но ошибка не устанавливается. ВозвращаетNULL
и выдает ошибку, если поиск не удался.Added in version 3.7.
-
PyObject *PyImport_GetImporter(PyObject *path)¶
- Возвращаемое значение: Новая ссылка. Часть Стабильный ABI.
Возвращает объект finder для
sys.path
/pkg.__path__
элемента path, возможно, путем извлечения его из диктантаsys.path_importer_cache
. Если он еще не был кэширован, перейдите поsys.path_hooks
, пока не будет найден хук, который может обработать элемент path. ВозвращаемNone
, если хук не найден; это говорит нашему вызывающему, что path based finder не смог найти finder для этого элемента пути. Кэшируйте результат вsys.path_importer_cache
. Верните новую ссылку на объект finder.
-
int PyImport_ImportFrozenModuleObject(PyObject *name)¶
- Часть Стабильный ABI с версии 3.7.
Загрузка замороженного модуля с именем name. Возвращает
1
в случае успеха,0
, если модуль не найден, и-1
с установленным исключением, если инициализация не удалась. Чтобы получить доступ к импортированному модулю после успешной загрузки, используйтеPyImport_ImportModule()
. (Обратите внимание на неправильное название - эта функция будет перезагружать модуль, если он уже был импортирован).Added in version 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.
-
const char *name¶
-
int PyImport_ExtendInittab(struct _inittab *newtab)¶
Добавляет коллекцию модулей в таблицу встроенных модулей. Массив newtab должен заканчиваться записью sentinel, содержащей
NULL
для поляname
; неспособность предоставить значение sentinel может привести к ошибке памяти. Возвращает0
в случае успеха или-1
, если не удалось выделить достаточно памяти для расширения внутренней таблицы. В случае неудачи никакие модули не добавляются во внутреннюю таблицу. Эта функция должна быть вызвана доPy_Initialize()
.Если Python инициализируется несколько раз, то
PyImport_AppendInittab()
илиPyImport_ExtendInittab()
должны вызываться перед каждой инициализацией Python.