company_banner

Ptpython: улучшенный REPL для Python

Автор оригинала: Khuyen Tran
  • Перевод
Возникало ли у вас когда-нибудь желание быстро испытать какую-нибудь свежую идею, прибегнув к интерфейсу командной строки Python, к REPL? Вероятно, если речь идёт об эксперименте буквально с несколькими строками кода, вам просто не захочется создавать для этого новый «блокнот» Jupyter.

Но в подобной ситуации, возможно, вас не особенно порадует и перспектива использования классической консоли Python, так как она, в отличие от Jupyter Notebook, не поддерживает автодополнение ввода и не умеет работать с документационными строками. В REPL, кроме того, нельзя, после нажатия на Enter, исправлять ошибки в коде.

Что если можно было бы превратить довольно-таки скучную командную строку Python в многофункциональный инструмент, вроде того, запись работы с которым показана ниже?


Продвинутая командная строка Python

Собственно, именно на тех, у кого возникает подобное желание, и ориентирован проект ptpython.

Что такое ptpython?


Ptpython можно назвать улучшенным интерфейсом командной строки Python. Установить его можно так:

pip install ptpython

А для того чтобы его запустить — достаточно воспользоваться следующей командой:

ptpython

Возможности по вводу данных


▍Проверка вводимых данных


Если, работая в классической командной строке Python, допустить ошибку при вводе команды, то, после нажатия на Enter, нельзя вернуться к неправильному коду и его исправить.


Ошибка, допущенная в обычной командной строке Python

Но ptpython позволяет проверить то, что введено с клавиатуры, ещё до нажатия на Enter. На следующем анимированном изображении показано, что пропущенная закрывающая скобка вызывает появление сообщения об ошибке. Эту ошибку можно тут же исправить.


Исправление ошибки при работе в ptpython 

▍Автодополнение ввода, основанное на исторических данных


Если вы когда-нибудь подумывали о том, что при работе с командной строкой Python не помешали бы возможности по автодополнению ввода, основанному на исторических данных, то знайте, что ptpython это поддерживает.


Автодополнение ввода, основанное на исторических данных

Но эта возможность ptpython, по умолчанию, не включена. Правда, для того чтобы включить её, достаточно, воспользовавшись клавишей F2, вызвать меню, в котором, пользуясь клавишами-стрелками, надо найти опцию Auto suggestion и перевести её в состояние on. Для закрытия меню надо нажать на Enter.


Включение автодополнения ввода

После включения опции Auto suggestion у вас должно заработать автодополнение ввода, основанное на истории. Для того чтобы воспользоваться тем, что предлагает ptpython, достаточно нажать клавишу-стрелку Вправо.

▍Использование подсказок при вводе кода


Если при работе с объектом ввести точку — будет выведен список его свойств и методов.


Подсказки, выводимые после ввода точки

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

▍Вставка данных из истории команд


Посмотреть историю команд можно, нажав клавишу F3. Для того чтобы выделить код, который надо скопировать в рабочую область из панели истории, нужно перейти на соответствующую строку клавишами-стрелками и нажать на клавишу Пробел.

После того, как выбор нужного участка кода завершён, достаточно нажать на Enter и соответствующий код будет вставлен в рабочую область.


Копирование кода из панели истории

Обратите внимание на то, что код в рабочую область будет вставлен в порядке его выполнения.

▍Режим вставки


Возникало ли у вас когда-нибудь желание отредактировать код, вставленный в командную строку Python? В обычном Python REPL сделать этого нельзя.


Работа в обычной командной строке Python

А ptpython позволяет редактировать вставленный код, доводя его до нужного состояния.


Редактирование вставленного кода в ptpython

Для того чтобы включить режим вставки — достаточно нажать на клавишу F6. Когда этот режим активирован — код, при нажатии на Enter, выполняться не будет. А после того, как код будет готов к выполнению — нужно снова нажать F6 для выключения режима вставки, а потом дважды нажать на Enter.

Возможности по выводу данных


▍Просмотр сигнатур функций и документационных строк


Ptpython позволяет просматривать сведения о параметрах функций и конструкторов.


Просмотр сведений о конструкторе DataFrame

Ещё можно смотреть документационные строки классов и функций. Для включения этой возможности нужно открыть меню (F2), а потом включить опцию Show docstring.


Включение вывода документационных строк

Теперь можно просматривать документацию по используемым программным конструкциям.


Вывод документации

▍Выделение парных скобок


Для того чтобы повысить удобство работы со сложными конструкциями, в которых используются скобки, ptpython умеет выделять парные скобки.


Выделение парных скобок

▍Добавление пустой строки после введённых или выведенных данных


Если нужно улучшить читабельность кода — можно сделать так, чтобы после выводимых или вводимых данных автоматически добавлялись бы пустые строки.


Улучшение читабельности кода за счёт пустых строк

Для того чтобы включить эту возможность — нужно, вызвав меню клавишей F2, включить опции Blank line after input и Blank line after output.


Включение опций Blank line after input и Blank line after output

Выделение синтаксических конструкций


Ptpython, кроме прочего, поддерживает подсветку синтаксиса.


Подсветка синтаксиса

Для переключения цветовых тем можно воспользоваться клавишей-стрелкой Вправо, нажимая её до тех пор, пока не будет выбрана подходящая тема.

В системе имеется 39 тем. Если, например, вам хочется выбрать такую же цветовую схему, которая используется в Sublime Text — знайте, что она имеет код monokai. Этот код нужно ввести в опции меню Code, которую можно найти в разделе Colors.


Настройка темы в меню

Магические команды IPython


Ptpython поддерживает магические команды IPython. Для того чтобы получить доступ к возможностям IPython, нужно воспользоваться командой ptipython.


Возможности IPython


Возможности IPython

Настройка ptpython


Те изменения, которые вносят в настройки ptpython во время работы, исчезают после окончания сеанса работы с программой.

Настройки, которые используются в каждом сеансе, должны быть описаны в файле $XDG_CONFIG_HOME/ptpython/config.py. В Linux путь к нему выглядит как ~/.config/ptpython/config.py.

Вот файл, который содержит все те полезные настройки программы, о которых мы говорили выше.

Итоги


В этом материале мы рассмотрели лишь мои любимые возможности ptpython. А их, на самом деле, гораздо больше. Если ptpython вам понравится, вы, наверняка, найдёте в нём что-то такое, что пригодится именно вам.

Планируете ли вы пользоваться ptpython?


RUVDS.com
VDS/VPS-хостинг. Скидка 10% по коду HABR10

Комментарии 9

    0
    Жыыыръ! )
    Только сёрф по истории немного неинтуитивен, как-то уже на автомате происходит, когда набираешь начало инструкции и жмёшь вверх, то ждёшь перебор вариантов из истории, а так — опеределённо win.
      +3

      Простите, но почему в хабе Perl?

        +7
        Кто-то не отличил REPL от PERL
        +1

        Не из мира python, но почему нельзя все это написать в файле (с использованием нормальной ide) и запускать файл в интерпретаторе(в той же ide) ?

          +1
          это очень часто бывает удобнее. Пример — вы запустили REPL, сделали какой-то RPC call, вам вернули огромный JSON. Можно не выходя из консоли — поисследовать структуру этого json, вычистить отттуда невалидные данные, трансформировать как удобно, потом пользуясь ими сделать еще N rpc вызовов. Посмотреть что там вернули, покрутить данные, привести к тому виду что нужно. А потом уже можно сдампить весь код что был написан в REPL в файл, открыть его уже в IDE и на его основе писать уже итоговую программу. Ну или просто даже вам программа не нужна, а нужны полученные данные один раз.
            +1

            Один из примеров: допустим, у вас приложение на каком-либо веб-фреймворке, таком как Django. В приложении определены модели ORM. Появляется задача, что на тестовом/продовом сервере какой-то запрос возвращает не те данные, или надо посчитать какую-то статистику по базе, которая понадобится ровно один раз (например, надо узнать, сколько пользователей зарегистрировалось на сайте в определенную дату).


            Можно зайти в контейнер, запустить REPL, и быстро поэкспериментировать с различными видами запросов. Автодополнение и история в этих случаях очень помогают (я в своих конфигурациях docker-compose специально делаю ~/.ipython отдельным томом docker, чтобы история не терялась между деплоями).


            Написать скрипт в IDE, затем скопировать/пробросить его в контейнер, затем, если сразу не получилось, возвращаться к редактору — это множество лишних действий, медленно, неудобно, неэргономично.


            Собственно говоря, поэтому REPL всегда считался огромным преимуществом интерпретируемых языков над компилируемыми.


            Но лично я в данной статье не увидел каких-либо преимуществ перед ipython, который использую везде: и как продвинутый калькулятор, и как REPL во всех своих проектах (Django автоматически использует ipython, если он установлен).

              0

              Можно, но сложно

              0

              Использую bpython. У него плюшек поменьше, но хватает. Поддерживает автодополнение, подсветку синтаксиса и удаление вывода последней команды через ctrl-r (напр., если опечатался и консоль заспамилась ошибками).


              Часто играюсь, тестю и пишу простенькие прототипы именно в REPL-е. В bpython очень нехватает возможности удобно отредактировать свеженаписанную и выполненную функцию. Типа нажал стрелку вверх и появилось что-то вроде мини-текстового редактора со всем кодом функции. Перешёл к нужной строке, изменил, сохранил всё и выполнил повторно. В ptpython случайно нет такой возможности?

                +3
                Типа нажал стрелку вверх и появилось что-то вроде мини-текстового редактора со всем кодом функции

                Попробуйте ipython.
                ptpython тоже это поддерживает, кстати

              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

              Самое читаемое