Импорт модулей¶
-
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_cache
dict. Если он еще не был кэширован, перемещайтесь по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()
.