Импортирование модулей
-
PyObject* PyImport_ImportModule(const char *name) -
Значение возврата: Новая ссылка.
Это упрощенный интерфейс к
PyImport_ImportModuleEx()ниже, оставляющий аргументы globals и locals равнымиNULLи level равным 0. Когда аргумент name содержит точку (когда он указывает на подмодуль пакета), аргумент fromlist устанавливается в список['*']таким образом, чтобы значение возврата было указанным модулем, а не верхним пакетом, который его содержит, как это было бы в противном случае. (К сожалению, это имеет дополнительный побочный эффект, когда name фактически указывает на подпакет вместо подмодуля: подмодули, указанные в переменной пакета__all__загружаются.) Возвращает новую ссылку на импортированный модуль илиNULLс установленным исключением при ошибке. Неудачный импорт модуля не оставляет модуль вsys.modules.Эта функция всегда использует абсолютные импорты.
-
PyObject* PyImport_ImportModuleNoBlock(const char *name) -
Значение возврата: Новая ссылка.
Эта функция является устаревшей алиасом функции
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) -
Значение возврата: Новая ссылка.
Импортировать модуль. Это лучше всего описать, сославшись на встроенную функцию Python
__import__(), так как стандартная функция__import__()напрямую вызывает эту функцию.Значение возврата — это новая ссылка на импортированный модуль или верхний пакет, или
NULLс установленным исключением при ошибке. Как и для__import__(), значение возврата, когда запрашивался подмодуль пакета, обычно является верхним пакетом, если не был передан пустой fromlist.Добавлена в версии 3.3.
-
PyObject* PyImport_ImportModuleLevel(const char *name, PyObject *globals, PyObject *locals, PyObject *fromlist, int level) -
Значение возврата: Новая ссылка.
Аналогично
PyImport_ImportModuleLevelObject(), но имя является строкой UTF-8, а не объектом Unicode.Изменено в версии 3.3: Отрицательные значения для level больше не принимаются.
-
PyObject* PyImport_Import(PyObject *name) -
Значение возврата: Новая ссылка.
Это интерфейс более высокого уровня, который вызывает текущую «функцию обработчика импорта» (с явным level 0, означающим абсолютный импорт). Он вызывает функцию
__import__()из__builtins__текущих globals. Это означает, что импорт выполняется с использованием любых подключенных обработчиков импорта в текущей среде.Эта функция всегда использует абсолютные импорты.
-
PyObject* PyImport_ReloadModule(PyObject *m) -
Значение возврата: Новая ссылка.
Перезагрузить модуль. Возвращает новую ссылку на перезагруженный модуль или
NULLс установленным исключением при ошибке (модуль всё ещё существует в этом случае).
-
PyObject* PyImport_AddModuleObject(PyObject *name) -
Значение возврата: Заимствованная ссылка.
Возвращает объект модуля, соответствующий имени модуля. Аргумент name может иметь вид
package.module. Сначала проверяется словарь модулей, если он есть, а если нет, создаётся новый и вставляется в словарь модулей. ВозвращаетNULLс установленным исключением при ошибке.Примечание
Эта функция не загружает и не импортирует модуль; если модуль ещё не загружен, вы получите пустой объект модуля. Используйте
PyImport_ImportModule()или один из его вариантов для импорта модуля. Структуры пакетов, подразумеваемые точечным именем для name, не создаются, если они уже не существуют.Добавлена в версии 3.3.
-
PyObject* PyImport_AddModule(const char *name) -
Значение возврата: Заимствованная ссылка.
Аналогично
PyImport_AddModuleObject(), но имя является строкой UTF-8, а не объектом Unicode.
-
PyObject* PyImport_ExecCodeModule(const char *name, PyObject *co) -
Значение возврата: Новая ссылка.
Учитывая имя модуля (возможно, вида
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) -
Значение возврата: Новая ссылка.
Как
PyImport_ExecCodeModule(), но атрибут__file__объекта модуля устанавливается на pathname, если он не пустойNULL.См. также
PyImport_ExecCodeModuleWithPathnames().
-
PyObject* PyImport_ExecCodeModuleObject(PyObject *name, PyObject *co, PyObject *pathname, PyObject *cpathname) -
Значение возврата: Новая ссылка.
Как
PyImport_ExecCodeModuleEx(), но атрибут__cached__объекта модуля устанавливается на cpathname, если он не пустойNULL. Из трёх функций, эта предпочтительнее.Добавлена в версии 3.3.
-
PyObject* PyImport_ExecCodeModuleWithPathnames(const char *name, PyObject *co, const char *pathname, const char *cpathname) -
Возвращаемое значение: Новый ссылка.
Аналогично
PyImport_ExecCodeModuleObject(), но name, pathname и cpathname — это строки, закодированные в UTF-8. Также предпринимаются попытки определить значение для pathname из cpathname, если первое значение установлено вNULL.Новая в версии 3.2.
Изменено в версии 3.3: Использует
imp.source_from_cache()при вычислении пути к исходному коду, если предоставлен только путь к байткоду.
-
long PyImport_GetMagicNumber() -
Возвращает магическое число для файлов байткода Python (также известный как
.pycфайл). Магическое число должно быть в первых четырёх байтах файла байткода в порядке little-endian. Возвращает-1при ошибке.Изменено в версии 3.3: Возвращает значение
-1при ошибке.
-
const char * PyImport_GetMagicTag() -
Возвращает строку магического тега для файлов байткода Python в формате PEP 3147. Имейте в виду, что значение в
sys.implementation.cache_tagявляется авторитетным и должно использоваться вместо этой функции.Новая в версии 3.2.
-
PyObject* PyImport_GetModuleDict() -
Возвращаемое значение: Заимствованная ссылка.
Возвращает словарь, используемый для управления модулями (также известный как
sys.modules). Обратите внимание, что это переменная на уровне интерпретатора.
-
PyObject* PyImport_GetModule(PyObject *name) -
Возвращаемое значение: Новый ссылка.
Возвращает уже импортированный модуль с заданным именем. Если модуль ещё не импортирован, возвращает
NULL, но не устанавливает ошибку. ВозвращаетNULLи устанавливает ошибку, если поиск не удался.Новая в версии 3.7.
-
PyObject* PyImport_GetImporter(PyObject *path) -
Возвращаемое значение: Новый ссылка.
Возвращает объект поиска для элемента
sys.path/pkg.__path__с именем path, возможно, извлекая его из словаряsys.path_importer_cache. Если он ещё не кэширован, перебираетsys.path_hooks, пока не найдёт обработчик, способный обработать элемент пути. ВозвращаетNone, если обработчик не найден; это сообщает нашему вызывающему коду, что поисковик по пути не смог найти поисковик для этого элемента пути. Кэширует результат вsys.path_importer_cache. Возвращает новую ссылку на объект поиска.
-
int PyImport_ImportFrozenModuleObject(PyObject *name) -
Возвращаемое значение: Новый ссылка.
Загрузка замороженного модуля с именем name. Возвращает
1при успехе,0если модуль не найден, и-1с установленной ошибкой, если инициализация завершилась неудачей. Для доступа к импортированному модулю при успешной загрузке используйтеPyImport_ImportModule(). (Обратите внимание на неточность названия — эта функция перегрузит модуль, если он уже был импортирован.)Новая в версии 3.3.
Изменено в версии 3.4: Атрибут
__file__больше не устанавливается для модуля.
-
int PyImport_ImportFrozenModule(const char *name) -
Аналогично
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)) -
Добавление отдельного модуля в существующую таблицу встроенных модулей. Это удобный обертка вокруг
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 должен заканчиваться стоп-записью, содержащей
NULLдля поляname; отсутствие стоп-записи может привести к ошибке памяти. Возвращает0при успехе или-1если не хватает памяти для расширения внутренней таблицы. В случае неудачи модули не добавляются в внутреннюю таблицу. Эта функция должна вызываться доPy_Initialize().Если Python инициализируется несколько раз,
PyImport_AppendInittab()илиPyImport_ExtendInittab()должны вызываться перед каждой инициализацией Python.
© 2001–2022 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.9/c-api/import.html