Документация Python неофициальный перевод

Импорт модулейImporting Modules

PyObject* PyImport_ImportModule(const char *name)
Возвращаемое значение: новая ссылка.

Это упрощённый интерфейс к PyImport_ImportModuleEx (см. ниже); аргументы globals и locals устанавливаются в NULL, а level – в 0. Когда аргумент name содержит точку (то есть указывает на подмодуль пакета), аргумент fromlist устанавливается в список ['*'], так что возвращается именованный модуль, а не содержащий его пакет верхнего уровня, как было бы в противном случае. (К сожалению, это даёт дополнительный побочный эффект, когда name на самом деле указывает на подпакет, а не на подмодуль: подмодули, указанные в переменной __all__ пакета, загружаются.) Возвращает новую ссылку на импортированный модуль или NULL с установленным исключением при неудаче. Неудачный импорт модуля не оставляет модуль в sys.modules.

PyObject* PyImport_ImportModuleNoBlock(const char *name)
Эта версия PyImport_ImportModule не блокируется. Она предназначена для использования в C-функциях, которые импортируют другие модули для выполнения функции. Импорт может блокироваться, если другой поток удерживает блокировку импорта. Функция PyImport_ImportModuleNoBlock никогда не блокируется. Сначала она пытается получить модуль из sys.modules, а при неудаче прибегает к PyImport_ImportModule, если только блокировка не удерживается; в этом случае функция возбуждает исключение ImportError.
PyObject* PyImport_ImportModuleEx(char *name, PyObject *globals, PyObject *locals, PyObject *fromlist)
Возвращаемое значение: новая ссылка.

Импортирует модуль. Лучше всего это описывается встроенной функцией Python __import__(), поскольку стандартная функция __import__() напрямую вызывает эту функцию.

Возвращаемое значение – новая ссылка на импортированный модуль или пакет верхнего уровня, или NULL с установленным исключением в случае ошибки. Как и для __import__(), возвращаемое значение при запросе подмодуля пакета обычно является пакетом верхнего уровня, если только не был передан непустой fromlist.

Неудачные импорты удаляют неполные объекты модулей, как и PyImport_ImportModule.

PyObject* PyImport_ImportModuleLevel(char *name, PyObject *globals, PyObject *locals, PyObject *fromlist, int level)

Импортирует модуль. Лучше всего это описывается встроенной функцией Python __import__(), поскольку стандартная функция __import__() напрямую вызывает эту функцию.

Возвращаемое значение – новая ссылка на импортированный модуль или пакет верхнего уровня, или NULL с установленным исключением в случае ошибки. Как и для __import__(), возвращаемое значение при запросе подмодуля пакета обычно является пакетом верхнего уровня, если только не был передан непустой fromlist.

PyObject* PyImport_Import(PyObject *name)
Возвращаемое значение: новая ссылка.

Это интерфейс более высокого уровня, который вызывает текущую «функцию перехвата импорта» (с явным level, равным 0, что означает абсолютный импорт). Он вызывает функцию __import__() из __builtins__ текущих globals. Это означает, что импорт выполняется с использованием тех перехватчиков импорта, которые установлены в текущем окружении.

PyObject* PyImport_ReloadModule(PyObject *m)
Возвращаемое значение: новая ссылка.

Перезагружает модуль. Возвращает новую ссылку на перезагруженный модуль или NULL с установленным исключением в случае неудачи (в этом случае модуль всё ещё существует).

PyObject* PyImport_AddModule(const char *name)
Возвращаемое значение: заимствованная ссылка.

Возвращает объект модуля, соответствующий имени модуля. Аргумент name может иметь вид package.module. Сначала проверяется словарь модулей, есть ли там такой модуль; если нет, создаётся новый и вставляется в словарь модулей. Возвращает NULL с установленным исключением в случае ошибки.

Примечание

Эта функция не загружает и не импортирует модуль; если модуль ещё не был загружен, вы получите пустой объект модуля. Используйте PyImport_ImportModule или один из его вариантов для импорта модуля. Структуры пакетов, подразумеваемые составным именем для name, не создаются, если их ещё нет.

PyObject* PyImport_ExecCodeModule(char *name, PyObject *co)
Возвращаемое значение: новая ссылка.

Получив имя модуля (возможно, в форме package.module) и объект кода, прочитанный из файла байт-кода Python или полученный от встроенной функции compile(), загрузите модуль. Возвращает новую ссылку на объект модуля или NULL с установленным исключением, если произошла ошибка. В случае ошибки name удаляется из sys.modules, даже если name уже был в sys.modules на момент входа в PyImport_ExecCodeModule. Оставлять неполностью инициализированные модули в sys.modules опасно, так как импорты таких модулей не могут знать, что объект модуля находится в неизвестном (и, вероятно, повреждённом относительно намерений автора модуля) состоянии.

Эта функция перезагрузит модуль, если он уже был импортирован. См. PyImport_ReloadModule для правильного способа перезагрузки модуля.

Если name указывает на составное имя вида package.module, любые структуры пакетов, которые ещё не были созданы, по-прежнему не будут созданы.

long PyImport_GetMagicNumber()
Возвращает магическое число для файлов байт-кода Python (также известных как файлы .pyc и .pyo). Магическое число должно находиться в первых четырёх байтах файла байт-кода в порядке little-endian.
PyObject* PyImport_GetModuleDict()
Возвращаемое значение: заимствованная ссылка.

Возвращает словарь, используемый для управления модулями (также известный как sys.modules). Обратите внимание, что это переменная на интерпретатор.

PyObject* PyImport_GetImporter(PyObject *path)
Возвращает объект импортёра для элемента sys.path/pkg.__path__ path, возможно, получая его из словаря sys.path_importer_cache. Если он ещё не кеширован, просматривает sys.path_hooks, пока не будет найден хук, способный обработать элемент пути. Возвращает None, если ни один хук не подошёл; это говорит вызывающему коду, что следует прибегнуть к встроенному механизму импорта. Кеширует результат в sys.path_importer_cache. Возвращает новую ссылку на объект импортёра.
void _PyImport_Init()
Инициализирует механизм импорта. Только для внутреннего использования.
void PyImport_Cleanup()
Очищает таблицу модулей. Только для внутреннего использования.
void _PyImport_Fini()
Завершает работу механизма импорта. Только для внутреннего использования.
PyObject* _PyImport_FindExtension(char *, char *)
Только для внутреннего использования.
PyObject* _PyImport_FixupExtension(char *, char *)
Только для внутреннего использования.
int PyImport_ImportFrozenModule(char *name)
Загружает замороженный модуль с именем name. Возвращает 1 в случае успеха, 0 если модуль не найден, и -1 с установленным исключением, если инициализация не удалась. Чтобы получить доступ к импортированному модулю при успешной загрузке, используйте PyImport_ImportModule. (Обратите внимание на неточность названия – эта функция перезагрузит модуль, если он уже был импортирован.)
struct _frozen

Это определение типа структуры для дескрипторов замороженных модулей, создаваемое утилитой freeze (см. Tools/freeze/ в дистрибутиве исходного кода Python). Её определение находится в Include/import.h:

struct _frozen {
    char *name;
    unsigned char *code;
    int size;
};
struct _frozen* PyImport_FrozenModules
Этот указатель инициализируется так, чтобы указывать на массив записей struct _frozen, заканчивающийся записью, все члены которой равны NULL или нулю. Когда замороженный модуль импортируется, он ищется в этой таблице. Сторонний код может использовать это для предоставления динамически созданной коллекции замороженных модулей.
int PyImport_AppendInittab(char *name, PyObject* (*initfunc)(void))
Добавляет один модуль в существующую таблицу встроенных модулей. Это удобная обёртка вокруг PyImport_ExtendInittab, возвращающая -1, если таблицу не удалось расширить. Новый модуль можно импортировать по имени name, и он использует функцию initfunc в качестве функции инициализации, вызываемой при первой попытке импорта. Это должно быть вызвано до Py_Initialize.
struct _inittab

Структура, описывающая одну запись в списке встроенных модулей. Каждая из этих структур задаёт имя и функцию инициализации для модуля, встроенного в интерпретатор. Программы, встраивающие Python, могут использовать массив таких структур совместно с PyImport_ExtendInittab для предоставления дополнительных встроенных модулей. Структура определена в Include/import.h как:

struct _inittab {
    char *name;
    PyObject* (*initfunc)(void);
};
int PyImport_ExtendInittab(struct _inittab *newtab)
Добавляет набор модулей в таблицу встроенных модулей. Массив newtab должен заканчиваться сторожевым элементом, содержащим NULL в поле name; отсутствие сторожевого значения может привести к ошибке памяти. Возвращает 0 в случае успеха или -1, если недостаточно памяти для расширения внутренней таблицы. В случае ошибки модули не добавляются во внутреннюю таблицу. Должна вызываться до Py_Initialize.