В чем разница между ipython TerminalInteractiveShell и InteractiveShell?

#python #configuration #ipython

#python #конфигурация #ipython

Вопрос:

Документация ipython содержит длинный список настраиваемых параметров. Некоторые для TerminalInteractiveShell , некоторые для InteractiveShell . Некоторые параметры появляются в одном в документации, а в другом, когда я генерирую ipython_config.py из командной строки. Есть ли какая-то рифма или причина для этого? В чем причина наличия обоих?

Ответ №1:

Просматривая список модулей в документации, мы имеем

IPython.core.application : Приложение для IPython.

IPython.core.interactiveshell : Основной класс IPython.

IPython.terminal.ipapp : Объект приложения для программы командной строки ipython .

IPython.terminal.interactiveshell : Интерфейс терминала IPython с использованием prompt_toolkit

InteractiveShell это базовый класс оболочки IPython, который может быть подклассом для разных целей. TerminalInteractiveShell является одним из таких специфических подклассов. Он наследует InteractiveShell и является конкретной оболочкой, которая запускается, когда мы вводим «ipython» в командную строку.

Одним из примеров опции конфигурации, которая доступна для TerminalInteractiveShell , но не для базовой InteractiveShell , является confirm_exit . Это кажется разумным, поскольку вопрос «Вы действительно хотите выйти» действительно актуален только тогда, когда внутри оболочки есть человек, нажимающий Control-D.

Практически, если вы просто пытаетесь настроить свою командную строку ipython shell, изменение InteractiveShell или TerminalInteractiveShell версии параметра будет работать, потому TerminalInteractiveShell что наследует параметры базового класса. Однако безопаснее редактировать только более конкретные TerminalInteractiveShell , поскольку базовый класс все еще используется в нетерминальных ситуациях, и изменение его настроек может привести к неожиданному поведению там. Например:

Надеюсь, это было полезно!