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

PyObject* PyImport_ImportModule(const char *name)
Return value: New reference.

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

Функция всегда использует абсолютный импорт.

PyObject* PyImport_ImportModuleNoBlock(const char *name)
Return value: New reference.

Функция является устаревшим алиасом для PyImport_ImportModule().

Изменено в версии 3.3: Используемая функция завершаться сбоем сразу же, когда блокировка импорта удерживается другим потоком. Однако в Python 3.3 схема блокировки переключается на блокировки модулей для большинства целей, поэтому специальное поведение этой функции больше не требуется.

PyObject* PyImport_ImportModuleEx(const char *name, PyObject *globals, PyObject *locals, PyObject *fromlist)
Return value: New reference.

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

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

При неудачном импорте удаляются неполные объекты модуля, например, с PyImport_ImportModule().

PyObject* PyImport_ImportModuleLevelObject(PyObject *name, PyObject *globals, PyObject *locals, PyObject *fromlist, int level)
Return value: New reference.

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

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

Добавлено в версии 3.3.

PyObject* PyImport_ImportModuleLevel(const char *name, PyObject *globals, PyObject *locals, PyObject *fromlist, int level)
Return value: New reference.

Аналогично PyImport_ImportModuleLevelObject(), но имя - это UTF-8 кодированная строка вместо объекта Юникода.

Изменено в версии 3.3: Отрицательные значения для level больше не принимаются.

PyObject* PyImport_Import(PyObject *name)
Return value: New reference.

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

Функция всегда использует абсолютный импорт.

PyObject* PyImport_ReloadModule(PyObject *m)
Return value: New reference.

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

PyObject* PyImport_AddModuleObject(PyObject *name)
Return value: Borrowed reference.

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

Примечание

Функция не загружает и не импортирует модуль; если модуль еще не загружен, будет получен пустой объект модуля. Для импорта модуля используйте PyImport_ImportModule() или один из его вариантов. Структуры пакетов, подразумеваемые пунктирным именем для name, не создаются, если они еще не существуют.

Добавлено в версии 3.3.

PyObject* PyImport_AddModule(const char *name)
Return value: Borrowed reference.

Аналогично PyImport_AddModuleObject(), но имя - это UTF-8 кодированная строка вместо объекта Юникода.

PyObject* PyImport_ExecCodeModule(const char *name, PyObject *co)
Return value: New reference.

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

__spec__ и __loader__ модуля будут установлены, если они еще не установлены, с соответствующими значениями. Загрузчик spec будет установлен на __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)
Return value: New reference.

Как PyImport_ExecCodeModule(), но __file__ атрибут объекта модуля установлен в pathname, если это не-NULL.

См. также PyImport_ExecCodeModuleWithPathnames().

PyObject* PyImport_ExecCodeModuleObject(PyObject *name, PyObject *co, PyObject *pathname, PyObject *cpathname)
Return value: New reference.

Как PyImport_ExecCodeModuleEx(), но __cached__ атрибут объекта модуля установлен в cpathname, если это - не-NULL. Из трех функций эта является предпочтительной для использования.

Добавлено в версии 3.3.

PyObject* PyImport_ExecCodeModuleWithPathnames(const char *name, PyObject *co, const char *pathname, const char *cpathname)
Return value: New reference.

Как и PyImport_ExecCodeModuleObject(), но name, pathname и cpathname являются UTF-8 кодированными строками. Также предпринимаются попытки выяснить, какое должно быть значение для pathname cpathname если первый установлен на NULL.

Добавлено в версии 3.2.

Изменено в версии 3.3: Использует imp.source_from_cache() при вычислении пути источника, если предоставлен только путь байт-кода.

long PyImport_GetMagicNumber()

Возвращает магическое число для файлов Python байт-кода (иначе. .pyc файл). Магическое число должно присутствовать в первых четырех байтах файла байт-кода в прямом порядоке байтов (little-endian). Возвращает -1 при ошибке.

Изменено в версии 3.3: Возвращает значение -1 при отказе.

const char * PyImport_GetMagicTag()

Возвращает волшебный тэг строку для формата Python PEP 3147 байт-кода имени файлов. Имейте в виду, что значение в sys.implementation.cache_tag является авторитетным и должно использоваться вместо этой функции.

Добавлено в версии 3.2.

PyObject* PyImport_GetModuleDict()
Return value: Borrowed reference.

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

PyObject* PyImport_GetModule(PyObject *name)
Return value: New reference.

Возвращает уже импортированный модуль с заданным именем. Если модуль еще не импортирован, возвращает NULL, но не задает ошибку. Возвращает NULL и устанавливает ошибку в случае сбоя поиска.

Добавлено в версии 3.7.

PyObject* PyImport_GetImporter(PyObject *path)
Return value: New reference.

Возвращает объект поиска для 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()

Завершение работы над механизмом импорта. Только для внутреннего использования.

int PyImport_ImportFrozenModuleObject(PyObject *name)
Return value: New reference.

Загрузить замороженный модуль с именем name. Возвращает 1 при успехе, 0 если модуль не найден, и -1 с набором исключений, если инициализация не удалась. Чтобы получить доступ к импортированному модулю при успешной загрузке, используйте PyImport_ImportModule(). (Обратите внимание на неправильное число, — эта функция перезагружает модуль, если он уже импортирован.)

Добавлено в версии 3.3.

Изменено в версии 3.4: В модуле больше не установлен __file__ атрибут.

int PyImport_ImportFrozenModule(const char *name)

Аналогично PyImport_ImportFrozenModuleObject(), но имя - это UTF-8 кодированной строкой вместо объекта Юникода.

struct _frozen

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

struct _frozen {
    const char *name;
    const unsigned char *code;
    int size;
};
const struct _frozen* PyImport_FrozenModules

Указатель инициализируется указанием на массив struct _frozen записей, заканчивающийся одним, где все члены которого равны NULL или нулю. При импорте замороженного модуля он ищется в этой таблице. Сторонний код может играться с ним, чтобы обеспечить динамически созданную коллекцию замороженных модулей.

int PyImport_AppendInittab(const char *name, PyObject* (*initfunc)(void))

Добавить один модуль в существующую таблицу встроенных модулей. Это удобная обертка вокруг PyImport_ExtendInittab(), возвращающая -1, если таблицу не удалось расширить. Новый модуль может быть импортирован по имени name и использовать функцию initfunc в качестве функции инициализации, вызываемой при первой попытке импорта. Должна вызываться до Py_Initialize().

struct _inittab

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

struct _inittab {
    const char *name;           /* Строка в кодировке ASCII */
    PyObject* (*initfunc)(void);
};
int PyImport_ExtendInittab(struct _inittab *newtab)

Добавить коллекцию модулей в таблицу встроенных модулей. Массив newtab должен заканчиваться контрольной записью, содержащей NULL для поля name; невозможность предоставления контрольного значения может привести к сбою памяти. Возвращает 0 при успехе или -1, если для расширения внутренней таблицы может быть аллоцированно недостаточно памяти. В случае отказа модули не добавляются во внутреннюю таблицу. Должна вызываться перед Py_Initialize().