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