Импорт модулей¶
-
PyObject *PyImport_ImportModule(const char *name)¶
- Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI.
Это оболочка для
PyImport_Import(), которая принимает a const char* в качестве аргумента вместо a PyObject*.
-
PyObject *PyImport_ImportModuleNoBlock(const char *name)¶
- Возвращаемое значение: Новая ссылка. Part of the Стабильный 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)¶
- Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI since version 3.7.
Импортируйте модуль. Это лучше всего описать, обратившись к встроенной функции Python
__import__(), поскольку стандартная функция__import__()вызывает эту функцию напрямую.Возвращаемое значение - это новая ссылка на импортированный модуль или пакет верхнего уровня, или
NULLс исключением, установленным при сбое. Как и для__import__(), возвращаемое значение при запросе подмодуля пакета обычно является пакетом верхнего уровня, если только не был задан непустой fromlist.Добавлено в версии 3.3.
-
PyObject *PyImport_ImportModuleLevel(const char *name, PyObject *globals, PyObject *locals, PyObject *fromlist, int level)¶
- Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI.
Аналогично
PyImport_ImportModuleLevelObject(), но имя представляет собой строку в кодировке UTF-8, а не объект в Юникоде.Изменено в версии 3.3: Отрицательные значения для level больше не принимаются.
-
PyObject *PyImport_Import(PyObject *name)¶
- Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI.
Это интерфейс более высокого уровня, который вызывает текущую «функцию перехвата импорта» (с явным значением level, равным 0, что означает абсолютный импорт). Он вызывает функцию
__import__()из__builtins__текущего глобального. Это означает, что импорт выполняется с использованием любых перехватчиков импорта, установленных в текущей среде.Эта функция всегда использует абсолютный импорт.
-
PyObject *PyImport_ReloadModule(PyObject *m)¶
- Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI.
Перезагрузите модуль. Возвращает новую ссылку на перезагруженный модуль или
NULLс исключением, установленным при сбое (в этом случае модуль все еще существует).
-
PyObject *PyImport_AddModuleObject(PyObject *name)¶
- Возвращаемое значение: Заимствованная ссылка. Part of the Стабильный ABI since version 3.7.
Возвращает объект module, соответствующий имени модуля. Аргумент name может иметь вид
package.module. Сначала проверьте словарь modules, если он там есть, а если нет, создайте новый и вставьте его в словарь modules. ВозвращаетNULLс исключением, установленным при сбое.Примечание
Эта функция не загружает и не импортирует модуль; если модуль еще не был загружен, вы получите пустой объект module. Для импорта модуля используйте
PyImport_ImportModule()или один из его вариантов. Структуры пакетов, обозначаемые пунктирным именем для name, не создаются, если они еще не представлены.Добавлено в версии 3.3.
-
PyObject *PyImport_AddModule(const char *name)¶
- Возвращаемое значение: Заимствованная ссылка. Part of the Стабильный ABI.
Аналогично
PyImport_AddModuleObject(), но имя представляет собой строку в кодировке UTF-8, а не объект в Юникоде.
-
PyObject *PyImport_ExecCodeModule(const char *name, PyObject *co)¶
- Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI.
Задав имя модуля (возможно, в виде
package.module) и объект кода, считанный из файла байт-кода Python или полученный из встроенной функцииcompile(), загрузите модуль. Возвращает новую ссылку на объект module или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)¶
- Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI.
Например
PyImport_ExecCodeModule(), но атрибуту__file__объекта module присваивается значение pathname, если он не является``NULL``.Смотрите также
PyImport_ExecCodeModuleWithPathnames().
-
PyObject *PyImport_ExecCodeModuleObject(PyObject *name, PyObject *co, PyObject *pathname, PyObject *cpathname)¶
- Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI since version 3.7.
Например
PyImport_ExecCodeModuleEx(), но атрибуту__cached__объекта module присваивается значение cpathname, если он не является``NULL``. Из трех функций эту использовать предпочтительнее.Добавлено в версии 3.3.
-
PyObject *PyImport_ExecCodeModuleWithPathnames(const char *name, PyObject *co, const char *pathname, const char *cpathname)¶
- Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI.
Например
PyImport_ExecCodeModuleObject(), но name, pathname и cpathname являются строками в кодировке UTF-8. Также предпринимаются попытки выяснить, каким должно быть значение для pathname из cpathname, если для первого задано значениеNULL.Добавлено в версии 3.2.
Изменено в версии 3.3: Использует
imp.source_from_cache()при вычислении пути к источнику, если указан только путь к байт-коду.
-
long PyImport_GetMagicNumber()¶
- Part of the Стабильный ABI.
Возвращает магический номер для файлов байт-кода Python (он же файл
.pyc). Магический номер должен присутствовать в первых четырех байтах файла байт-кода, в порядке следования байтов по строкам. Возвращает-1при ошибке.Изменено в версии 3.3: Возвращает значение
-1в случае сбоя.
-
const char *PyImport_GetMagicTag()¶
- Part of the Стабильный ABI.
Возвращает строку магического тега для PEP 3147 форматирования имен файлов в байт-коде Python. Имейте в виду, что значение
sys.implementation.cache_tagявляется авторитетным и должно использоваться вместо этой функции.Добавлено в версии 3.2.
-
PyObject *PyImport_GetModuleDict()¶
- Возвращаемое значение: Заимствованная ссылка. Part of the Стабильный ABI.
Возвращает словарь, используемый для администрирования модуля (он же.
sys.modules). Обратите внимание, что это переменная для каждого интерпретатора.
-
PyObject *PyImport_GetModule(PyObject *name)¶
- Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI since version 3.8.
Возвращает уже импортированный модуль с заданным именем. Если модуль еще не был импортирован, возвращает
NULL, но не выдает ошибку. ВозвращаетNULLи выдает ошибку, если поиск не удался.Добавлено в версии 3.7.
-
PyObject *PyImport_GetImporter(PyObject *path)¶
- Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI.
Возвращает объект finder для
sys.path/pkg.__path__элемент path, возможно, путем извлечения его изsys.path_importer_cachedict. Если он еще не был кэширован, перемещайтесь поsys.path_hooksдо тех пор, пока не будет найден хук, который может обработать элемент path. ВернитеNone, если не удалось перехватить; это сообщает нашему вызывающему объекту, что path based finder не удалось найти finder для этого элемента path. Кэшируйте результат вsys.path_importer_cache. Верните новую ссылку на объект finder.
-
int PyImport_ImportFrozenModuleObject(PyObject *name)¶
- Part of the Стабильный ABI since version 3.7.
Загрузите замороженный модуль с именем name. Верните
1в случае успеха,0если модуль не найден, и-1с установленным исключением, если инициализация завершилась неудачно. Чтобы получить доступ к импортированному модулю при успешной загрузке, используйте:c:func:PyImport_ImportModule. (Обратите внимание на неправильное название - эта функция перезагрузит модуль, если он уже был импортирован.)Добавлено в версии 3.3.
Изменено в версии 3.4: Атрибут
__file__больше не установлен в модуле.
-
int PyImport_ImportFrozenModule(const char *name)¶
- Part of the Стабильный ABI.
Аналогично
PyImport_ImportFrozenModuleObject(), но имя представляет собой строку в кодировке UTF-8, а не объект в Юникоде.
-
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))¶
- Part of the Стабильный 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 должен заканчиваться контрольной записью, которая содержит
NULLдля поляname; если не указать контрольное значение, это может привести к сбою в памяти. Возвращает0в случае успеха или-1, если для расширения внутренней таблицы может быть выделено недостаточно памяти. В случае сбоя модули во внутреннюю таблицу не добавляются. Это должно быть вызвано доPy_Initialize().Если Python инициализируется несколько раз, то перед каждой инициализацией Python необходимо вызывать
PyImport_AppendInittab()илиPyImport_ExtendInittab().