Імпорт модулів

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 to NULL 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, or NULL with an exception set on failure. A failing import of a module doesn’t leave the module in 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 замість об’єкта 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. Return NULL 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 function compile(), load the module. Return a new reference to the module object, or NULL with an exception set if an error occurred. name is removed from sys.modules in error cases, even if name was already in sys.modules on entry to PyImport_ExecCodeModule(). Leaving incompletely initialized modules in sys.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 of SourceFileLoader otherwise.

The module’s __file__ attribute will be set to the code object’s co_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 the sys.path_importer_cache dict. If it wasn’t yet cached, traverse sys.path_hooks until a hook is found that can handle the path item. Return None 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 in sys.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 all NULL 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 in Include/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 the name field; failure to provide the sentinel value can result in a memory fault. Returns 0 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 before Py_Initialize().

Якщо Python ініціалізовано кілька разів, перед кожною ініціалізацією Python потрібно викликати PyImport_AppendInittab() або PyImport_ExtendInittab().