Python 2 está com os dias contados!
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.
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!
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.
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.