Python 2 está com os dias contados!

Jorge Augusto Klemm
mercos-engineering
Published in
6 min readApr 22, 2019

Assim como tudo na vida, os softwares envelhecem e morrem, e para continuar no mercado precisam se adaptar à realidade de constante evolução:

  • Adaptação a novos protocolos, bibliotecas, hardware,
  • Novas plataformas e dispositivos,
  • Bugs de desempenho ou segurança,
  • Suporte a dicionários de caracteres para vários idiomas,
  • Mudanças em regras, leis, tributos, governos, horário de verão, anos bissextos e muito mais… 🙃

Por isso, softwares devem ser flexíveis e são substituídos por versões novas constantemente, nesse momento, deixam de usar (depreciam) algumas funcionalidades e trazem melhorias e novidades (improvements & features).

Com a linguagem Python isso não é diferente. Sua versão 2.x está à 19 anos no mercado, e ao longo do tempo foi preciso fazer alterações para atender as necessidades da época. Com o acumulo de alterações durante todos esses anos, surgiu a necessidade de uma nova revisão da linguagem.

Atualmente há um grande esforço por parte dos desenvolvedores de software e de bibliotecas, para migrar para a versão 3.x da linguagem.

Esta imagem é uma cortesia de trytoprogram.com

No infográfico acima fica claro o ano que as versões foram lançadas, e disso podemos tirar algumas conclusões. Que o Python 3 parece novidade, mas já se passaram mais de 10 anos desde seu lançamento, a revisão já está madura e validada o suficiente para entrar em produção.

Data de morte postergada

Curiosamente, o Python 2 possuía a data de morte para o ano 2015, mas o ecossistema da linguagem ainda não estava preparado para a mudança, o que resultou em alterar esse marco para cinco anos no futuro (daqui a pouco em 2020).

Ainda há algumas versões planejadas, como as versões 2.7.17 na metade de 2019 e 2.7.18 em Janeiro de 2020. Pois conforme a PEP-373, não teremos uma versão 2.8

"There will be no Python 2.8" — PEP 373 em 03/11/2008

Há quem esteja muito feliz com o fim da versão 2.x do Python, tanto que construíram uma contagem regressiva.

O que ganho ao atualizar para o Python 3?

Falando da parte técnica, o Instagram, um dos maiores produtos da atualidade utiliza Python e Django, e sua equipe técnica fez um trabalho exemplar de migração do Python 2 para 3 em 10 meses. Neste artigo explicaram o processo envolvido, e que após a migração tiveram ganhos inesperados: reduziu pelo menos 12% de CPU, e um consumo 30% menor de memória nos processos assíncronos. É um fato inspirador e são ótimos números para justificar a atualização.

Se falando de mercado, a comunidade quer se manter atualizada e utiliza a última versão da linguagem de programação, e com isso, são gerados cursos, eventos, treinamentos e novas ferramentas também focadas na versão atual.

Até mesmo a contratação de desenvolvedores na área é facilitada quando mantemos a versão da linguagem e dependências atualizadas. Dificilmente alguém aceitaria entrar em um projeto que nos dias de hoje está rodando ainda em Python 1.0

Uso Python 2 e agora?

Para quem utiliza o Python 2, há um passo-a-passo que facilita o processo de migração. A parte interessante é o fato da linguagem permitir importar funcionalidades das versões futuras, deixando o seu código compatível com a próxima versão sem ainda estar rodando nela!

Exemplo de código Python 2, importando comportamentos do Python 3

Bom, parece fácil, só importar os recursos futuros e adaptar seu código, mas não é uma questão de escolha. Leia com atenção a mensagem que o principal gerenciador de pacotes do Python (o pip) escreve toda vez que é executado:

DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 won’t be maintained after that date. A future version of pip will drop support for Python 2.7.

A frase final traz um peso extra quando informa que uma futura versão do pip vai deixar de suportar o Python 2.7, ou seja, seu projeto não vai rodar (se você atualizar o pip) porque não vai conseguir baixar as dependências. 😱

Realmente, quando postergaram a morte do Python em 5 anos, não estavam de brincadeira!

Bibliotecas de terceiros

Se você assim como muitos utiliza o gerenciador de pacotes pip, provavelmente seu projeto possui o arquivo requirements.txt. Nele estão listadas todas as bibliotecas que são dependências do seu projeto. E muitas dessas dependências podem não estar compatíveis com o Python 3.

Para facilitar nossa vida, existe uma ferramenta que possibilita verificar a compatibilidade de vários pacotes com apenas um comando.

Execute o comando para instalar:

pip install caniusepython3

E o comando para verificar a compatibilidade:

caniusepython3 -r requirements.txt

Se tudo estiver ok, parabéns! Todas as suas dependências já são compatíveis com a nova versão do Python.

Caso contrário, será necessário substituir as bibliotecas conflitantes por outras que sejam compatíveis, ou auxiliar a migração desta biblioteca alterando o código conflitante e abrindo uma Pull Request no repositório da mesma.

Código proprietário

Todo código que você (e sua equipe ou empresa) produz é um código próprio, e este código precisará estar compatível com o Python 3 para efetuar a migração.

Não apenas isso, é interessante criar uma cultura e hábito de programar utilizando apenas a sintaxe compatível com o Python 3, caso contrário, algum desenvolvedor desavisado poderá adicionar uma porção de código que seja apenas compatível com a versão 2, e no caso do Python que é uma linguagem interpretada, o erro poderá ser apenas notado em produção.

Para auxiliar nessa parte, uma ferramenta é muito útil, é o Pylint. Esse linter possui uma opção muito interessante chamada py3k, com esta opção ativada, ele apenas vai informar sobre problemas de compatibilidade com o Python 3.

Existem várias ferramentas de análise estática de código, ou seja, validam o código do seu projeto. Algumas exemplos são: CodeClimate e o Ebertapp.io.

Nós aqui na Mercos, desenvolvemos um projeto empacotando a engine do Pylint em um container Docker, assim esse linter funciona em ambos CodeClimate e Ebertapp. Isso possibilitou visualizar dentro dessas plataformas quais são os erros de compatibilidade que precisamos resolver antes de tentar rodar o projeto no Python 3.

Ebertapp.io: Pylint issues exibe todos os erros de compatibilidade do código que precisam ser corrigidos

Conclusão

Realmente há um grande esforço de tempo e energia para manter o ambiente atualizado, quase tudo hoje em dia possui uma versão, que evolui com o tempo e torna algo que hoje é novo em obsoleto rapidamente, isso é inevitável. Mas é uma grande conquista manter-se na versão atualizada no stack de desenvolvimento.

Aqui na Mercos, acreditamos que faz parte de cada individuo e time manter o ambiente adequado para conquistar a produtividade ideal. Nos times de desenvolvimento, por exemplo, desde o hardware à software e até mesmo os processos são debatidos constantemente, isso se reflete na quantidade de features que conseguimos entregar no produto, e na qualidade de código produzido diariamente, com um número minúsculo de bugs gerados.

E não é só isso!

Este artigo é uma introdução ao assunto, e minha ideia é continuar nos próximos artigos abrangendo de forma mais detalhada a atualização para o Python 3.

--

--