> **Источник:** https://python-all.ru/3.0/c-api/veryhigh.html
>
> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.

---

# Слой очень высокого уровня

Функции этой главы позволяют выполнять исходный код Python, переданный в файле или буфере, но не дают возможности взаимодействовать с интерпретатором на более детальном уровне.

Некоторые из этих функций принимают в качестве параметра начальный символ из грамматики. Доступны следующие начальные символы: [`Py_eval_input`](https://python-all.ru/3.0/c-api/veryhigh.html#Py_eval_input), [`Py_file_input`](https://python-all.ru/3.0/c-api/veryhigh.html#Py_file_input) и [`Py_single_input`](https://python-all.ru/3.0/c-api/veryhigh.html#Py_single_input). Они описаны после функций, которые принимают их в качестве параметров.

Отметим также, что некоторые из этих функций принимают параметры типа `FILE*`. Особая проблема, требующая внимания, заключается в том, что структура `FILE` может различаться и быть несовместимой в разных библиотеках C. По крайней мере в Windows динамически подключаемые расширения могут использовать разные библиотеки, поэтому следует быть осторожным: параметры `FILE*` следует передавать этим функциям только в том случае, если точно известно, что они созданы той же библиотекой, которую использует среда выполнения Python.

**\[Py\_Main\]int `Py_Main`(int *argc*, wchar\_t *\*\*argv*)**

Главная программа стандартного интерпретатора. Она доступна для программ, встраивающих Python. Параметры

*argc*

и

*argv*

должны быть подготовлены точно так же, как они передаются функции

`main`

программы на C (преобразованы в wchar\_t в соответствии с локалью пользователя). Список аргументов может изменяться (но содержимое строк, на которые указывает список аргументов, не изменяется). Возвращаемое значение – целое число, переданное функции

[`sys.exit()`](https://python-all.ru/3.0/library/sys.html#sys.exit)

,

`1`

если интерпретатор завершился из-за исключения, или

`2`

если список параметров не представляет допустимую командную строку Python.

**\[PyRun\_AnyFile\]int `PyRun_AnyFile`(FILE *\*fp*, const char *\*filename*)**

Это упрощённый интерфейс к

[`PyRun_AnyFileExFlags`](https://python-all.ru/3.0/c-api/veryhigh.html#PyRun_AnyFileExFlags)

(см. ниже), оставляющий

*closeit*

равным

`0`

, а

*flags*

– равным

*NULL*

.

**\[PyRun\_AnyFileFlags\]int `PyRun_AnyFileFlags`(FILE *\*fp*, const char *\*filename*, [PyCompilerFlags](https://python-all.ru/3.0/c-api/veryhigh.html#PyCompilerFlags) *\*flags*)**

Это упрощённый интерфейс к

[`PyRun_AnyFileExFlags`](https://python-all.ru/3.0/c-api/veryhigh.html#PyRun_AnyFileExFlags)

(см. ниже), оставляющий аргумент

*closeit*

равным

`0`

.

**\[PyRun\_AnyFileEx\]int `PyRun_AnyFileEx`(FILE *\*fp*, const char *\*filename*, int *closeit*)**

Это упрощённый интерфейс к

[`PyRun_AnyFileExFlags`](https://python-all.ru/3.0/c-api/veryhigh.html#PyRun_AnyFileExFlags)

(см. ниже), оставляющий аргумент

*flags*

равным

*NULL*

.

**\[PyRun\_AnyFileExFlags\]int `PyRun_AnyFileExFlags`(FILE *\*fp*, const char *\*filename*, int *closeit*, [PyCompilerFlags](https://python-all.ru/3.0/c-api/veryhigh.html#PyCompilerFlags) *\*flags*)**

Если

*fp*

указывает на файл, связанный с интерактивным устройством (консоль, терминальный ввод или псевдотерминал Unix), возвращается значение

[`PyRun_InteractiveLoop`](https://python-all.ru/3.0/c-api/veryhigh.html#PyRun_InteractiveLoop)

; в противном случае возвращается результат

[`PyRun_SimpleFile`](https://python-all.ru/3.0/c-api/veryhigh.html#PyRun_SimpleFile)

. Если

*filename*

равно

*NULL*

, эта функция использует

`"???"`

в качестве имени файла.

**\[PyRun\_SimpleString\]int `PyRun_SimpleString`(const char *\*command*)**

Это упрощённый интерфейс к

[`PyRun_SimpleStringFlags`](https://python-all.ru/3.0/c-api/veryhigh.html#PyRun_SimpleStringFlags)

(см. ниже), оставляющий аргумент

*PyCompilerFlags\**

равным NULL.

**\[PyRun\_SimpleStringFlags\]int `PyRun_SimpleStringFlags`(const char *\*command*, [PyCompilerFlags](https://python-all.ru/3.0/c-api/veryhigh.html#PyCompilerFlags) *\*flags*)**

Выполняет исходный код Python из

*command*

в модуле

[`__main__`](https://python-all.ru/3.0/library/__main__.html#module-__main__)

в соответствии с аргументом

*flags*

. Если модуль

[`__main__`](https://python-all.ru/3.0/library/__main__.html#module-__main__)

ещё не существует, он создаётся. Возвращает

`0`

при успехе или

`-1`

, если было возбуждено исключение. В случае ошибки получить информацию об исключении невозможно. О значении

*flags*

см. ниже.

**\[PyRun\_SimpleFile\]int `PyRun_SimpleFile`(FILE *\*fp*, const char *\*filename*)**

Это упрощённый интерфейс к

[`PyRun_SimpleFileExFlags`](https://python-all.ru/3.0/c-api/veryhigh.html#PyRun_SimpleFileExFlags)

(см. ниже), оставляющий

*closeit*

равным

`0`

, а

*flags*

– равным

*NULL*

.

**\[PyRun\_SimpleFileFlags\]int `PyRun_SimpleFileFlags`(FILE *\*fp*, const char *\*filename*, [PyCompilerFlags](https://python-all.ru/3.0/c-api/veryhigh.html#PyCompilerFlags) *\*flags*)**

Это упрощённый интерфейс к

[`PyRun_SimpleFileExFlags`](https://python-all.ru/3.0/c-api/veryhigh.html#PyRun_SimpleFileExFlags)

(см. ниже), оставляющий

*closeit*

равным

`0`

.

**\[PyRun\_SimpleFileEx\]int `PyRun_SimpleFileEx`(FILE *\*fp*, const char *\*filename*, int *closeit*)**

Это упрощённый интерфейс к

[`PyRun_SimpleFileExFlags`](https://python-all.ru/3.0/c-api/veryhigh.html#PyRun_SimpleFileExFlags)

(см. ниже), оставляющий

*flags*

равным

*NULL*

.

**\[PyRun\_SimpleFileExFlags\]int `PyRun_SimpleFileExFlags`(FILE *\*fp*, const char *\*filename*, int *closeit*, [PyCompilerFlags](https://python-all.ru/3.0/c-api/veryhigh.html#PyCompilerFlags) *\*flags*)**

Аналогично

[`PyRun_SimpleStringFlags`](https://python-all.ru/3.0/c-api/veryhigh.html#PyRun_SimpleStringFlags)

, но исходный код Python читается из

*fp*

, а не из строки в памяти.

*filename*

должно быть именем файла. Если

*closeit*

истинно, файл закрывается до возврата из PyRun\_SimpleFileExFlags.

**\[PyRun\_InteractiveOne\]int `PyRun_InteractiveOne`(FILE *\*fp*, const char *\*filename*)**

Это упрощённый интерфейс к

[`PyRun_InteractiveOneFlags`](https://python-all.ru/3.0/c-api/veryhigh.html#PyRun_InteractiveOneFlags)

(см. ниже), оставляющий

*flags*

равным

*NULL*

.

**\[PyRun\_InteractiveOneFlags\]int `PyRun_InteractiveOneFlags`(FILE *\*fp*, const char *\*filename*, [PyCompilerFlags](https://python-all.ru/3.0/c-api/veryhigh.html#PyCompilerFlags) *\*flags*)**

Читает и выполняет один оператор из файла, связанного с интерактивным устройством, в соответствии с аргументом

*flags*

. Если

*filename*

равно

*NULL*

, вместо него используется

`"???"`

. Пользователю выводятся приглашения

`sys.ps1`

и

`sys.ps2`

. Возвращает

`0`

, если ввод был выполнен успешно,

`-1`

, если произошло исключение, или код ошибки из файла

`errcode.h`

(входящего в состав Python), если была ошибка разбора. (

`errcode.h`

не включается через

`Python.h`

, поэтому его нужно включать отдельно, если необходимо.)

**\[PyRun\_InteractiveLoop\]int `PyRun_InteractiveLoop`(FILE *\*fp*, const char *\*filename*)**

Это упрощённый интерфейс к

[`PyRun_InteractiveLoopFlags`](https://python-all.ru/3.0/c-api/veryhigh.html#PyRun_InteractiveLoopFlags)

(см. ниже), оставляющий

*flags*

равным

*NULL*

.

**\[PyRun\_InteractiveLoopFlags\]int `PyRun_InteractiveLoopFlags`(FILE *\*fp*, const char *\*filename*, [PyCompilerFlags](https://python-all.ru/3.0/c-api/veryhigh.html#PyCompilerFlags) *\*flags*)**

Читает и выполняет операторы из файла, связанного с интерактивным устройством, до достижения EOF. Если

*filename*

равно

*NULL*

, используется

`"???"`

. Пользователю выводятся приглашения

`sys.ps1`

и

`sys.ps2`

. Возвращает

`0`

при EOF.

**\[PyParser\_SimpleParseString\]struct \_node\* `PyParser_SimpleParseString`(const char *\*str*, int *start*)**

Это упрощённый интерфейс к

[`PyParser_SimpleParseStringFlagsFilename`](https://python-all.ru/3.0/c-api/veryhigh.html#PyParser_SimpleParseStringFlagsFilename)

, описанной ниже, с

*filename*

, установленным в

*NULL*

, и

*flags*

, установленным в

`0`

.

**\[PyParser\_SimpleParseStringFlags\]struct \_node\* `PyParser_SimpleParseStringFlags`(const char *\*str*, int *start*, int *flags*)**

Это упрощённый интерфейс к

[`PyParser_SimpleParseStringFlagsFilename`](https://python-all.ru/3.0/c-api/veryhigh.html#PyParser_SimpleParseStringFlagsFilename)

, описанной ниже, с

*filename*

, установленным в

*NULL*

.

**\[PyParser\_SimpleParseStringFlagsFilename\]struct \_node\* `PyParser_SimpleParseStringFlagsFilename`(const char *\*str*, const char *\*filename*, int *start*, int *flags*)**

Анализирует исходный код Python из

*str*

, используя начальный токен

*start*

в соответствии с аргументом

*flags*

. Результат можно использовать для создания объекта кода, который может быть эффективно вычислен. Это полезно, если фрагмент кода должен вычисляться много раз.

**\[PyParser\_SimpleParseFile\]struct \_node\* `PyParser_SimpleParseFile`(FILE *\*fp*, const char *\*filename*, int *start*)**

Это упрощённый интерфейс к

[`PyParser_SimpleParseFileFlags`](https://python-all.ru/3.0/c-api/veryhigh.html#PyParser_SimpleParseFileFlags)

, описанной ниже, с

*flags*

, установленным в

`0`

**\[PyParser\_SimpleParseFileFlags\]struct \_node\* `PyParser_SimpleParseFileFlags`(FILE *\*fp*, const char *\*filename*, int *start*, int *flags*)**

Аналогично

[`PyParser_SimpleParseStringFlagsFilename`](https://python-all.ru/3.0/c-api/veryhigh.html#PyParser_SimpleParseStringFlagsFilename)

, но исходный код Python читается из

*fp*

, а не из строки в памяти.

**\[PyRun\_String\][PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject)\* `PyRun_String`(const char *\*str*, int *start*, [PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*globals*, [PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*locals*)**

*Возвращаемое значение: новая ссылка.*

Это упрощённый интерфейс к [`PyRun_StringFlags`](https://python-all.ru/3.0/c-api/veryhigh.html#PyRun_StringFlags), описанной ниже, с *flags*, установленным в *NULL*.

**\[PyRun\_StringFlags\][PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject)\* `PyRun_StringFlags`(const char *\*str*, int *start*, [PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*globals*, [PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*locals*, [PyCompilerFlags](https://python-all.ru/3.0/c-api/veryhigh.html#PyCompilerFlags) *\*flags*)**

*Возвращаемое значение: новая ссылка.*

Выполняет исходный код Python из *str* в контексте, заданном словарями *globals* и *locals*, с флагами компилятора, указанными в *flags*. Параметр *start* задаёт начальный токен, который следует использовать для разбора исходного кода.

Возвращает результат выполнения кода в виде объекта Python или *NULL*, если возникло исключение.

**\[PyRun\_File\][PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject)\* `PyRun_File`(FILE *\*fp*, const char *\*filename*, int *start*, [PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*globals*, [PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*locals*)**

*Возвращаемое значение: новая ссылка.*

Это упрощённый интерфейс к [`PyRun_FileExFlags`](https://python-all.ru/3.0/c-api/veryhigh.html#PyRun_FileExFlags), описанной ниже, с *closeit*, установленным в `0`, и *flags*, установленным в *NULL*.

**\[PyRun\_FileEx\][PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject)\* `PyRun_FileEx`(FILE *\*fp*, const char *\*filename*, int *start*, [PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*globals*, [PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*locals*, int *closeit*)**

*Возвращаемое значение: новая ссылка.*

Это упрощённый интерфейс к [`PyRun_FileExFlags`](https://python-all.ru/3.0/c-api/veryhigh.html#PyRun_FileExFlags), описанной ниже, с *flags*, установленным в *NULL*.

**\[PyRun\_FileFlags\][PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject)\* `PyRun_FileFlags`(FILE *\*fp*, const char *\*filename*, int *start*, [PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*globals*, [PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*locals*, [PyCompilerFlags](https://python-all.ru/3.0/c-api/veryhigh.html#PyCompilerFlags) *\*flags*)**

*Возвращаемое значение: новая ссылка.*

Это упрощённый интерфейс к [`PyRun_FileExFlags`](https://python-all.ru/3.0/c-api/veryhigh.html#PyRun_FileExFlags), описанной ниже, с *closeit*, установленным в `0`.

**\[PyRun\_FileExFlags\][PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject)\* `PyRun_FileExFlags`(FILE *\*fp*, const char *\*filename*, int *start*, [PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*globals*, [PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*locals*, int *closeit*, [PyCompilerFlags](https://python-all.ru/3.0/c-api/veryhigh.html#PyCompilerFlags) *\*flags*)**

*Возвращаемое значение: новая ссылка.*

Аналогично [`PyRun_StringFlags`](https://python-all.ru/3.0/c-api/veryhigh.html#PyRun_StringFlags), но исходный код Python читается из *fp*, а не из строки в памяти. *filename* должно быть именем файла. Если *closeit* истинно, файл закрывается перед тем, как [`PyRun_FileExFlags`](https://python-all.ru/3.0/c-api/veryhigh.html#PyRun_FileExFlags) вернёт управление.

**\[Py\_CompileString\][PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject)\* `Py_CompileString`(const char *\*str*, const char *\*filename*, int *start*)**

*Возвращаемое значение: новая ссылка.*

Это упрощённый интерфейс к [`Py_CompileStringFlags`](https://python-all.ru/3.0/c-api/veryhigh.html#Py_CompileStringFlags), описанной ниже, с *flags*, установленным в *NULL*.

**\[Py\_CompileStringFlags\][PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject)\* `Py_CompileStringFlags`(const char *\*str*, const char *\*filename*, int *start*, [PyCompilerFlags](https://python-all.ru/3.0/c-api/veryhigh.html#PyCompilerFlags) *\*flags*)**

*Возвращаемое значение: новая ссылка.*

Разбирает и компилирует исходный код Python из *str*, возвращая результирующий объект кода. Стартовый токен задаётся *start*; его можно использовать для ограничения компилируемого кода – он должен быть [`Py_eval_input`](https://python-all.ru/3.0/c-api/veryhigh.html#Py_eval_input), [`Py_file_input`](https://python-all.ru/3.0/c-api/veryhigh.html#Py_file_input) или [`Py_single_input`](https://python-all.ru/3.0/c-api/veryhigh.html#Py_single_input). Имя файла, указанное в *filename*, используется для создания объекта кода и может появляться в трассировках или сообщениях исключений [`SyntaxError`](https://python-all.ru/3.0/library/exceptions.html#exceptions.SyntaxError). Возвращает *NULL*, если код не удаётся разобрать или скомпилировать.

**\[PyEval\_EvalCode\][PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject)\* `PyEval_EvalCode`(PyCodeObject *\*co*, [PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*globals*, [PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*locals*)**

*Возвращаемое значение: новая ссылка.*

Это упрощённый интерфейс к [`PyEval_EvalCodeEx`](https://python-all.ru/3.0/c-api/veryhigh.html#PyEval_EvalCodeEx), принимающий только объект кода и словари глобальных и локальных переменных. Остальные аргументы установлены в *NULL*.

**\[PyEval\_EvalCodeEx\][PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject)\* `PyEval_EvalCodeEx`(PyCodeObject *\*co*, [PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*globals*, [PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*locals*, [PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*\*args*, int *argcount*, [PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*\*kws*, int *kwcount*, [PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*\*defs*, int *defcount*, [PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*closure*)**

Выполняет предварительно скомпилированный объект кода в заданном окружении. Это окружение состоит из словарей глобальных и локальных переменных, массивов аргументов, ключевых слов и значений по умолчанию, а также кортежа замыкания с ячейками.

**\[PyEval\_EvalFrame\][PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject)\* `PyEval_EvalFrame`(PyFrameObject *\*f*)**

Выполняет фрейм исполнения. Это упрощённый интерфейс к PyEval\_EvalFrameEx для обратной совместимости.

**\[PyEval\_EvalFrameEx\][PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject)\* `PyEval_EvalFrameEx`(PyFrameObject *\*f*, int *throwflag*)**

Это основная, неприукрашенная функция интерпретации Python. Она буквально состоит из 2000 строк. Кодовый объект, связанный с фреймом выполнения

*f*

, выполняется: байт-код интерпретируется, а вызовы выполняются по мере необходимости. Дополнительным параметром

*throwflag*

в основном можно пренебречь – если он истинен, то немедленно вызывается исключение; это используется для методов

`throw()`

объектов-генераторов.

**\[PyEval\_MergeCompilerFlags\]int `PyEval_MergeCompilerFlags`([PyCompilerFlags](https://python-all.ru/3.0/c-api/veryhigh.html#PyCompilerFlags) *\*cf*)**

Эта функция изменяет флаги текущего фрейма вычислений и возвращает true в случае успеха, false в случае ошибки.

**\[Py\_eval\_input\]int `Py_eval_input`**

Начальный символ грамматики Python для изолированных выражений; используется с [`Py_CompileString`](https://python-all.ru/3.0/c-api/veryhigh.html#Py_CompileString).

**\[Py\_file\_input\]int `Py_file_input`**

Начальный символ грамматики Python для последовательностей инструкций, читаемых из файла или другого источника; используется с [`Py_CompileString`](https://python-all.ru/3.0/c-api/veryhigh.html#Py_CompileString). Это символ, который следует использовать при компиляции произвольно длинного исходного кода Python.

**\[Py\_single\_input\]int `Py_single_input`**

Начальный символ из грамматики Python для одного оператора; используется с [`Py_CompileString`](https://python-all.ru/3.0/c-api/veryhigh.html#Py_CompileString). Этот символ используется в цикле интерактивного интерпретатора.

**\[PyCompilerFlags\]struct `PyCompilerFlags`**

Это структура, используемая для хранения флагов компилятора. Когда код только компилируется, она передаётся как `int flags`, а когда код выполняется – как `PyCompilerFlags *flags`. В последнем случае `from __future__ import` может изменять *flags*.

Когда `PyCompilerFlags *flags` равен *NULL*, `cf_flags` считается равным `0`, и любые изменения, внесённые `from __future__ import`, отбрасываются.

```c
struct PyCompilerFlags {
    int cf_flags;
}
```

**\[CO\_FUTURE\_DIVISION\]int `CO_FUTURE_DIVISION`**

Этот бит можно установить в

*flags*

, чтобы оператор деления

`/`

интерпретировался как «истинное деление» в соответствии с

[**PEP 238**](https://python-all.ru/3.0/c-api/veryhigh.html)

.
