#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
, поскольку базовый класс все еще используется в нетерминальных ситуациях, и изменение его настроек может привести к неожиданному поведению там. Например:
-
В этом руководстве Jupyter Notebook используется
InteractiveShell
для преобразования ячейки кода notebook в исполняемый Python -
Этот тестовый класс в исходном коде ipython создает оболочку (наследующую от plain
InteractiveShell
) для каждого теста.
Надеюсь, это было полезно!