Alternativas ao shell Python padrão

O shell padrão disponível quando instalamos Python em um sistema é um tanto quanto básico, não oferecendo recursos úteis ao desenvolvedor como completação de palavras, histórico de comandos, dentre outros recursos disponíveis através de bibliotecas como a readline. Porém, existem algumas formas de obtermos tais recursos para nosso shell, as quais serão listadas neste post. Segue uma lista das alternativas:

  1. Configurar o shell Python padrão para que, quando iniciado, carregue algumas funcionalidades da libreadline. Essa alternativa já foi coberta em um post anterior;
  2. Dreampie, um shell gráfico alternativo cheio de funcionalidades úteis, já apresentado em um post anterior;
  3. iPythonhttp://ipython.org
  4. bPythonhttp://bpython-interpreter.org
  5. Reinteracthttp://fishsoup.net/software/reinteract

Em breve, postarei textos descrevendo o iPython, o bPython e o Reinteract. Desde já, sugiro aos interessados na linguagem Python que instalem esses programas, pois possuem vários benefícios ao desenvolvedor.

Pydev = Python + Eclipse

Pydev é um plugin para a IDE Eclipse que permite criação de projetos Python usando esta IDE. Além do tradicional syntax highlighting, o Pydev oferece completação de código, operações de refatoração, verificação de erros e indicação destes no código, execução e depuração de código Python, autoimport de módulos, dentre outros recursos interessantes. Para usar o Pydev, é necessário ter o Eclipse instalado (é óbvio, né?). Para isso, vá até a página de downloads do Eclipse ou instale este via apt (sistemas Debian based):

sudo apt-get install eclipse

Após isso, a instalação do Pydev se dá utilizando a ferramenta de instalação de software do Eclipse. Os passos para instalação são os seguintes:

  1. Abra o Eclipse e vá ao menu “Help“, opção “Install new software”;
     

    Image

    Figura 1. Eclipse

  2. Adicione a URL “http://pydev.org/updates” e selecione o pacote Pydev, conforme mostra a Figura 2;

    Image

    Figura 2. Adicionando a URL do Pydev ao Eclipse

  3. Clique em Next até finalizar a instalação;
  4. Reinicie o Eclipse;
  5. Agora é necessário informar ao Pydev onde está nosso interpretador Python;
  6. Vá ao menu Window -> Preferences (Figura 3);

    Image

    Figura 3. Selecionando Interpretador

  7. Vá na opção Pydev->Intepreter – Python e clique em “New“;

    Image

    Figura 4. Selecionando o Interpretador

  8. No diálogo que abrir, preencha com os dados do seu interpretador e confirme;
  9. Após isso, aplique as alterações (botão Apply na janela mostrada na Figura 3);
  10. Pronto. O Pydev está configurado em seu Eclipse.

Agora você pode criar seu projeto Python. Vá em File -> New -> Other -> Pydev -> Pydev Project. Pronto, seu projeto está criado. Agora basta criar os arquivos .py dentro da pasta src presente no projeto.

Executar código Python diretamente no Gedit

Quem está acostumado a utilizar IDEs ou mesmo editores de texto com algum foco em programação, já deve estar familiarizado com os úteis atalhos para compilação/execução do arquivo/projeto atual. Eles agilizam bastante, pois com um pressionar de teclas é possível compilar/executar o código recém escrito.

Seguindo o post anterior, no qual escrevi sobre o uso do gedit como ambiente de desenvolvimento Python, agora vou apresentar uma forma de habilitar a execução do script atual em um terminal através de um atalho do teclado. Em primeiro lugar, é necessário habilitar o plugin “Ferramentas Externas” (Editar -> Preferências -> Plugins). Feito isso, vá até Ferramentas -> Gerenciar Ferramentas Externas e crie uma nova ferramenta como a apresentada na Figura 1.

Gerenciador de Ferramentas Externas

Figura 1. Gerenciador de Ferramentas Externas

A variável $GEDIT_CURRENT_DOCUMENT_PATH contém uma string com o caminho completo do arquivo no sistema de arquivos. Assim, solicitamos que seja aberto um novo terminal e dentro dele seja executado o arquivo atual. Para saber mais sobre as variáveis, acesse: http://library.gnome.org/users/gedit/unstable/gedit-external-tools-plugin.html.en#gedit-external-tools-plugin-variables

Feito isso, basta agora editar um arquivo .py e pressionar as teclas de atalho selecionadas (no meu caso Ctrl + Alt + r). Assim, uma janela do gnome-terminal será aberta com a execução do código-fonte atual na tela.

É isso. Essa é uma das formas de se fazer isso. Existe também o plugin Run in Python, porém este não possibilita a entrada de dados pelo teclado na tela onde o programa é executado.

Gedit como ambiente de desenvolvimento Python

O Gedit é o editor de textos padrão do GNOME. Até aí nenhuma novidade, certo? O que nem todo mundo sabe é que ele possui vários recursos que o elevam da categoria de um simples editor de textos para um ambiente de desenvolvimento bem interessante. Por padrão, o Gedit nada mais é que um simples editor de textos gráfico. Além de colorir as palavras de acordo com a sintaxe da linguagem, ele não possui outro recurso muito atrativo para desenvolvedores. Veja a Figura 1.

Image

Figura 1. Gedit sem plugins

É aí que entra a configuração das preferências do Gedit (Editar->Preferências). Dentro das Preferências, há uma aba chamada plugins, onde podemos instalar/habilitar novos plugins para o Gedit, que adicionam funcionalidades ao editor. A seguir, vou listar alguns plugins que habilitei e que tornaram o Gedit um editor mais propício ao desenvolvimento de programas Python:

  1. Bracket Completion (completação de colchetes/parênteses/chaves): faz com que o editor insira automaticamente o colchete de fechamento quando abrimos um colchete;
  2. Code Comment (comentário de código): comenta/descomenta trechos de código selecionados, através de um atalho no teclado;
  3. Embedded Terminal (terminal embutido): adiciona à parte inferior da tela um shell linux para execução de comandos. Destacado na Figura 2;
  4. File Browser Pane (painel de navegação de arquivos): mostra na lateral da tela um painel para navegar nos diretórios do sistema de arquivos, possibilitando a abertura de arquivos através deste. Destacado na Figura 2;
  5. Python Console: adiciona um shell Python à parte inferior da tela. Excelente para realização de testes rápidos. Destacado na Figura 2;
  6. Run in Python (Execute em Python): possibilita que executemos o script Python utilizando um atalho (Ctrl+F5). E o resultado da execução é mostrado na parte inferior. Download pode ser feito aqui;
  7. Snippets: completa código baseado em templates. Por exemplo, ao digitar a palavra class e pressionar <TAB>, o plugin já insere na tela um molde de código para implementação da classe;
Image

Figura 2. Gedit com plugins habilitados

Grande parte dos plugins listados acima estão disponíveis a partir da instalação do pacote gedit-plugins:

sudo apt-get install gedit-plugins

Para instalar plugins de terceiros, você deve baixá-los e extraí-los no diretório: ~/.gnome2/gedit/plugins

Além dos plugins, outras configurações são bastante úteis: mostrar numeração de linhas (nas preferências do gedit), substituir TABs por espaços, dentre outras, que vão da preferência do usuário.

Dreampie, o shell python que você sempre sonhou!

Para quem sente dificuldades em utilizar o shell padrão fornecido com o Python, seja por achá-lo simples demais ou por sentir falta de recursos mais comuns em IDEs mais completas, existe uma alternativa ao shell tradicional que é muito interessante e auxilia bastante na tarefa do desenvolvimento, sem perder as vantagens de um shell: um local para teste rápido de trechos de código Python. Estou falando do Dreampie, cujo slogan é: “O shell python que você sempre sonhou“. Abaixo, segue uma lista de recursos que julgo atraentes tanto para novatos quanto para programadores experientes na linguagem:

  • Completação de nomes de funções com menu visual
  • Apresentação de breve documentação da função, mostrando quais e quantas entradas tal função recebe, bem como seu valor de retorno
  • Possibilita a digitação de uma função completa (multi-linhas), para interpretação dela como um todo, após finalizada
  • Armazenamento e carregamento do histórico dos comandos digitados em outra sessão

Para instalá-lo em seu sistema Ubuntu 10.10, execute os seguintes comando em um terminal:

sudo apt-get install dreampie

Para sistemas operacionais Windows, Mac OS ou versões anteriores do Ubuntu, o Dreampie também pode ser baixado diretamente da página do projeto: http://dreampie.sourceforge.net/download.html

Abaixo, vemos uma figura ilustrando a tela do dreampie:

Captura de tela do Dreampie

Figura 1. Dreampie e opções de completação

A Figura 2 mostra uma das características mais interessantes do dreampie, que é o desenvolvimento de funções/classes inteiras para posterior interpretação pelo Python.

Image

Figura 2. Uma função no dreampie

É isso, instale o dreampie e tire suas próprias conclusões.

Comandos de ajuda no shell Python

Quando não temos disponível a completação por tab no shell Python, podemos utilizar como alternativa o dir, um comando builtin do Python. Quando invocamos o comando dir, passando como argumento a tal comando um objeto, este irá retornar uma lista de strings contendo os nomes das funções e dos atributos disponíveis para tal tipo de objeto. Por exemplo, a Figura 1 mostra o resultado da execução da função dir sobre uma variável do tipo string, o que resulta em uma lista com todos os atributos/funções que variáveis de tal tipo possuem.

Comando dir do Python

Figura 1. O comando dir sobre um objeto string

Beleza, mas e o que fazer com esse monte de nomes se não sabemos exatamente o que as funções disponíveis fazem ou como elas funcionam? Para descobrir, basta usar o comando help, passando como argumento o nome da função da qual se deseja descobrir o funcionamento. No exemplo da Figura 2, foi digitado o comando:

>>> help(string.split)
Ajuda do comando split

Figura 2. A ajuda sobre o comando split

Para fechar o texto de ajuda, basta pressionar a tecla q (de quit), que o controle volta ao shell Python. Em um próximo post, veremos como adicionar documentação às nossas próprias funções.

Histórico de comandos no shell Python

Dando sequência ao post anterior, vamos a algumas modificações no arquivo de configurações .pythonrc para que possamos habilitar, além da completação por tab, também a gravação e recuperação do histórico de comandos digitados em sessões anteriores. Tal recurso permite que, ao abrirmos uma nova sessão de um shell Python, possamos recuperar a lista de comandos executados nas sessões anteriores, através da tecla up arrow (seta para cima).

import os
import atexit
import readline
import rlcompleter
history = os.path.expanduser('~/.python_history')
readline.read_history_file(history)
readline.parse_and_bind('tab: complete')
atexit.register(readline.write_history_file, history)

Modifique seu arquivo .pythonrc para que fique como o trecho de código acima¹. As linhas em vermelho são as linhas que foram inseridas no arquivo de configuração apresentado no post anterior. Dessa forma, seu histórico de comandos digitados no shell python será gravado no arquivo /home/nome_usuário/.python_history, sempre que você sair do shell Python.

Nota: Só pra lembrar que nesse ponto você deve ter configurado a variável de ambiente PYTHONSTARTUP para carregar o arquivo de configuração, adicionando no seu ~/.bashrc a linha:
export PYTHONSTARTUP=~/.pythonrc

Até aí, tudo OK. Mas e como isso funciona? O que significam as linhas de código que você vai inserir em seu arquivo de configurações do Python? Abaixo segue uma lista, linha por linha, explicando brevemente o que o código acima faz:

  1. Importa o módulo os
  2. Importa o módulo atexit
  3. Importa o módulo readline
  4. Importa o módulo rlcompleter
  5. Expande o nome de arquivo de ‘~/.python_history’ para ‘/home/nome_usuário/.python_history’ e grava isso na variável history
  6. Lê o arquivo de histórico cujo nome foi obtido na linha anterior
  7. Faz a ligação da tecla TAB com a função de completação
  8. Registra a função de gravação do arquivo de histórico para que seja executada sempre que o shell python for finalizado

Pronto, é isso. Agora faça o teste, abra um shell python, digite alguns comandos e feche. Abra novamente o shell python e pressione a tecla seta para cima e verifique se os comandos foram armazenados no histórico. Edit: caso o arquivo ~/.python_history não exista, ocorrerá um erro ao abrir o shell Python. Isso pode ser solucionado criando o arquivo vazio antes (touch ~/.python_history).

¹ Baseado no arquivo de configurações apresentado em: http://valueerror.wordpress.com/2009/11/03/python-shell-history-autocompletion-and-rc-file/

Completação por tab no shell interativo

Algo muito útil para quando estamos testando e estudando código Python, é termos um shell interativo que nos forneça completação de nomes de funções/atributos dos módulos/tipos disponíveis em Python. Qual a utilidade disso?

  1. Possibilita que lembremos daquela funçãozinha cujo nome esquecemos por falta de prática
  2. Auxilia no estudo, pois é possível conhecermos novas funções existentes nos módulos fornecidos juntamente com o Python, que muitas vezes facilitam várias tarefas em nossos programas

Bom, vamos ao que interessa. Abra em seu editor de textos o arquivo /home/nome_usuário/.pythonrc e cole o seguinte conteúdo dentro deste arquivo. Caso o arquivo não exista, não hesite em criá-lo!

import readline, rlcompleter
readline.parse_and_bind('tab: complete')
del readline, rlcompleter

Por fim, é necessário que você configure sua variável de ambiente PYTHONSTARTUP para possuir como valor o caminho do arquivo .pythonrc. Para isso, coloque em seu arquivo .bashrc o seguinte comando:

export PYTHONSTARTUP=~/.pythonrc

Após isso, abra um shell interativo python e faça um teste (<TAB> significa que você deve pressionar a tecla tab do seu teclado):

import string
string.<TAB><TAB>

Pronto, o shell Python deverá lhe mostrar várias opções de funções disponíveis no módulo string. A Figura 1 apresenta o shell python oferecendo opções de completação para o módulo atexit.

Completação no Shell Python

Figura 1. Completação no Shell Python