Импорт модулей
-
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 схема блокировки была переведена на блокировки на уровне модулей для большинства целей, поэтому специальное поведение этой функции больше не требуется.
-
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__будут установлены, если они ещё не установлены, с соответствующими значениями. Загрузчик спецификации будет установлен на загрузчик модуля (если он установлен) и на экземпляр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) -
Значение возврата: Новый указатель. Часть Стабильного API.
Аналогично
PyImport_ExecCodeModule(), но атрибут__file__объекта модуля устанавливается в pathname, если он неNULL.См. также
PyImport_ExecCodeModuleWithPathnames().
-
PyObject *PyImport_ExecCodeModuleObject(PyObject *name, PyObject *co, PyObject *pathname, PyObject *cpathname) -
Значение возврата: Новый указатель. Часть Стабильного API с версии 3.7.
Аналогично
PyImport_ExecCodeModuleEx(), но атрибут__cached__объекта модуля устанавливается в cpathname, если он неNULL. Из трёх функций предпочтительно использовать эту.Добавлена в версии 3.3.
Изменено в версии 3.12: Установка атрибута
__cached__устарела. Обратитесь кModuleSpecдля альтернатив.
-
PyObject *PyImport_ExecCodeModuleWithPathnames(const char *name, PyObject *co, const char *pathname, const char *cpathname) -
Значение возврата: Новый указатель. Часть Стабильного API.
Аналогично
PyImport_ExecCodeModuleObject(), но name, pathname и cpathname — строки в кодировке UTF-8. Также предпринимаются попытки определить значение pathname по cpathname, если первое установлено вNULL.Добавлена в версии 3.2.
Изменено в версии 3.3: Используется
imp.source_from_cache()при расчёте пути к исходному коду, если предоставлен только путь к байткоду.Изменено в версии 3.12: Больше не использует удалённый модуль
imp.
-
long PyImport_GetMagicNumber() -
Часть Стабильного API.
Возвращает магическое число для файлов байткода Python (также известные как файлы
.pyc). Магическое число должно присутствовать в первых четырёх байтах файла байткода в порядке little-endian. Возвращает-1в случае ошибки.Изменено в версии 3.3: Возвращает значение
-1при ошибке.
-
const char *PyImport_GetMagicTag() -
Часть Стабильного API.
Возвращает строку магического тега для файлов байткода Python в формате PEP 3147. Обратите внимание, что значение в
sys.implementation.cache_tagявляется авторитетным и должно использоваться вместо этой функции.Добавлена в версии 3.2.
-
PyObject *PyImport_GetModuleDict() -
Значение возврата: Указатель на заимствованную ссылку. Часть Стабильного API.
Возвращает словарь, используемый для администрирования модулей (также известный как
sys.modules). Обратите внимание, что это переменная на уровне интерпретатора.
-
PyObject *PyImport_GetModule(PyObject *name) -
Значение возврата: Новый указатель. Часть Стабильного API с версии 3.8.
Возвращает уже импортированный модуль с заданным именем. Если модуль ещё не импортирован, возвращает
NULL, но не устанавливает ошибку. ВозвращаетNULLи устанавливает ошибку, если поиск не удался.Добавлена в версии 3.7.
-
PyObject *PyImport_GetImporter(PyObject *path) -
Значение возврата: Новый указатель. Часть Стабильного API.
Возвращает объект поиска для элемента
sys.path/pkg.__path__с именем path, возможно, взяв его из словаряsys.path_importer_cache. Если он ещё не кэширован, перебираетsys.path_hooks, пока не найдёт обработчик, который может обработать элемент пути. ВозвращаетNoneесли ни один обработчик не подошёл; это сообщает нашему вызывающему объекту, что поисковик по путям не смог найти поисковик для этого элемента пути. Кэширует результат вsys.path_importer_cache. Возвращает новый указатель на объект поисковика.
-
int PyImport_ImportFrozenModuleObject(PyObject *name) -
Часть Стабильного API с версии 3.7.
Загружает замороженный модуль с именем name. Возвращает
1в случае успеха,0если модуль не найден, и-1с установленной ошибкой, если инициализация завершилась неудачно. Чтобы получить доступ к импортированному модулю при успешной загрузке, используйтеPyImport_ImportModule(). (Обратите внимание на неточность — эта функция перезагрузит модуль, если он уже импортирован.)Добавлена в версии 3.3.
Изменено в версии 3.4: Атрибут
__file__больше не устанавливается для модуля.
-
int PyImport_ImportFrozenModule(const char *name) -
Часть Стабильного API.
Аналогично
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)) -
Часть Стабильного API.
Добавляет один модуль в существующую таблицу встроенных модулей. Это удобная обёртка вокруг
PyImport_ExtendInittab(), возвращающая-1если таблица не могла быть расширена. Новый модуль может быть импортирован под именем name, и использует функцию initfunc в качестве функции инициализации, вызываемой при первой попытке импорта. Вызывать её следует доPy_Initialize().
-
struct _inittab -
Структура, описывающая одну запись в списке встроенных модулей. Программы, встраивающие Python, могут использовать массив этих структур в сочетании с
PyImport_ExtendInittab(), чтобы предоставить дополнительные встроенные модули. Структура состоит из двух членов:-
const char *name -
Имя модуля в кодировке ASCII.
-
PyObject *(*initfunc)(void) -
Функция инициализации модуля, встроенного в интерпретатор.
-
-
int PyImport_ExtendInittab(struct _inittab *newtab) -
Добавить коллекцию модулей в таблицу встроенных модулей. Массив newtab должен заканчиваться стоп-элементом, содержащим
NULLдля поляname; отсутствие стоп-элемента может привести к ошибке памяти. Возвращает0при успехе или-1если для расширения внутренней таблицы недостаточно памяти. В случае ошибки модули не добавляются в внутреннюю таблицу. Это необходимо вызвать передPy_Initialize().Если Python инициализируется несколько раз,
PyImport_AppendInittab()илиPyImport_ExtendInittab()необходимо вызывать перед каждой инициализацией Python.
© 2001–2024 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.12/c-api/import.html