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

PyObject *`PyImport_ImportModule`(const char *name)
  Return value: New reference. Part of the Stable ABI.

  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. Part of the Stable ABI.

  Ця функція є застарілим псевдонімом `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. Part of the Stable ABI since version 3.7.

  Імпортувати модуль. Найкраще це можна описати, звернувшись до вбудованої функції 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. Part of the Stable ABI.

  Подібно до `PyImport_ImportModuleLevelObject()`, але ім’я є рядком у кодуванні UTF-8 замість об’єкта Unicode.

  Змінено в версії 3.3: Від’ємні значення для рівня більше не приймаються.

PyObject *`PyImport_Import`(PyObject *name)
  Return value: New reference. Part of the Stable ABI.

  Це інтерфейс вищого рівня, який викликає поточну «функцію перехоплення імпорту» (з явним рівнем 0, що означає абсолютний імпорт). Він викликає функцію `__import__()` з `__builtins__` поточних глобалів. Це означає, що імпорт виконується за допомогою будь-яких хуків імпорту, встановлених у поточному середовищі.

  Ця функція завжди використовує абсолютний імпорт.

PyObject *`PyImport_ReloadModule`(PyObject *m)
  Return value: New reference. Part of the Stable ABI.

  Перезавантажте модуль. Повертає нове посилання на перезавантажений модуль або `NULL` з винятком, встановленим у разі помилки (у цьому випадку модуль все ще існує).

PyObject *`PyImport_AddModuleObject`(PyObject *name)
  Return value: Borrowed reference. Part of the Stable ABI since version 3.7.

  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. Part of the Stable ABI.

  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. Part of the Stable ABI.

  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. Part of the Stable ABI.

  Like `PyImport_ExecCodeModule()`, but the `__file__` attribute of the module object is set to pathname if it is non-`NULL`.

  Дивіться також `PyImport_ExecCodeModuleWithPathnames()`.

PyObject *`PyImport_ExecCodeModuleObject`(PyObject *name, PyObject *co, PyObject *pathname, PyObject *cpathname)
  Return value: New reference. Part of the Stable ABI since version 3.7.

  Like `PyImport_ExecCodeModuleEx()`, but the `__cached__` attribute of the module object is set to cpathname if it is non-`NULL`. Of the three functions, this is the preferred one to use.

  Нове в версії 3.3.

PyObject *`PyImport_ExecCodeModuleWithPathnames`(const char *name, PyObject *co, const char *pathname, const char *cpathname)
  Return value: New reference. Part of the Stable ABI.

  Як `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`()
  Part of the Stable ABI.

  Повертає магічне число для файлів байт-коду Python (він же файл `.pyc`). Магічне число має бути присутнім у перших чотирьох байтах файлу байт-коду в порядку байтів у порядку байтів. Повертає `-1` у разі помилки.

  Змінено в версії 3.3: Повертає значення «-1» у разі помилки.

const char *`PyImport_GetMagicTag`()
  Part of the Stable ABI.

  Повертає рядок чарівного тегу для імен файлів байт-коду Python у форматі PEP 3147. Майте на увазі, що значення в `sys.implementation.cache_tag` є авторитетним і має використовуватися замість цієї функції.

  Нове в версії 3.2.

PyObject *`PyImport_GetModuleDict`()
  Return value: Borrowed reference. Part of the Stable ABI.

  Повертає словник, який використовується для адміністрування модуля (він же `sys.modules`). Зверніть увагу, що це змінна для кожного інтерпретатора.

PyObject *`PyImport_GetModule`(PyObject *name)
  Return value: New reference. Part of the Stable ABI since version 3.8.

  Повернути вже імпортований модуль із вказаною назвою. Якщо модуль ще не було імпортовано, повертає `NULL`, але не встановлює помилку. Повертає `NULL` і встановлює помилку, якщо пошук не вдався.

  Нове в версії 3.7.

PyObject *`PyImport_GetImporter`(PyObject *path)
  Return value: New reference. Part of the Stable ABI.

  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)
  Part of the Stable ABI since version 3.7.

  Завантажте заморожений модуль під назвою name. Повертає `1` для успіху, `0`, якщо модуль не знайдено, `-1` із встановленим винятком, якщо ініціалізація не вдалася. Щоб отримати доступ до імпортованого модуля після успішного завантаження, використовуйте `PyImport_ImportModule()`. (Зверніть увагу на неправильну назву — ця функція перезавантажить модуль, якщо його вже було імпортовано.)

  Нове в версії 3.3.

  Змінено в версії 3.4: Атрибут `__file__` більше не встановлено в модулі.

int `PyImport_ImportFrozenModule`(const char *name)
  Part of the Stable ABI.

  Подібно до `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 `_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))
  Part of the Stable ABI.

  Додайте один модуль до існуючої таблиці вбудованих модулів. Це зручна обгортка навколо `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()`.