Импорт модулей¶
-
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().
