# 16. Приложение

## 16.1. Интерактивный режим

Существует два варианта интерактивного REPL. Классический базовый интерпретатор поддерживается на всех платформах и имеет минимальные возможности редактирования строк.

Начиная с Python 3.13 по умолчанию используется новая интерактивная оболочка. Она поддерживает цветовое оформление, многострочное редактирование, просмотр истории и режим вставки. Чтобы отключить цвета, см. Controlling color. Функциональные клавиши предоставляют дополнительные возможности. Клавиша `F1`включает` `интерактивный` `просмотр` `справки` `:mod:`pydoc`. Клавиша `F2` позволяет просматривать историю команд без вывода и без приглашений >>> и …. Клавиша `F3` включает «режим вставки», упрощающий вставку больших блоков кода. Для выхода из него и возврата к обычному режиму снова нажмите `F3`.

При использовании новой интерактивной оболочки выйти из неё можно, набрав `exit` или `quit`. Добавлять скобки для вызова этих команд не обязательно.

Если новая интерактивная оболочка нежелательна, её можно отключить с помощью переменной окружения `PYTHON_BASIC_REPL`.

### 16.1.1. Обработка ошибок

Когда возникает ошибка, интерпретатор выводит сообщение об ошибке и трассировку стека. В интерактивном режиме он затем возвращается к основному приглашению. Если ввод осуществляется из файла, интерпретатор завершает работу с ненулевым кодом возврата после вывода трассировки стека. (Исключения, обрабатываемые блоком `except` в инструкции `try`, не являются ошибками в этом контексте.) Некоторые ошибки являются фатальными и приводят к завершению работы с ненулевым кодом возврата. Это относится к внутренним несоответствиям и некоторым случаям исчерпания памяти. Все сообщения об ошибках выводятся в стандартный поток ошибок, а нормальный вывод команд — в стандартный поток вывода.

Ввод символа прерывания (обычно `Control`-`C` или `Delete`) в основном или вторичном приглашении отменяет ввод и возвращает к основному приглашению. [1] Ввод прерывания во время выполнения команды вызывает исключение `KeyboardInterrupt`, которое может быть обработано инструкцией `try`.

### 16.1.2. Исполняемые Python скрипты

В BSD-подобных Unix системах скрипты Python можно сделать исполняемыми, как скрипты командной оболочки, добавив строку

    #!/usr/bin/env python3

(предполагается, что интерпретатор находится в `PATH`) в начало скрипта и дав файлу права на выполнение. Символы `#!` должны быть первыми двумя в файле. На некоторых платформах первая строка должна заканчиваться символом новой строки в стиле Unix (`'\n'`), а не в стиле Windows (`'\r\n'`). Обратите внимание, что символ хэша или решетки, `'#'`, используется для начала комментария в Python.

Скрипту можно назначить права на исполнение или режим исполнения с помощью команды chmod.

    $ chmod +x myscript.py

В системах Windows нет понятия «режима исполнения». Установщик Python автоматически ассоциирует файлы с расширением `.py` с `python.exe`, так что двойной щелчок по файлу Python запустит его как скрипт. Расширение также может быть `.pyw`, в этом случае окно консоли, которое обычно появляется, будет скрыто.

### 16.1.3. Файл интерактивного запуска

При работе с Python в интерактивном режиме часто бывает удобно, чтобы некоторые стандартные команды выполнялись при каждом запуске интерпретатора. Для этого можно задать переменную окружения `PYTHONSTARTUP`, указав в ней путь к файлу с вашими стартовыми командами. Это похоже на использование `.profile` в оболочках Unix.

Этот файл исполняется только в интерактивных сессиях, а не при исполнении других файлов или при использовании `/dev/tty` в качестве источника команд (который в других случаях работает как интерактивная сессия). Файл исполняется в том же пространстве имён, что и интерактивные команды, таким образом любые объекты, определённые или импортированные в нём, доступны напрямую в интерактивной сессии. Вы также можете поменять вид основного `sys.ps1` и вторичного `sys.ps2` приглашений в этом файле.

Если вы хотите прочитать дополнительный стартовый файл из текущей директории, это можно запрограммировать в глобальном стартовом файле с помощью кода `if os.path.isfile('.pythonrc.py'): exec(open('.pythonrc.py').read())`. Если вы хотите использовать стартовый файл напрямую в вашей программе, то вы можете сделать это явно таким образом:

    import os
    filename = os.environ.get('PYTHONSTARTUP')
    if filename and os.path.isfile(filename):
        with open(filename) as fobj:
            startup_file = fobj.read()
        exec(startup_file)

### 16.1.4. Модули настройки

Python предоставляет два механизма, позволяющих настроить его: sitecustomize`и :index:`usercustomize. Чтобы увидеть, как это работает, сначала нужно узнать расположение пользовательского каталога site-package. Запустите Python и выполните код:

    >>> import site
    >>> site.getusersitepackages()
    '/home/user/.local/lib/python3.x/site-packages'

Теперь вы можете создать в этом каталоге файл `usercustomize.py` и добавить в него любой желаемый код. Он будет выполняться при каждом запуске Python, если только интерпретатор не запущен с опцией `-s` для отключения автоматического импорта.

Аналогично работает и sitecustomize, хотя обычно создаётся администратором компьютера в глобальном каталоге site-packages и импортируется перед usercustomize. Дополнительную информацию смотрите в документации модуля `site`.

Примечания

[1]

Проблема с пакетом GNU Readline может этому воспрепятствовать.