Імпорт модулів¶
-
PyObject*
PyImport_ImportModule
(const char *name)¶ - Return value: New reference.
This is a simplified interface to
PyImport_ImportModuleEx()
below, leaving the globals and locals arguments set toNULL
and level set to 0. When the name argument contains a dot (when it specifies a submodule of a package), the fromlist argument is set to the list['*']
so that the return value is the named module rather than the top-level package containing it as would otherwise be the case. (Unfortunately, this has an additional side effect when name in fact specifies a subpackage instead of a submodule: the submodules specified in the package’s__all__
variable are loaded.) Return a new reference to the imported module, orNULL
with an exception set on failure. A failing import of a module doesn’t leave the module insys.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 замість об’єкта Unicode.Змінено в версії 3.3: Від’ємні значення для рівня більше не приймаються.
-
PyObject*
PyImport_Import
(PyObject *name)¶ - Return value: New reference.
Це інтерфейс вищого рівня, який викликає поточну «функцію перехоплення імпорту» (з явним рівнем 0, що означає абсолютний імпорт). Він викликає функцію
__import__()
з__builtins__
поточних глобалів. Це означає, що імпорт виконується за допомогою будь-яких хуків імпорту, встановлених у поточному середовищі.Ця функція завжди використовує абсолютний імпорт.
-
PyObject*
PyImport_ReloadModule
(PyObject *m)¶ - Return value: New reference.
Перезавантажте модуль. Повертає нове посилання на перезавантажений модуль або
NULL
з винятком, встановленим у разі помилки (у цьому випадку модуль все ще існує).
-
PyObject*
PyImport_AddModuleObject
(PyObject *name)¶ - Return value: Borrowed reference.
Return the module object corresponding to a module name. The name argument may be of the form
package.module
. First check the modules dictionary if there’s one there, and if not, create a new one and insert it in the modules dictionary. ReturnNULL
with an exception set on failure.Примітка
This function does not load or import the module; if the module wasn’t already loaded, you will get an empty module object. Use
PyImport_ImportModule()
or one of its variants to import a module. Package structures implied by a dotted name for name are not created if not already present.Нове в версії 3.3.
-
PyObject*
PyImport_AddModule
(const char *name)¶ - Return value: Borrowed reference.
Similar to
PyImport_AddModuleObject()
, but the name is a UTF-8 encoded string instead of a Unicode object.
-
PyObject*
PyImport_ExecCodeModule
(const char *name, PyObject *co)¶ - Return value: New reference.
Given a module name (possibly of the form
package.module
) and a code object read from a Python bytecode file or obtained from the built-in functioncompile()
, load the module. Return a new reference to the module object, orNULL
with an exception set if an error occurred. name is removed fromsys.modules
in error cases, even if name was already insys.modules
on entry toPyImport_ExecCodeModule()
. Leaving incompletely initialized modules insys.modules
is dangerous, as imports of such modules have no way to know that the module object is an unknown (and probably damaged with respect to the module author’s intents) state.The module’s
__spec__
and__loader__
will be set, if not set already, with the appropriate values. The spec’s loader will be set to the module’s__loader__
(if set) and to an instance ofSourceFileLoader
otherwise.The module’s
__file__
attribute will be set to the code object’sco_filename
. If applicable,__cached__
will also be set.Ця функція перезавантажить модуль, якщо він уже був імпортований. Перегляньте
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: Uses
imp.source_from_cache()
in calculating the source path if only the bytecode path is provided.
-
long
PyImport_GetMagicNumber
()¶ Повертає магічне число для файлів байт-коду Python (він же файл
.pyc
). Магічне число має бути присутнім у перших чотирьох байтах файлу байт-коду в порядку байтів у порядку байтів. Повертає-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.
Return a finder object for a
sys.path
/pkg.__path__
item path, possibly by fetching it from thesys.path_importer_cache
dict. If it wasn’t yet cached, traversesys.path_hooks
until a hook is found that can handle the path item. ReturnNone
if no hook could; this tells our caller that the path based finder could not find a finder for this path item. Cache the result insys.path_importer_cache
. Return a new reference to the finder object.
-
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 замість об’єкта Unicode.
-
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
¶ This pointer is initialized to point to an array of
struct _frozen
records, terminated by one whose members are allNULL
or zero. When a frozen module is imported, it is searched in this table. Third-party code could play tricks with this to provide a dynamically created collection of frozen modules.
-
int
PyImport_AppendInittab
(const char *name, PyObject* (*initfunc)(void))¶ Додайте один модуль до існуючої таблиці вбудованих модулів. Це зручна обгортка навколо
PyImport_ExtendInittab()
, яка повертає-1
, якщо таблицю не можна розширити. Новий модуль можна імпортувати під назвою name і використовувати функцію initfunc як функцію ініціалізації, викликану під час першої спроби імпорту. Його слід викликати передPy_Initialize()
.
-
struct
_inittab
¶ Structure describing a single entry in the list of built-in modules. Each of these structures gives the name and initialization function for a module built into the interpreter. The name is an ASCII encoded string. Programs which embed Python may use an array of these structures in conjunction with
PyImport_ExtendInittab()
to provide additional built-in modules. The structure is defined inInclude/import.h
as:struct _inittab { const char *name; /* ASCII encoded string */ PyObject* (*initfunc)(void); };
-
int
PyImport_ExtendInittab
(struct _inittab *newtab)¶ Add a collection of modules to the table of built-in modules. The newtab array must end with a sentinel entry which contains
NULL
for thename
field; failure to provide the sentinel value can result in a memory fault. Returns0
on success or-1
if insufficient memory could be allocated to extend the internal table. In the event of failure, no modules are added to the internal table. This must be called beforePy_Initialize()
.Якщо Python ініціалізовано кілька разів, перед кожною ініціалізацією Python потрібно викликати
PyImport_AppendInittab()
абоPyImport_ExtendInittab()
.