Já faz mais de um ano que tomei a decisão de aprender de vez python. Vi algumas coisas de python durante a faculdade e sempre ouvia alguns professores mencionar a linguagem com certo gosto pessoal. Porém nunca havia tomado a decisão de investigar a tecnologia e começar a usa-la como ferramenta no meu dia-a-dia.
Desde que comecei a estudar python, decidi usar a linguagem sempre que fosse conveniente e sempre que eu tivesse a liberdade de escolher a tecnologia dos trabalhos que adquiria. Também passei a usar python em meus projetos pessoais, testando o que a tecnologia oferece para aplicativos desktop, aplicativos web e automatização de tarefas. Porém, aprender e usar uma tecnologia não se resume somente a entender os mecanismos, a sintaxe e os pontos fortes e fracos da linguagem. Envolve também entender todo o ecossistema que envolve a tecnologia, bem como, a comunidade e quem são os mentores por trás desse sistema.
O objetivo desse post é introduzir, de forma breve, o ecossistema python e auxiliar os amigos que estão interessados em começar com a tecnologia. Também pretendo descrever os recursos que utilizei, e utilizo, para continuar estudando e aprendendo a linguagem e seu ecossistema.
Existem muitos outros itens a serem considerados, mas vou destacar somente os abaixo:
Versões e implementações
Existem duas versões de python que são bem utilizadas: a versão 2.7 e a versão 3+. Há algumas diferenças entre as duas versões, algumas diferenças bem sutis tanto sintaticamente quanto semanticamente. A comunidade python está trabalhando para portar as bibliotecas e pacotes disponíveis na linguagem para a versão 3 e também existe um grande esforço de programadores para portar seus frameworks e bibliotecas.
Apesar da versão 2.7 ser a mais utilizada e normalmente distribuída em muitos sistemas Unix-like por ai, é aconselhável fazer o update e utilizar a versão 3+. Algumas bibliotecas ainda não estão totalmente adaptadas para a versão 3, mas as mais populares já estão disponíveis nessa versão. Você pode checar no Python 3 Wall of super powers se o pacote ou framework que você quer utilizar já está adaptado para o python 3. Se você está começando e não precisa de nada tão especifico, vá direto para o python 3.
Em relação as diferentes implementações, existem hoje 4 implementações conhecidas (pelo menos que eu conheço): Cpython, PyPi, Jython e IronPython.
A CPython (Common Python) é a implementação mais popular, mais conhecida e mais utilizada (é essa versão que normalmente vem com sua distribuição Linux). Ela também é referência para as outras implementações da linguagem e é a implementação que você encontra para fazer download no site ofícial do python.
O Jython e IronPython são, respectivamente, implementações de python em java e python para a plataforma Microsoft.net CLR. Já PyPy é uma implementação de Python desenvolvida em Python, e segundo o site do PyPy, roda programas python mais rapidamente que a versão oficial, a CPython.
Por fim, ao menos que você tenha um requisito ou objetivo específico, use a versão oficial CPython que pode ser baixada no site ofícial.
####Módulos e pacotes
Todo código em Python é organizado através de módulos. Um módulo pode ser um arquivo python com uma ou varias funções.
Também pode ser um diretório contendo um ou vários arquivos python. Um módulo pode ser importado em outro módulo através do comando
import
ou do comando from... import
.
Quando se é importado um módulo dentro de um programa python o interpretador importa esse módulo como um objeto (tudo em python é objeto) e suas funcionalidades são acessadas através desse objeto criado. Exemplo:
Ou com o comand from…import
Para saber onde o python busca por esses pacotes, existe um módulo chamado sys que possui uma lista com todos os diretórios onde o interpretador busca por pacotes. Essa lista é configurada no momento que o python é instalado e pode ser manipulada afim de incluir dinamicamente novos diretórios onde o interpretador poderá procurar por novos módulos.
No meu laptop, rodando Ubuntu 12.04, a lista está configurada como segue:
Assim como em outras linguagens, o python importa automaticamente um módulo chamado builtins que contém algumas funções e classes uteis como str, open, len, Exception, etc.
A lista de módulos da biblioteca padrão é vasta. E por esse motivo, a comunidade python se refere a linguagem como sendo “Batteries Included” já que existe uma variedade de módulos disponíveis para as mais diversas tarefas.
Pacotes de terceiros e pip
Mesmo que a biblioteca padrão do python seja tão vasta, em algum projeto sempre vamos precisar de uma biblioteca ou framework de terceiros que facilite nosso trabalho. Eu conheço três modos de instalar novos pacotes para o python:
- utilizando o gerenciador de pacotes do seu sistema operacional;
- utilizando o pip (Python Installer Package);
- instalando através do código fonte da biblioteca;
Os três modos fazem praticamente a mesma coisa: instalam os pacotes e suas dependências em algum dos diretórios que o interpretador usa para procurar módulos.
Particularmente eu uso mais o pip. Acho ele muito pratico e ainda possui algumas funcionalidades interessantes quando se está trabalhando em um ambiente virtual (o que veremos mais adiante).O pip pode ser instalado baixando o pip-installer ou usando o gerenciador de pacotes do sistema operacional. Uma vez instalado, para baixar uma nova biblioteca basta utilizar o comando:
Para instalar o framework flask por exemplo, basta rodar o comando:
Outras funcionalidades do pip incluem instalar bibliotecas com versões específicas, fazer upgrades e downgrades de pacotes, buscar bibliotecas por nome ou palavra chave, instalar dependências baseando-se em um arquivo comumente encontrado em projetos python chamado de requirements.txt e gerar esses mesmos arquivos com todas as dependências e versões de um projeto. No site do pip é possível ver os comandos disponíveis pela ferramenta.
Existem muitas formas de encontrar pacotes Python. Você pode procurar por pacotes no github ou no site do Python Package Index, que é uma das melhores formas de encontrar bibliotecas python e é a fonte de pacotes utilizado pelo pip.
VirtualEnv
O VirtualEnv é uma ferramenta utilizada para criar ambientes de desenvolvimento Python isolados.
A necessidade de isolar ambientes surge com a necessidade que muitas vezes temos de usar versões de pacotes e bibliotecas diferentes em cada projeto. Por exemplo, digamos que você instalou a versão mais recente do BeautifulSoup no path principal do Python, no entanto, a versão mais recente trás algumas incompatibilidades com a versão anterior que você usou em um projeto qualquer. Como fazer para utilizar a versão anterior do pacote se você atualizou a biblioteca no ambiente padrão do python?
Para solucionar esse problema, podemos utilizar o virtualenv e criar um ambiente python isolado. Nesse ambiente isolado você pode utilizar o pip para instalar a versão necessário da biblioteca. Para criar o ambiente isolado basta digitar:
Note que ao rodar o comando, o virtualenv cria um diretório. Dentro desse diretório , além de outras pastas, existe uma pasta chamada bin onde se encontra o interpretador do python que será utilizado ao ativar o ambiente virtual.
Com o ambiente criado, é preciso ativa-lo:
Ao ativar, podemos perceber que o python do ambiente isolado utiliza um novo path para procurar e instalar pacotes e libs python.
Agora, com o ambiente isolado ativo, podemos instalar novas bibliotecas e pacotes com versões específicas sem alterar a instalação padrão do python.
O uso do virtualenv e do pip são muito divulgados pela comunidade Python. É de boa prática sempre utilizar virtualenv e desenvolver em ambientes isolados afim de evitar conflitos de versões e gerenciar efetivamente as dependências de um projeto.
Ferramentas e Frameworks
Python é uma linguagem de propósito geral. Ela é usada para construir aplicações web, aplicações desktop, games e automatizar tarefas. Quando se trata de aplicações web a comunidade python apresenta inúmeros frameworks. Vou limitar esse post a somente dois frameworks que conheço, o Flask e o Django.
Flask
O Flask é um microframework web que permite criar aplicações rapidamente. Ele é integrado a um sistema de template engine simples e prático (Jinja2) e possui um wrapper que facilita a integração com o orm SqlAlchemy.
Ele é muito parecido com os frameworks Slim(PHP) e Sinatra(Ruby). Uma aplicação simples, teria a seguinte estrutura:
E para iniciar a aplicação:
Para acessar essa aplicação exemplo, basta ir até seu navegador e abrir o endereço http://locahost:5000.
Django
O Django, ao contrário do Flask, é um framework full stack. Ele possui vários módulos e libs que facilitam e agilizam o desenvolvimento de aplicações web. O Django trás, entre outras coisas, um ORM e engine de templates próprio, filtros contra XSS, filtro contra CSRF e um admin pronto para sua base de dados.
Ambos podem ser instalador através do pip. Há inúmeros cursos e tutoriais na internet para aprender a desenvolver aplicações web com esses dois frameworks web.
Pygame
Pygame é um wrapper para linguagem Python da biblioteca gráfica SDL2. Possui uma comunidade bem ativa e você pode tirar dúvidas e até participar em implementações de alguns games e desafios que a comunidade promove.
É uma forma divertida de conhecer e usar a linguagem a fundo. Também é uma maneira interessante de começar a desenvolver e entender algumas técnicas por trás de games 2D. Para aprender um pouco e desenvolver alguns pet projects comecei lendo o livro gratuito Making Games with Python and Pygame de Al Sweigart.
Sem dúvida, depois de aprender um pouco de PyGame seu aprendizado de python vai ser muito mais divertido.
Onde começar
Existem muitas fontes disponíveis para aprender python e você pode usar a forma que mais se adequa ao seu estilo de aprendizado. Se você gosta de aulas, existem iniciativas bem legais como o Google Class, o Python Pro e o curso do Henrique Bastos de Django. Particularmente, já assisti algumas aulas no google class. Além de serem gratuitas, são excelentes e valem muito a pena. Também já fiz o curso do Henrique Bastos de Django e gostei muito também.
Se você gosta de livros, existem dois livros gratuitos (para ler online) que usei e uso: o Learn Python the Hard Way e o Dive Into Python 3. Ambos os livros são excelentes e trazem uma série de exercícios interessantes que ajudam a entender e praticar o jeito pythonico de resolver problemas.
O Eric Hideki, compilou no blog dele, uma lista de sites que são úteis para quem quer aprender python. Vale a pena conferir.
Por fim, para entender bem a filosofia da linguagem, basta digitar no interpretador python o comando import this e ler o famoso poema de Tim Peters, o Zen of Python: