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