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”;
     

    Figura 1. Eclipse

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

    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);

    Figura 3. Selecionando Interpretador

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

    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.

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;

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.

List Comprehensions

Desde sua versão 2.0, Python oferece uma construção chamada list comprehensions, que é capaz de gerar listas de valores de forma bastante clara e concisa. Considere a notação matemática de conjunto, utilizada para descrever um conjunto composto pelo dobro de cada um dos números naturais de 0 até 9:

Tal notação descreve um conjunto de elementos através de propriedades que seus elementos devem satisfazer. A expressão acima pode também ser lida como:

S é um conjunto que contém como elementos os dobros de todos números naturais menores que 10.

Resultando no seguinte conjunto:

{0, 2, 4, 6, 8, 10, 12, 14, 16, 18}

Em Python, é possível descrevermos uma lista através de uma construção semelhante à notação matemática para descrição de conjuntos. Veja o exemplo abaixo, que apresenta tal construção, chamada de list comprehensions:

>>> S = [x*2 for x in range(0, 10)]
>>> print S
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

Como podemos ver, foi gerada uma lista com os quadrados dos números de 0 a 9. Ou seja, a expressão acima pode ser lida como:

Gere uma lista contendo o dobro de cada número inteiro na faixa de 0 a 9.

Também é permitido que sejam utilizadas expressões condicionais dentro de list comprehensions:

>>> S = [x*2 for x in range(0,10) if x % 2 == 0]
>>> print S
[0, 4, 8, 12, 16]

Ou seja, gere uma lista contendo o dobro de todo elemento x, sendo x um número entre 0 e 9, se x for um número par. O seguinte trecho de código obtém o mesmo resultado, sem a utilização de list comprehensions.

S = []
for x in range(0,10):
    if x % 2 == 0:
        S.append(x*2)

Apesar de inspirada na notação matemática, essa construção também pode ser utilizada para conjuntos não-numéricos:

>>> [s.capitalize() for s in ['um', 'dois', 'tres']]
['Um', 'Dois', 'Tres']

Também é possível gerar uma lista de listas como resultado:

>>> [[s.capitalize(), s.upper(), len(s)] for s in ['um', 'dois', 'tres']]
[['Um', 'UM', 2], ['Dois', 'DOIS', 4], ['Tres', 'TRES', 4]]

Ou então, uma lista de tuplas:

>>> [(s.capitalize(), s.upper(), len(s)) for s in ['um', 'dois', 'tres']]
[('Um', 'UM', 2), ('Dois', 'DOIS', 4), ('Tres', 'TRES', 4)]

Como você pode ver, a estrutura de list comprehensions é bastante flexível. Descubra mais detalhes em: http://docs.python.org/tutorial/datastructures.html#list-comprehensions