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

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

  This is a wrapper around `PyImport_Import()` which takes a const char* as an argument instead of a PyObject*.

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

  Ця функція є застарілим псевдонімом `PyImport_ImportModule()`.

  Змінено в версії 3.3: Раніше ця функція відразу виходила з ладу, коли блокування імпорту утримувалося іншим потоком. Однак у Python 3.3 схема блокування перейшла на блокування по модулю для більшості цілей, тому особлива поведінка цієї функції більше не потрібна.

  Deprecated since version 3.13, will be removed in version 3.15: Use `PyImport_ImportModule()` instead.

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.

  Added in version 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_AddModuleRef(const char *name)
  Return value: New reference. Part of the Stable ABI since version 3.13.

  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 a strong reference to the module on success. Return `NULL` with an exception set on failure.

  The module name name is decoded from UTF-8.

  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.

  Added in version 3.13.

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

  Similar to `PyImport_AddModuleRef()`, but return a borrowed reference and name is a Python `str` object.

  Added in version 3.3.

PyObject *PyImport_AddModule(const char *name)
  Return value: Borrowed reference. Part of the Stable ABI.

  Similar to `PyImport_AddModuleRef()`, but return a borrowed reference.

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()`.

  Змінено в версії 3.12: The setting of `__cached__` and `__loader__` is deprecated. See `ModuleSpec` for alternatives.

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.

  Added in version 3.3.

  Змінено в версії 3.12: Setting `__cached__` is deprecated. See `ModuleSpec` for alternatives.

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`.

  Added in version 3.2.

  Змінено в версії 3.3: Uses `imp.source_from_cache()` in calculating the source path if only the bytecode path is provided.

  Змінено в версії 3.12: No longer uses the removed `imp` module.

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` є авторитетним і має використовуватися замість цієї функції.

  Added in version 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` і встановлює помилку, якщо пошук не вдався.

  Added in version 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()`. (Зверніть увагу на неправильну назву — ця функція перезавантажить модуль, якщо його вже було імпортовано.)

  Added in version 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;
          bool is_package;
      };

  Змінено в версії 3.11: The new `is_package` field indicates whether the module is a package or not. This replaces setting the `size` field to a negative value.

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. Programs which embed Python may use an array of these structures in conjunction with `PyImport_ExtendInittab()` to provide additional built-in modules. The structure consists of two members:

  const char *name

    The module name, as an ASCII encoded string.

  PyObject *(*initfunc)(void)

    Initialization function for a module built into the interpreter.

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()`.