Customizando o prompt do iPython

Oi pessoal,

Esse post vai ser bem diferente do que normalmente eu publico por aqui, mas nos últimos tempos, além de me dedicar à pesquisa de doutorado, estou, nas poucas horas vagas que tenho, estudando Python, uma linguagem de programação extremamente interessante e eficaz. E isso para dizer o mínimo. A linguagem é extremamente poderosa para os mais diversos trabalhos, mas não é dela que vou falar aqui hoje, isso vou deixar para um outro momento.

Como uma linguagem interpretada, um dos super-poderes do Python, temos além do interpretador padrão, que vem quando vc instala a linguagem em sua máquina (para quem usa Linux ela já vem instalada) existem outros, digamos, sabores do interpretador da linguagem, cada um com seus prós e contras, mas vou me dedicar especificamente a um que venho usando nos meus estudos que é muito bacana e que possibilita uma customização interessante. Falo do iPython.

Estou escrevendo esse texto, pois para quem está iniciando com o iPython, que é o meu caso, customizar não é algo assim tão trivial. Nesse caso eu tive a excelente ajuda do Henrique Bastos, cara super bacana e que tem me auxiliado pra caramba nos meus estudos de Pythton.

Bom, sem delongas vamos ao que interessa. Primeiramente, vou pressupor que és um usuário de sistemas UNIX como Linux (em qualquer de suas distribuições) ou Mac-OS, caso você seja usuário Windows considera a migração, ainda mais depois desse ataque mundial que a rede sofreu, não tem porque você ainda estar atrelado a esse sistema! Eu uso e recomendo o Ubuntu Gnome 16.04.

Para instalação do Python é muito tranquilo, basicamente vc precisa abrir seu terminal shell e digitar (dúvidas ou mais detalhes acesse a página do Python):

sudo apt install python3.6.1

Aproveite para instalar o gerenciador de pacotes do Python, o Pip, simplis assim:

sudo apt install pip

Feito isso agora vamos instalar o iPython. Aqui vem algo interessante, na verdade o iPython faz parte do Jupyter Notebook, que é um mode de termos no nosso browser (navegador) uma forma interativa de texto e código Python executável, para nossos testes e aprendizado. É muito interessante, então vamos ver como instalá-lo? Então, bem simples lembra que além do Python nós também instalamos o Pip, então, abra o terminal (caso ainda não tenha feito) e digite (dúvias ou mais detalhes acesse a página o Jupyter/iPython):

pip install jupyter

Pronto, agora estamos com tudo instalado, de forma que se você executar no terminal o comando ipython, você terá o seguinte:

Pois bem, uma coisa que eu particularmente não gostei foi do prompt de comando do iPython, na imagem você pode ver que temos um In [1]: seguindo do comando import (esse é um comando do Python) num exemplo do autor da imagem. Aqui, nessa imagem, não aparece o prompt de resposta, mas se tivesse seria Out [1]: e a saída produzida pelo comando. O número entre colchetes é o indicativo de linha, cada vez que você executa um comando, ele o faz numa determinada linha, a saída vai ter o número da linha de entrada do comando, apesar de estar logo abaixo dessa. Eu acho que isso acaba nos confundindo um pouco, até porque no iPython fazemos testes de pequenos códigos, não escrevemos programas/scripts inteiros nele. É uma forma rápida de averiguar se um trecho de código que você escreveu está, realmente, fazendo o que você quer.

Bom, assim eu enchi bem a paciência do Henrique e consegui, com a ajuda dele algumas coisas interessantes, vamos a elas.

Primeiro, executo o comando:

ipython profile create

Isso irá criar no diretório do iPyton, que no Ubuntu está em home/<nome_do_usuario>/.ipython (pra quem não é do mundo Linux ou Mac o ponto antes do nome do arquivo ou diretório é para torná-lo oculto) um novo diretório chamado profile_default, nesse diretório você terá, dentre outras coisas, dois arquivos *.py (extensão dos arquivos do Python), um é o ipython_config.py e o outro é ipython_kernel_config.py. O que nos interessa aqui é o arquivo ipython_config.py. Mas, antes de mexer com ele, para ter o prompt como eu configurei (cópia escarrada do que o Henrique fez!!), temos que ter um arquivo chamado wttdprompt.py no diretório ~/.ipython, com o seguinte conteúdo:

"""
Configure iPython prompt to:
>>> type("A")
--> str
>>> print(42)
42
"""
from IPython.terminal.prompts import Prompts, Token

class CustomPrompts(Prompts):
 
    def in_prompt_tokens(self, cli=None):
        return [(Token.Prompt, '>>> '), ]
    def out_prompt_tokens(self, cli=None):
        return [(Token.Prompt, '--> '), ]
    def continuation_prompt_tokens(self, cli=None, width=None):
        return [(Token.Prompt, '... '), ]

Preste muita atenção na identação desse código Python, pois no Python identação é fundamental, qualquer mudança na identação acarretará em erro.

Com esse código, mais as alterações que faremos a seguinte, nosso prompt ficará com a seguinte aparência:

Vejam que não temos mais o In [1], mas os caracteres ‘>>>’ e quando temos uma resposta, temos duas formas de saída, ‘—>’ ou sem nada. Podem ver que o que temos na imagem coincide exatamente com o início do código que colocamos no arquivo wttdpromt.py. Bom, agora vamos alterar o ipython_config.py. Esse arquivo é um arquivo já com vários comandos Python, mas todos eles estão comentados, ou seja, são ignorados quando o mesmo é executado. O que vamos fazer é encontrar linhas desse código, tirar a marcação de comentário (feita pelo caracter #) e alterar algumas informações. Vamos lá abra o arquivo ipython_config.py no seu editor preferido e localize a seguinte linha de código:

#c.TerminalIPythonApp.display_banner = True

Ao localizá-la, retire o caracter # e mude de True para False. Agora locaize as seguintes linhas de código:

## Set the color scheme (NoColor, Neutral, Linux, or LightBG).
#c.InteractiveShell.colors = 'Neutral'

Veja, a linha marcada com dois # informa o que a linha logo abaixo faz. Temos que desmarcar a linha de baixo removendo o caracter #. Em seguida mudar o ‘Neutral’ para uma das outras opções que estão mencionadas acima, o Henrique mudou para LightBG, mas no meu caso ficou melhor com Linux. Aí vai do teu gosto.

Bom, agora temos que localizar a seguinte linha de código:

#c.TerminalInteractiveShell.confirm_exit = True

Bom, aqui temos que, novamente, remover o caracter # e mudar de True para False. Vamos localizar a próxima linha a ser alterada, que é a seguinte:

#c.TerminalInteractiveShell.highlight_matching_brackets = True

Essa a única alteração é remover o caracter #, deixando-a com o valor True.

Vocês podem ver que o código já está pronto, inclusive com comentário (em inglês é claro) que indicam o que cada linha de código faz na configuração do iPython. Bom, continuemos para nossa próxima linha de código:

#c.TerminalInteractiveShell.prompts_class = 'IPython.terminal.prompts.Prompts'

Nessa linha, além de removermos o caracter #, vamos substituir todo o texto ‘IPython.terminal.prompts.Prompts’ pelo texto: ‘wttdprompt.CustomPrompts’, esse é o nome da Classe que escrevemos no arquivo wttdprompt.py e que faz a configuração da nova aparência do prompt de comando. Óbvio que o nome foi escolhido pelo autor da alteração, nosso amigo Henrique Bastos, mas pode ser um nome que você queira, desde que: 1. você saiba o que está fazendo, e 2. faça as alterações em todos os lugares para que as referências não se quebrem.

A próxima linha de código a ser localizada em nosso arquivo é:

#c.TerminalInteractiveShell.term_title = True

Nessa linha, basta remover o caracter # e manter seu valor True.

E assim, finalizamos a customização do nosso prompt do iPython. Espero que tenham gostado. Até uma próxima!

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *