Импортирование модулей
-
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; bool is_package; };Изменено в версии 3.11: Новый атрибут
is_packageуказывает, является ли модуль пакетом. Это заменяет установку атрибута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 -
Структура, описывающая одну запись в списке встроенных модулей. Программы, которые внедряют Python, могут использовать массив таких структур в сочетании с
PyImport_ExtendInittab(), чтобы предоставить дополнительные встроенные модули. Структура состоит из двух членов:-
const char *name -
Имя модуля в кодировке ASCII.
-
-
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.11/c-api/import.html