Импортирование модулей
-
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. Возвращает новую ссылку на объект поиска.
-
void _PyImport_Init() -
Инициализирует механизм импорта. Только для внутреннего использования.
-
void PyImport_Cleanup() -
Очищает таблицу модулей. Только для внутреннего использования.
-
void _PyImport_Fini() -
Завершает механизм импорта. Только для внутреннего использования.
-
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().
© 2001–2022 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.8/c-api/import.html